BOM Engine Interfaces

Modified by Rob Evans on Apr 17, 2018

The Altium SDK Bill Of Materials (BOM) Interfaces allow the creation and management of project BOM data and associated parameters.

The BOM 2.0 Engine is available in the Altium SDK 4.0. Its main class is the BOM Manager (IBomManager) , called for a specific document data source type by the IBomManagerFactory ( EDP.Utils.GetBomManagerFactory()).

A BOM 2.0 Engine example project is included with the Altium Developer installation. In the default Altium Developer installation, the C# (CSharp) BOMPanel example location is: C:\ProgramData\Altium\[host Altium software]\Extensions\Altium Developer\SDK4.0\CSharp\Examples\BOMPanel

BOM usage via the Altium SDK

Start

The very entry point for using the BOM (Bill Of Materials) via the Altium SDK is IBomManagerFactory.

To get an instance of the BOM Factory, use  EDP.Utils.GetBomManagerFactory() method.

Get Bill Of Materials

The Bill Of Materials object is represented by an instance of IBomManager/IActiveBomManager:

  • for any document (SCH / PCB / BOMDOC) as a source of components:
    IBomManagerFactory.GetManagerForDocument(srcDoc)
  • for SCH / BOMDOC as a source of components with a PCB document as an additional source of PCB parameters:
    IBomManagerFactory.GetManagerForDocumentPcb(srcDoc, pcbDoc)
  • for a whole project:
    IBomManagerFactory.GetManagerForProject(project)
  • for a whole project with a PCB document as an additional source of PCB parameters:
    IBomManagerFactory.GetManagerForProjectPcb(project, pcbDoc)

IBomManager / IActiveBomManager

Depending on the options above, you will get an instance of EDP.IBomManager or EDP.IActiveBomManager.

To check which one you have, cast the instance to IActiveBomManager:
var activeBomManager = bomManager as IActiveBomManager;
...and check the result for a null.

Retrive the BOM content

Get rows

IBomComponentList components = bomManager.GetSchema().GetComponents()

IBomComponentList is a list of IBomComponent

Get 'original' components of row

First, check if a row (IComponent) is actually a group – that is, it contains more than one component:  row.IsGroup()

Then cast it to a group and get its components: row.AsGroup().GetComponents()

Get row columns (parameter) values

Getting column parameter values for a given IBomComponent row.

Get row parameters dictionary:
IBomParameterDictionary params = row.GetParameters()

...and use the dictionary’s methods like:
bool TryGetParameter(string argName, out IBomParameter argParameter)

...or:
GetStrValue(..), GetIntValue(..);

Get column aliases

For an ActiveBOM document, column aliases (custom names) can be specifed.

If you have IActiveBomManager (not just the IBomManager) you are able to access:
string aliases = activeBomManager.GetOptions().GetColumnsAliases()

This string should be parsed – split with a ‘|’ char and then received pairs with ‘=’

Get list of all columns (parameters)

IBomParameterDefinitionList columns = bomManager.GetSchema().GetParameterDefinitions()

Get list of custom columns

For an ActiveBOM document, Custom Columns can be created. They are presented in IBomParameterDefinitionList along with other (auto-generated) columns. If a dedicated list is needed for some reason, it can be obtained with:
activeBomManager.GetOptions().GetCustomColumns()

Set up the required BOM

The point where you can configure the BOM is:
IBomManagerOptions o = bomManager.GetOptions()

...or for ActiveBOM:
IActiveBomManagerOptions ao = activeBomManager.GetOptions();

Flat view mode

o.SetAutoGroup(false);
o.SetGroupOrder("");
ao?.SetMultiVariant(false);

Consolidated

o.SetAutoGroup(true);
o.SetGroupOrder("");
ao?.SetMultiVariant(true);

Sorting

Assume there is a:
IList<Tuple<string, ListSortDirection>> sortOrderParams;

Where the first item is Name of Parameter, and the second is Sort Direction.

...then to apply the following setting to BOM usage:

o.SortOrder.Set(sortOrderParams);
o.AutoSort = sortOrderParams.Count == 0;

Avoid affecting BOMs in the rest of Altium Designer

It's advisable to save the BOM Manager Options before they are modified:

IBomManagerOptions options
var savedState = options.GetState();

When all the required data have been collected, restore the options:
options.RestoreState(savedState);

Using a try-finally clause is recommended.

Modify BOM content

Set line number for row

Setting line numbers is possible for ActiveBOM only:

IActiveBomManager activeBomManager = ... // create BomManager for .BomDoc
IBomComponent component = ... // find component in BOM schema
var catalogId = component.GetParameters().GetStrValue("%CATALOGID%");
var catalog = activeBomManager.GetCatalog();
var catalogItem = catalog.FindItem(catalogId);
catalogItem.SetLineNumber("...");

To update BOM schema after changing line numbers in catalog items, call bomManager.UpdateSchema (note - this will recreate the whole BOM schema).

Add custom row

To add a custom row in ActiveBOM:

IActiveBomManager activeBomManager = ... // create BomManager for .BomDoc
var catalog = activeBomManager.GetCatalog();
var catalogItem = catalog.AddCustomRow();

To set parameters for a created custom row use catalogItem methods SetComment, SetDescription, SetLineNumber (or GetParameters().SetValue methods to set any parameter).

To update BOM schema after a creating custom row call bomManager.UpdateSchema.

Save ActiveBOM document

After any modification you may wish to save the ActiveBOM document (*.BomDoc), which can be done as follows:

IDocument document = ... // get ActiveBOM document
var serverDocument = document.DM_ServerDocument();
serverDocument.DoFileSave(document.DM_DocumentKind());
Found an issue with this document? Highlight the area, then use Ctrl+Enter to report it.

お問合せ

お近くの営業所にお問合せください。

You are reporting an issue with the following selected text
and/or image within the active document:
Altium Designer 無償評価版
Altium Designer 無償評価版
Altium Designerを使用していますか?

弊社の営業担当より詳細情報をご案内しますので、アルティウムジャパン までお問い合わせください。.
Copyright © 2019 Altium Limited

評価版ライセンスが必要な理由を下記から選択してください。

弊社の営業担当より詳細情報をご案内しますので、アルティウムジャパン までお問い合わせください。.
Copyright © 2019 Altium Limited

その場合、評価版ライセンスは不要です。

ボタンをクリックして、最新のAltium Designerインストーラをダウンロードしてください。

Altium Designerインストーラをダウンロードする

弊社の営業担当より詳細情報をご案内しますので、アルティウムジャパン までお問い合わせください。.
Copyright © 2019 Altium Limited

Altium Designerの新規ライセンスのお見積もりをご希望の場合、下記のフォームに入力してください。

プライバシーポリシーに同意の上、[ダウンロード]をクリックしてください。ご登録いただきましたメールアドレスにメールマガジンが送信されます。メール配信の停止は、メール内の​通知設定​​でお手続きいただけます。

Altium Designerサブスクリプションをご利用中の場合、評価版ライセンスは不要です。

お客様がAltium Designerサブスクリプションの有効なメンバーではない場合、下記のフォームに入力して無償評価版をダウンロードしてください。

プライバシーポリシーに同意の上、[ダウンロード]をクリックしてください。ご登録いただきましたメールアドレスにメールマガジンが送信されます。メール配信の停止は、メール内の​通知設定​​でお手続きいただけます。

Altium Designerを評価する理由を下記から選択してください。

弊社の営業担当より詳細情報をご案内しますので、アルティウムジャパン までお問い合わせください。.
Copyright © 2019 Altium Limited

無償評価版を使用するには、下記のフォームに入力してください。

プライバシーポリシーに同意の上、[ダウンロード]をクリックしてください。ご登録いただきましたメールアドレスにメールマガジンが送信されます。メール配信の停止は、メール内の​通知設定​​でお手続きいただけます。

Great News!

Valid students can get their very own 6-month Altium Designer Student License for FREE! Just fill out the form below to request your Student License today.

プライバシーポリシーに同意の上、[ダウンロード]をクリックしてください。ご登録いただきましたメールアドレスにメールマガジンが送信されます。メール配信の停止は、メール内の​通知設定​​でお手続きいただけます。

その場合、Altium Designerビューワーの無償ライセンス(有効期間6か月)をダウンロードできます。

下記のフォームに入力してライセンスをリクエストしてください。

プライバシーポリシーに同意の上、[ダウンロード]をクリックしてください。ご登録いただきましたメールアドレスにメールマガジンが送信されます。メール配信の停止は、メール内の​通知設定​​でお手続きいただけます。

素晴らしいですね。アルティウムではモノづくりに最適なプログラムを提供しています。

Upverterは、コミュニティ主導型の無償プラットフォームで、お客様のような作り手の要求に合わせて設計されています。

試してみる場合、こちらをクリック してください。

弊社の営業担当より詳細情報をご案内しますので、アルティウムジャパン までお問い合わせください。.
Copyright © 2019 Altium Limited

その場合、Altium Designerビューワーの無償ライセンス(有効期間6か月)をダウンロードできます。

下記のフォームに入力してライセンスをリクエストしてください。

プライバシーポリシーに同意の上、[ダウンロード]をクリックしてください。ご登録いただきましたメールアドレスにメールマガジンが送信されます。メール配信の停止は、メール内の​通知設定​​でお手続きいただけます。