[返回博客](/cn/blog) # BOM 管理器概述

Andrii Morozov 七月 11, 2017 [\#mechanical](/cn/blog/tag/mechanical) [\#getting started](/cn/blog/tag/getting-started)

<a class="a2a_button_facebook"></a><a class="a2a_button_twitter"></a><a class="a2a_button_linkedin"></a>

物料清单 (BOM) 管理器是一种服务（服务类），它为绘图中的 BOM 表、零件和组件提供接口。BOM 管理器还为 BOM 行及其数据（反映或包含零件数据或组件数据的行）提供接口。

本主题包含以下部分：

- BOM 管理器功能和示例
- 获取所有 BOM 表
- 按名称获取 BOM 表
- 按 ID 获取零件数据
- 按 ID 获取 BOM 行或零件列表组项的项数据

#### BOM 管理器功能和示例

物料清单收集机械结构和零件的所有数据，并以表格形式表示所有数据。BOM 管理器处理不同的数据源，例如 BOM 行和数据条目。

BOM 管理器可以按如下方式创建和调用：

OdRxClassPtr pService = odrxServiceDictionary()-&gt;getAt(L"AcmBOMManager");  
AcmBOMManagerPtr pBOMMgr = pService-&gt;create();` `

物料清单是一个特殊的字典。AcmBOM 条目可以在 BOM 表列表的 AcmDictionary 部分中找到。

![image1](/files/inline-images/image001_2.png)图 1 – BOM 表列表

BOM 管理器处理开放绘图或数据库中的对象，通常将 OdDbObjectId 作为参数。

#### 获取所有 BOM 表

在下图中，示例文件中显示了三种 BOM 类型：

- 名为“MAIN”的主 BOM 表
- 名为“COMPONENT ASSEMBLY BOM”的装配 BOM 表
- 名为“TITLE BORDER BOM”的标题边框 BOM 表

```


 
```

![image2](/files/inline-images/image002_0.png)要获取整个绘图的所有 BOM 表以及可选地从外部引用文件中获取任何 BOM 表，请使用 getAllBomTables() 方法：

```
OdResult getAllBomTables(OdDbObjectIdArray& bomIds, bool xrefed, OdDbDatabase * pHostDb);

```

第一个参数 bomIds 是一个包含 BOM 表 ID 的 OdDbObjectId 元素数组。第二个参数 xrefed 定义是否从外部引用文件中获取 BOM 表。最后一个参数 pHostDb 指定要查找 BOM 表的数据库。

使用 getAllBomTables() 方法的示例：

```

OdDbObjectIdArray objIdArr; 
pBOMMgr->getAllBomTables(objIdArr, useXrefs, pDb);
```

getAllBomTables() 方法的示例输出：

```

List of BOM tables (objIdArr) for the above example file will contain IDs of the BOM Tables:
MAIN                                                                                                                    
COMPONENT ASSEMBLY BOM                                                                                                  
TITLE BORDER BOM
```

#### 按名称获取 BOM 表

要获取 BOM 表，请使用 getBomTable() 方法，该方法返回具有指定名称的 BOM 表的 OdDbObjectId：

```
OdResult getBomTable(const OdString& name, OdDbObjectId& bomTableId, OdDbDatabase * pDb);

```

第一个参数 name 是 BOM 表名称。第二个参数 bomTableId 接收相应 BOM 表对象 ID 的返回值。第三个参数 pDb 是指向 BOM 表所在数据库的指针。

使用 getBomTable() 方法的示例：

```

OdString bomName(L"MAIN");
OdDbObjectId bomTableId;
OdResult result = pBOMMgr->getBomTable(bomName, bomTableId, pDb);
if (result == eOk)
{
  AcmBomPtr pBom = AcmBom::cast(bomTableId.safeOpenObject());
  odPrintConsoleString(pBom->getBomName());
  odPrintConsoleString(L"\n");
  odPrintConsoleString(pBom->getDbHandle().ascii());
  odPrintConsoleString(L"\n");
  return eOk;
}
```

getBomTable() 方法的输出示例：

```
MAIN                                                                                              
34B
```

#### 按 ID 获取零件数据

要按 ID 获取零件数据，请使用 getPartData() 方法，该方法适用于零件参照：

```
OdResult getPartData(const OdDbObjectId& referenceId, OdUInt32& numOfItems, OdMapStringToString& valueMap);

```

第一个参数 referenceId 是零件参照对象 ID。第二个参数 numOfItems 获取项目数量（QTY 字段）的返回值。第三个参数 valueMap 获取属性值的映射。

getPartData() 方法获取零件参照和零件参照数据条目所包含的数据。它将零件参照的 OdDbObjectId 作为输入参数，并将其输出参数设置为项目数量（QTY 字段）和属性值映射。getPartData() 方法检查 BOM 标准，如果属性为空，则返回默认 BOM 标准值（如果存在）。

使用 getPartData() 方法的示例：

```

OdUInt32 numOfItems;
OdMapStringToString valueMap;
result = pBOMMgr->getPartData(partRefObjId, numOfItems, valueMap);
```

getPartData() 方法的输出示例（valueMap 内容）：

```

BOM_UNITS : ea                                                                                                         
DESCR : description is missing                                                                                          
MATERIAL : Stainless                                                                                                    
NAME : OP9101SL                                                                                                         
STANDARD : ISO                                                                                                          
TOTAL_MASS : =IF(ISBLANK(MASS),BLANK,QTY*MASS)
```

#### 按 ID 获取 BOM 行或零件清单组项目的数据

要按 ID 获取 BOM 行或零件清单组项目数据，请使用 getItemData() 方法：

```

OdResult getItemData(const OdDbObjectId& itemId, OdString& itemNo, OdUInt32& numOfItems, OdMapStringToString& valueMap, const OdDbObjectId& bomStdId);
```

第一个参数 itemId 是要获取项目数据的对象的 ID。第二个参数 itemNo 获取项目编号的返回值。第三个参数 numOfItems 获取项目数量（QTY 字段）的返回值。第四个参数 valueMap 获取属性值的映射。第五个参数 bomStdId 是用于获取默认 BOM 标准值的标准的 ID。  
工作流程类似于 getPartData()。getItemData() 方法将要获取项目数据的对象（BOM 行或零件清单组项目）的 OdDbObjectId 作为输入参数。项目编号、项目数量 (QTY) 和属性值映射是输出参数。

使用 getItemData() 方法的示例：

```

OdString itemNo;
OdUInt32 numOfItems;
OdMapStringToString valueMap;
pBOMMgr->getItemData(bomRowId, itemNo, numOfItems, valueMap);
```

getItemData() 方法的输出示例：

```

itemNo: 1
numOfItems: 4 
valueMap contents:
BOM_UNITS : ea
DESCR : description is missing
MATERIAL : Stainless
NAME : OP9101SL
STANDARD : ISO
```

更多 BOM 相关示例可在 Examples|TmBomEx 项目中找到。

更多信息请参见[我们的文档](https://docs.opendesign.com/mech/mech_BOM_manager_overview.html)。

## 今天就开始行动

**免费试用 ODA 软件 60 天。  
无风险，无需信用卡。**

[免费试用](https://www.opendesign.com/cn/free-trial)
