在达索系统的 3DEXPERIENCE 平台中,CAA(Component Application Architecture) 和 EKL(Enterprise Knowledge Language) 是两类核心的扩展机制:
-
CAA
:基于 C++ 的底层框架,擅长 UI 定制、命令开发、性能敏感逻辑;
-
EKL
:基于规则的脚本语言,适合快速构建业务规则、自动化检查、参数化逻辑。
但很多开发者面临一个现实问题:EKL 功能有限,而 CAA 开发周期长;能否让两者“强强联合”?
答案是:完全可以! 而且官方在 R2025x 版本中提供了清晰的互操作路径。
本文将手把手带你掌握 EKL 与 CAA 双向调用 的完整流程,并附上典型应用场景,助你打造更灵活、高效的 3DEXPERIENCE 定制方案。
🔁 为什么需要 EKL 与 CAA 互操作?
| 场景 | 仅用 EKL 的局限 | 引入 CAA 的优势 |
|---|---|---|
| 获取当前会话的 Authoring Context | ❌ 无内置 API | ✅ 可通过 CAA 直接读取 |
| 调用 Web Service 或外部系统 | ⚠️ 需依赖 Python/Java 层,复杂 | ✅ CAA 可直接封装 HTTP 请求 |
| 执行高性能几何计算 | ⚠️ EKL 性能弱,不支持底层几何库 | ✅ CAA 可调用 CGM、GeometricObjects 等 |
| 在 CAA 命令中复用已有 EKL 规则 | ❌ 无法直接调用 | ✅ 可反向触发 EKL Action |
💡 核心思想:用 CAA 补足 EKL 的“能力短板”,用 EKL 简化 CAA 的“业务逻辑”。
📌 第一部分:从 EKL 调用 CAA(最常用场景)
这是最常见的需求——在 EKL 规则或 Action 中调用你用 CAA 编写的自定义函数。
步骤概览
- 创建 CAA 用户函数(User Function)
- 注册到 Knowledgeware 字典
- 生成 Knowledge Index 文件(.CATKweIdx)
- 在 EKL 中直接调用
Step 1:实现 CATIAddLibrary 接口
你需要创建一个类(如 TestCAAAddLibrary),实现 CATIAddLibrary::Add() 方法,在其中:
-
调用
CATCkeGlobalFunctions::GetFunctionFactory() -
使用
CreateFunction("MyFunc", returnType, evaluator) -
通过
AddArgument()添加输入参数
// 示例:创建一个计算直角三角形斜边的函数auto pFactory = CATCkeGlobalFunctions::GetFunctionFactory();auto pHypotFunc = pFactory->CreateFunction("MyCAAHypotenuseFunction", pDict->GetType("Real"), // 返回类型 MyHypotenuseEvaluator // 自定义求值函数);pHypotFunc->AddArgument(pFactory->CreateArg("iX", pDict->GetType("LENGTH")));pHypotFunc->AddArgument(pFactory->CreateArg("iY", pDict->GetType("LENGTH")));
Step 2:实现 CATICreateInstance
为了让 3DEXPERIENCE 加载你的函数库,还需创建一个扩展类(如 TestCAAInstance),实现 CATICreateInstance::CreateInstance(),返回 new TestCAAAddLibrary()。
⚠️ 注意:必须在 .dictionary 文件中声明接口与实现的映射关系。
Step 3:配置资源文件
-
CATNls 文件
:
CATPackageUserDefined.CATNls→ 定义包的显示名称 -
CATRsc 文件
:
CATPackageMethodUserDefined.CATRsc→ 关联包名与实现类 -
位置
:
${Framework}/CNext/resources/msgcatalog/
Step 4:生成 Knowledge Index
打开 Visual Studio → 3DS Runtime Prompt,执行:
CATCkeGenerateIdx.exe -tk <provider> <server:port> <ticket> myindex C:\YourWorkspace
将生成的 myindex.CATKweIdx 重命名为 CATPackageUserDefined.CATKweIdx,放入:
...\resources\knowledge\
Step 5:在 EKL 中调用
现在你可以在 Engineering Rules Capture 中直接使用:
Let hypot (Real)hypot = MyCAAHypotenuseFunction(10mm, 20mm)Message("斜边长度 = " + hypot + " mm")
✅ 效果:EKL 脚本无缝调用 CAA 函数,返回计算结果!
🔙 第二部分:从 CAA 调用 EKL(高级场景)
有时你希望在 CAA 命令中触发一段 EKL 逻辑(比如复用已有的业务规则)。
方案一:调用 EKL Business Rule(.CATRule 文件)
-
编写 XML 配置文件
创建CAAMyAppBusinessRules.xml,定义 OpeningID 和参数:<rsc:ResourceSetId="CAAMyAppBusinessRules"ExecutionMode="Computation"><rsc:ParameterName="InputString"Type="String"Mode="IN"/><rsc:ParameterName="Result"Type="String"Mode="OUT"/></rsc:ResourceSet> -
在 CAA 中调用
// 获取执行管理器CATBaseUnknown_var spBRMgr = ::CATPLMGetBusinessRuleExecutionManager();// 创建上下文参数CATListValuable_var args;args.Append(pVolatileFactory->CreateString("InputString", "Hello from CAA"));// 生成上下文CATBaseUnknown_var spContext;brMgr->ProduceBusinessRuleContext("MyAppBusinessRules", args, spContext);// 执行计算型规则HRESULT hr = brMgr->PerformComputation("MyAppBusinessRules", spFact, spContext); -
从上下文提取输出参数
通过spContext->GetValue("Result")获取 EKL 返回值。
方案二:调用 EKL Action(推荐!更灵活)
EKL Action 可作为 Knowledge Resource 存储在 Data Setup App 中,支持动态部署。
操作流程:
-
在 Engineering Rules Capture 中创建 EKL Action(如
GetUserGroup) -
进入 Data Setup App → 创建 Resource Set → 添加 Action 类型资源
-
绑定该 Action 到协作空间(Collaborative Space)
-
在 CAA 中通过
PLMISetupDataFinder查找并执行:
// 查找资源CATBaseUnknown_var spRsc = pFinder->FindPointedResource("UserGroup");// 转为 EKL 函数CATICkeFunction_var spAction = spRsc;// 创建参数CATICkeVolatileFactory_var pVF = ...;auto spInput = pVF->CreateString("userId", "U12345");auto spOutput = pVF->CreateString("jsonResponse", "");// 执行spAction->Run(spInput, spOutput);
✅ 优势:无需重启客户端,支持热更新,适合云环境部署!
⚠️ 注意事项与限制
-
权限要求
:操作 Data Setup 需 Owner 或 Admin 角色
-
许可证
:需 TER(Templates & Rules Designer)License
-
调试建议
:开启 CAA 日志 + EKL 脚本断点
-
性能提示
:频繁调用 CAA 函数时,避免在 EKL 循环中反复调用
🎯 典型应用案例
| 场景 | 实现方式 |
|---|---|
| 创建对象前校验 Authoring Context | EKL 调用 CAA 函数检查会话状态 |
| 从 PLM 外部系统获取用户组信息 | CAA 调用 EKL Action → Action 内调 Web Service |
| 动态生成 BOM 表格 | CAA 命令触发 EKL Computation Rule 计算结构 |
| 自定义测量工具 | CAA 封装几何算法,EKL 提供交互界面 |
🔚 结语
EKL 与 CAA 的互操作,不是“能不能”,而是“怎么用得巧”。
-
EKL → CAA
:扩展 EKL 能力边界,接入底层 API
-
CAA → EKL
:复用知识资产,提升开发效率
掌握这套方法,你就能在 3DEXPERIENCE Native App 定制 中游刃有余,既享受 EKL 的敏捷,又拥有 CAA 的强大。
评论