← 返回首页

在 CAA 客户端中脱离 BatchMonitor 启动 PLM Batch

在 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 图形界面配置参数,但在自动化场景下,我们需要:

  1. 用代码生成 Parameters XML 文件

    (作为 Batch 的输入)

  2. 调用底层机制启动 Batch

  3. 解析 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

如果你正在开发与集成相关的自动化工具,掌握 脱离 BatchMonitor 启动 PLM Batch 的能力将极大提升系统灵活性和可维护性。

评论