Bill of Materials (BOM) management is critical in digital product design workflows. Autodesk Inventor offers extensive control over BOM data via model states, and a key mechanism in this architecture is BOM delegation. This allows BOM and iProperties to be shared or inherited between model states, especially when dealing with legacy designs or substitute models.
🔄 What is BOM Delegation?
BOM delegation is the process by which one model state inherits its BOM and iProperties from another model state. When delegation is active, the current model state does not own a BOM — instead, it defers to another model state (usually the Master or Primary).
BOM Delegation Is Triggered When:
- The model state is a migrated non-Master Level of Detail (LOD).
- The model state is a migrated substitute part LOD.
- The model state is a substitute part file.
How it works:
- A substitute model state uses the BOM from the source model state.
- A migrated non-Master LOD or migrated substitute uses the BOM from the Master (Primary) model state.
Tip:
You can edit the BOM of a migrated Master LOD.
You cannot edit the BOM of a migrated non-Master LOD directly.
To do so, copy the model state, make your edits, and optionally remove the original migrated state.
🛠️ BOM Delegation in the Inventor API
To interact with BOM delegation in code, the key API property is:
- BOMDelegate As ModelState
A read-only property that returns the model state that currently holds the BOM for this model state.
Delegation Behavior Summary
Model State Type | BOMDelegate Behavior |
---|---|
Legacy LOD | Delegates to Master (Primary) |
Legacy Substitute | Delegates to Master (Primary) |
New Substitute (from model state) | Delegates to source model state |
New Substitute (from part/LOD) | Delegates to Master (Primary) |
New Non-substitute | No delegation (owns its BOM) |
💼 Real-World Use Case: Legacy Substitute BOM Access Failure
A user attempted to read the BOMStructure
of an Inventor 2021 assembly with a substitute model state using Inventor 2022, but the call failed since the file was not saved (zero impact migration).
❌ Problematic Code
Sub BOMStructureTest()
Dim oAssemblyDoc As AssemblyDocument
Set oAssemblyDoc = ThisApplication.ActiveDocument
Dim oCompDef As AssemblyComponentDefinition
Set oCompDef = oAssemblyDoc.ComponentDefinition
Dim eBOMStructure As BOMStructureEnum
eBOMStructure = oCompDef.BOMStructure ' Fails due to delegation
End Sub
✅ Correct Code Using BOMDelegate
Sub BOMStructureTest()
Dim oAssemblyDoc As AssemblyDocument
Set oAssemblyDoc = ThisApplication.ActiveDocument
Dim oCompDef As AssemblyComponentDefinition
Set oCompDef = oAssemblyDoc.ComponentDefinition
Dim eBOMStructure As BOMStructureEnum
eBOMStructure = oCompDef.ModelStates. _
ActiveModelState.BOMDelegate.Document.ComponentDefinition.BOMStructure
End Sub
This ensures you're accessing the correct BOM source model state.
🧾 Managing BOMs in the Inventor UI
To view and manage BOMs, go to Assemble → Manage → Bill of Materials. The following views are available:
- Model Data – Browser-like view (non-exportable)
- Structured – BOM with subassemblies (exportable)
- Parts Only – Flat BOM view (exportable)
UI Capabilities:
- Sort and renumber BOM items
- Add iProperty/custom property columns
- Edit cells directly (updates iProperties)
- Drag and reorder/remove columns
- Search/replace, highlight, open components
Handling Suppressed Components
Suppressed components display with QTY = 0 in these model states:
- Migrated Master LOD
- Primary model state of new file
- New non-substitute model states
To hide them: Use BOM Settings → Hide Suppressed Components in BOM.
📋 BOM Management Tips
- Multi-cell editing supported (use Delete)
- Copy/paste rows to and from Excel
- Find/Replace functionality via right-click
- Instance Properties (editable in BOM UI, not same as iProperties)
🧠 Final Thoughts
BOM delegation is critical for working with substitute and legacy model states. Whether you’re using the Inventor UI or API, understanding how delegation affects BOM access ensures accuracy, consistency, and smoother workflows — especially when working with migrated or older assemblies.