在 CATIA 的 CAA(Component Application Architecture)二次开发中,PLM Batch 是一个非常关键但又常被忽视的模块。它主要用于批量处理 PLM(Product Lifecycle Management)组件,比如将 V5 文档上传到 ENOVIA、执行向下兼容转换等操作。
通常,用户会通过 BatchMonitor 工具 来启动这些批处理任务——无论是从 CATIA 界面中的“工具 > 实用程序”进入,还是通过命令行使用 CATBatchStarter 或 CATUtil。然而,在自动化脚本或集成系统中,我们往往希望绕过图形界面,直接在 CAA 客户端代码中启动 PLM Batch。
今天这篇文章就来详细讲解:如何在 CAA 客户端中脱离 BatchMonitor 环境,自主构建并执行 PLM Batch?
一、什么是 PLM Batch?
PLM Batch 是基于 Batch Infrastructure 架构 构建的一类专用批处理程序,其名称前缀为 “PLM”,表明它专门用于:
-
从 PLM 数据库查询对象(如 PLM Reference、Representation Reference)
-
将处理结果保存回 PLM 数据库
常见的 PLM Batch 包括:
-
DownwardCompatibility
:将高版本 PLM 组件转换为低版本 V5 文档
-
FBDI(File-Based Data Integration)
:将本地 V5 文档上传为 PLM 对象
⚠️ 注意:目前普通用户无法自定义新的 PLM Batch,只能使用系统预置的类型。
二、脱离 BatchMonitor 的核心思路
虽然官方推荐使用 BatchMonitor 图形界面配置参数,但在自动化场景下,我们需要:
-
用代码生成 Parameters XML 文件
(作为 Batch 的输入)
-
调用底层机制启动 Batch
-
解析 Batch 输出结果
(Global Report + Mapping XML)
其中,第1步和第3步是 PLM Batch 特有的难点,而第2步可复用通用 CAA Batch 启动逻辑(参考 《Launching a CAA V5 Batch》)。
本文重点聚焦于 第1步和第3步,这也是 CAA 提供的 CATPLMBatch 和 CATPLMBatchXMLToolBox 两个核心类的用武之地。
三、Step 1:用 CATPLMBatch 生成 Parameters XML
1. 实例化 CATPLMBatch
首先,根据你要运行的 PLM Batch 名称(如 "DownwardCompatibility")创建实例:
CATUnicodeString BatchName("DownwardCompatibility");
CATPLMBatch* pPLMBatch = newCATPLMBatch(BatchName.ConvertToChar());
✅ Batch 名称必须与 BatchMonitor 中显示的完全一致。
2. 设置输入数据
不同类型的 PLM Batch 需要不同的输入:
情况 A:输入为 PLM 组件(如 DownwardCompatibility)
你需要提供一组 CATIAdpPLMIdentificator 对象(代表 PLM Reference 或 Representation Reference):
CATListPtrCATIAdpPLMIdentificator oListofPLMComponents;
// ... 通过属性查询获取 PLM 组件列表(参考 Use Case [3])
HRESULT hr = pPLMBatch->SetSelectedObjects(oListofPLMComponents);
🔍 查询方法可参考:《Querying PLM Components by Attributes》
情况 B:输入为 V5 文档路径(如 FBDI)
此时输入是一组文件绝对路径(CATUnicodeString):
CATListOfCATUnicodeString ListofFileObjects;
ListofFileObjects.Append("D:\\data\\Part1.CATPart");
ListofFileObjects.Append("D:\\data\\Product1.CATProduct");
HRESULT hr = pPLMBatch->SetSelectedObjects(ListofFileObjects);
3. (可选)设置应用参数
某些 Batch 支持通过 SetApplicativeParameter 调整行为,例如控制转换精度、日志级别等(详见 PLM Batch Option Reference)。
4. 设置 License 授权文件
PLM Batch 执行需要授权许可。你可以提供一个 .slt 许可文件,并在文本文件中按如下格式配置:
DownwardCompatibility|InternalDS.slt
FBDI|InternalDS.slt
然后在代码中指定该文件路径:
CATUnicodeString LicenseFileName = "D:\\licenses\\batch_licenses.txt";
💡 如果已在 CATIA 的 Tools > Options 中配置了默认许可文件,此处可传空字符串。
5. (重要)设置 PLM 环境(仅 FBDI 等生成 PLM 对象的 Batch 需要)
FBDI 会根据当前 PLM Environment 决定生成的 PLM 对象类型(如 PRODUCT、PROCESS)。因此需提前设置:
PLMPSISessionHelpers* pSessionHelpers = nullptr;
HRESULT hr = PLMPSISessionHelpers::GetSessionHelpers(pSessionHelpers);
hr = pSessionHelpers->SetCurrentEnvironment("YourEnvironmentName");
📌 Environment 名称由你的 ENOVIA 模型定制决定,例如处理 .CATProcess 文件时应设为 PROCESS 相关环境。
6. 生成 Parameters XML
最后,调用 FillXmlFile 生成输入参数文件:
CATUnicodeString ParamXmlFileName = "D:\\temp\\DownwardComp_Params.xml";
hr = pPLMBatch->FillXmlFile(LicenseFileName, ParamXmlFileName);
如果 ParamXmlFileName 为 NULL,系统会自动存到 $PLMBatch_Default_TargetDir/iBatchName.xml。
四、Step 2:启动 PLM Batch(简述)
此步骤与普通 CAA Batch 启动一致,可参考官方 Use Case 《Launching a CAA V5 Batch》,通常通过 CATBatEngine 或命令行调用 CATBatchStarter 并传入上述 XML 文件。
五、Step 3:解析 PLM Batch 输出结果
Batch 执行后会生成两类关键输出:
| 输出类型 | 说明 |
|---|---|
| Global Report (.htm) | 汇总每个对象的处理状态(成功/失败) |
| Mapping XML (.xml) | 映射输入对象与输出对象的关系(可选) |
1. 获取报告文件路径
CATUnicodeString reportBaseName;
pPLMBatch->GetReportName(reportBaseName);
// 返回无扩展名的路径
CATUnicodeString globalReport = reportBaseName + ".htm";
CATUnicodeString mappingXml = reportBaseName + ".xml";
🗂️ 报告默认生成在 PLMBatch_Default_TargetDir 环境变量指定目录,若未设置则为当前工作目录。
你也可以通过 SetReportParameters 自定义报告路径:
pPLMBatch->SetReportParameters("PLMBATCH_Report_Directory", "D:\\reports\\");
2. 解析 Mapping XML
根据 Batch 类型不同,映射方向也不同:
场景 A:DownwardCompatibility(PLM → V5 文件)
使用 ReadQueryPathMappingFile:
CATIAdpPLMIdentificator* pOriginPLM = nullptr;
CATListOfCATUnicodeString mappedFiles;
HRESULT hr = CATPLMBatchXMLToolBox::ReadQueryPathMappingFile(
mappingXml, // XML 文件路径
0, // 第0条记录(从0开始)
pOriginPLM, // 输入的 PLM 组件
mappedFiles // 输出的 V5 文件列表
);
场景 B:FBDI(V5 文件 → PLM)
使用 ReadPathQueryMappingFile:
CATUnicodeString* pOriginPath = nullptr;
CATLISTP(CATIAdpPLMIdentificator) mappedPLMs;
HRESULT hr = CATPLMBatchXMLToolBox::ReadPathQueryMappingFile(
mappingXml,
0,
pOriginPath, // 原始 V5 文件路径
mappedPLMs // 生成的 PLM 组件列表
);
✅ 通过循环 irecnumber 可遍历所有映射记录。
六、总结
| 步骤 | 关键类/方法 | 说明 |
|---|---|---|
| 1. 构建输入 | CATPLMBatch |
设置 Batch 名、输入对象、License、环境 |
| 2. 生成参数 | FillXmlFile() |
输出 Parameters XML |
| 3. 启动 Batch | 复用 CAA Batch 启动机制 | 非本文重点 |
| 4. 获取结果 | GetReportName() |
定位 Global Report 和 Mapping XML |
| 5. 解析映射 | CATPLMBatchXMLToolBox |
根据方向选择 API |
评论