Multi-level BOM import
Important
The multi-level BOM import functionality described in this topic only applies to the xTend BOM Import integration service (FLX-XTD-BOM-11)—importing BOM files in the NPI client application remains unchanged. (See Import a BOM and other design files for details about importing BOM files using the NPI client application.)
Using the xTend BOM Import integration service (FLX-XTD-BOM-11), FactoryLogix can import multi-level Bills of Materials (BOMs) containing sub-assemblies. The BOM files you import can be up to 125 levels deep.
Sub-assemblies in a BOM file can be any of the following:
A sub-assembly
A purchased assembly (no BOM)
A part number that represents a kit of a sub-assembly to be built inline and a serial number to be collected against that part number.
Note
The part number and its serial number are part of the Trace genealogy in FactoryLogix (pullers assembly or inline assembly). The serial number must be unique but is not required to be an inventory item in FactoryLogix.
A phantom (a phantom has a part number that is simply a grouping of part numbers—no serial number is assigned to the phantom's part number).
Single- and multi-level BOM definitions
A single-level BOM defines the materials for a parent assembly and identifies each sub-assembly as just another part number.
There is no difference in the XML data between a component and a sub-assembly except that a sub-assembly can be identified using the <IsSubAssembly> tag. If the BOM for a sub-assembly needs to be imported, it is done using a separate XML file.A multi-level BOM defines the materials for a parent assembly and any child sub-assemblies.
The XML data delineates the parts for each sub-assembly from those of other sub-assemblies and the parent, effectively encapsulating multiple BOMs in one structure/file.
xTend BOM Import integration service (FLX-XTD-BOM-11)
You use the xTend BOM Import integration service (also known as FLX-XTD-BOM-11) to import an XML file containing one single-level BOM. The service also has extended functionality that allows you to import one multi-level BOM per XML file. The XML structure used by the BOM Import integration service for multi-level BOMs includes an <Assembly> tag within the <BOMItem> tag.
Important
The <Assembly> tag may appear zero or once per <BOMItem> tag in the XML file, but not more than once.
XML file structure for multi-level BOMs
Using the following structure, you can define an XML file with as many sub-assembly levels as you need. (Optionally, you can define each sub-assembly with its own BOM.)
When a <BOMItem> tag doesn't include an <Assembly> tag, the import processing uses the <IsSubAssembly> tag value to determine whether the BOM line item identifies a component or a sub-assembly.
When a <BOMItem> tag does include an <Assembly> tag, the import processing validates the <IsSubAssembly> tag, and if not present, present without a value, or present with a value of True, records the part number for the BOM line item as a child assembly (sub-assembly).
The XML file structure for multi-level BOM files looks like this:
<?xml version="1.0" encoding="utf-8"?>
<Assemblies>
<Assembly>
<Customer/>
<Name/>
<Revision/>
<Configurable/>
<BOMItems>
<BOMItem>
<AML>
...
</AML>
<AltIPN>
...
</AltIPN>
<Assembly>
...
</Assembly>
<ConfigurationOption/>
<ConsolidatedReferences/>
<CustomerPartNumber/>
<CustomFields>
...
</CustomFields>
<Description/>
<InternalPartNumber/>
<IsSubAssembly/>
<ItemNumber/>
<Manufacturer/>
<OptionCode/>
<Package/>
<PartLabel/>
<PartRevision/>
<PartType/>
<Polarized/>
<Quantity/>
<Reference/>
<ResourceTypes>
...
</ResourceTypes>
<RevisionMode/>
<Socket/>
<SubAssemblyType/>
<UnitOfIssue/>
</BOMItem>
</BOMItems>
</Assembly>
</Assemblies>
Multi-level BOM example
Consider an XML file with a parent assembly named Parent Rev P1.
The assembly Parent Rev P1 has three part numbers: Child, E, and F.
The Child part number is flagged as a sub-assembly and includes its own BOM that has three part numbers: A, B, and C.
The BOM for both assemblies is contained within the XML file.
The child assembly Child is imported and processed first, creates the Child part number, marks it as an assembly, then imports its BOM.
The import processing for the Child part number behaves as if the current implementation of this import received the XML for only the child assembly.
The enhanced processing imports the parent assembly Parent Rev P1, creates the Parent part number with a revision of P1, marks it as an assembly, then imports its BOM.
At the end of the import, two assemblies and BOMs are created (or updated) in the FactoryLogix data.
When importing multi-level BOM XML data, each assembly or sub-assembly is processed individually.
Note
The number of sub-assemblies and sub-assembly levels in an XML file is unlimited, but the XML file itself is limited to a single parent assembly (that is, a single <Assembly> tag within the <Assemblies> tag).
Inline and phantom assemblies
An operator working in the NPI client application can mark a part number as a sub-assembly in an unpublished BOM—this functionality remains unchanged. A BOM line item may only be flagged as an inline assembly or a phantom assembly by the xTend BOM Import integration service FLX-XTD-BOM-11.
Inline assemblies
An inline assembly is built as a distinct, yet integral part of the parent assembly build process. A conventional sub-assembly is built in its own build process (and in its own batch) outside of the parent assembly build process and batch. To achieve this, the BOM line items of the inline assembly are promoted to the parent assembly, effectively "flattening" the two BOMs. In addition, when placements are recorded for items on the parent assembly or the inline sub-assembly, the placements are recorded against the parent assembly.
Only BOM line items that identify a part number that is marked as an assembly in the FactoryLogix Part Library may be identified as an inline assembly.
<SubAssemblyType> tag
In the XML structure used by the xTend BOM Import integration service (FLX-XTD-BOM-11), a new <SubAssemblyType> tag can be introduced as a child of the <BOMItem> tag. This tag should only be utilized when the <IsSubAssembly> tag has a value of True.
Note the following when the <IsSubAssembly> tag has a value of True:
If the <SubAssemblyType> tag is not present, is present without a value, or is present with a value of Conventional:
The sub-assembly identifies a conventional sub-assembly where the sub-assembly is built in its own process, separate from that of the parent assembly.
If the <SubAssemblyType> tag is present with a value of Inline:
The sub-assembly identifies an inline sub-assembly where the sub-assembly is built in the same process as the parent assembly.
Processing uses a case-insensitive comparison when validating the value recorded in the <SubAssemblyType> tag.
The FactoryLogix processing flattens any BOM with any inline assemblies and the user interface displays the flattened BOM.
Inline assemblies are identified in a similar way to conventional sub-assemblies in the BOM Viewer in the NPI client application, however the icon for an inline sub-assembly is slightly different:
| |
|
Inline assembly example
In the following illustration, the inline assembly is highlighted in red. Note the grouping of the BOM line items that comprise the components within the inline assembly—they are not indented, but do have a "parent" indicator.
The part number 45-001 is the inline assembly that will be built using four part numbers: 45999-5, 4589632-89-88, 45999-96, and 45263. If line item 6 (the inline assembly) was configured as a conventional sub-assembly (such as line item 13), line items 7-10 would no longer appear on this BOM—their presence is due to the "flattening" of the inline assembly’s BOM.
The quantity displayed for each BOM line item within an inline assembly also factors the quantity of the inline assembly. For example, consider the BOM for Assembly 1:
| |
| |
| |
|
A BOM line item that is an inline assembly may have zero or more references assigned and may be used in part assignments, however when kitting material, these items—but not their BOM line items—will be omitted from the list of required part numbers.
In the Assembly Genealogy Viewer, an inline assembly is treated the same way as a conventional sub-assembly.
If you want to assign a serial number to an inline assembly after it has been built and you want that serial number to be captured as part of the parent assembly genealogy, you must use the Capture Sub-Assembly activity and ensure that the Requires Known Units option remains unselected.
Phantom assemblies
Like an inline assembly, a phantom assembly is a sub-assembly in a BOM. However, unlike an inline assembly, a phantom assembly is not intended to be assigned a unique serial number once it is built so that serial number can be captured and recorded in the assembly genealogy as a sub-assembly of its parent. The actions required to record the assembly genealogy do not form part of an assembly definition within FactoryLogix; instead they are defined in the process definition. As a result, the BOM Import integration service treats both the same way except that a sub-assembly BOM line item identifies the type of sub-assembly: conventional, inline, or phantom.
In the XML structure used by the BOM Import integration service, a new <SubAssemblyType> tag is a child of the <BOMItem> tag. This tag is only used when the <IsSubAssembly> tag has a value of True.
When the <IsSubAssembly> tag has a value of True:
If the <SubAssemblyType> tag is present with a value of Phantom, the sub-assembly identifies a phantom sub-assembly where the sub-assembly is built in the same process as the parent assembly.
The processing uses a case-insensitive comparison when validating the value recorded in the <SubAssemblyType> tag.
When importing a phantom assembly, the BOM line item is flagged as a phantom assembly. The import processing is the same as an inline assembly.
Phantom assemblies are identified like inline assemblies in the BOM Viewer in the NPI client application, but use a different icon:
In the following illustration, the phantom assembly is highlighted in red. Note the grouping of the BOM line items in the phantom assembly are not indented but can include a level or parent indicator. In this example, the phantom assembly consists of 4 part numbers: 45999-5, 4589632-89-88, 45999-96, and 45263).
Multi-level BOM behavior
A new service configuration setting allows imported BOMs to be released to Production automatically.
In the NPI and Production client applications, when an inline or phantom sub-assembly is encountered, all BOM line items belonging to that sub-assembly are included in a "flattened" list of BOM line items. Any BOM line item identified as part of an inline or phantom sub-assembly will have a revision mode set to Specific Revision.
Important
No Configure-to-Order (CTO) assembly may be used as an inline or phantom assembly.
When a parent assembly is released to Production, all inline and phantom sub-assemblies are locked and no longer editable.
The CAD-BOM data source in FactoryLogix Analytics includes a column for each new property added to the BOM Line Item table by this project.
The xTend BOM Export integration service (FLX-XTD-BOM-07) includes the <SubAssemblyType> tag to include reporting inline assembly and phantom assembly entries. The BOM Export integration service does not include the <Assembly> tag within the <BOMItem> tag, and will continue to provide only single-level BOM XML data.
BOM line items
To preserve the assembly information imported when using FLX-XTD-BOM-11, a new BOM Line Item property is added to a BOM line item definition. The property identifies a sub-assembly BOM line item as a conventional, inline, or phantom sub-assembly. By default, a sub-assembly is identified as conventional. (The BOM Line Item property value only has meaning for BOM line items that are identified as sub-assemblies.)
Flatten a multi-level BOM
When flattening a multi-level BOM, the resulting list of BOM line items includes the sub-assembly part number and the BOM line items that comprise that sub-assembly when the sub-assembly is either an inline or phantom assembly.
When a BOM is flattened, the information contained in the sub-assembly indentation is lost. Consider the following example:
| |
When flattened, the information that helps identify which assembly a BOM line item relates to is lost, making it impossible to determine (in this example) which assembly or sub-assembly part J belongs to. | |
A new column encodes this information in the flattened BOM—the new column value (shown in the illustration on the left) identifies the line item number of the BOM line item's immediate parent. |
View unpublished inline or phantom sub-assembly BOM line items
When reviewing the BOM for an assembly with an inline or phantom sub-assembly where the BOM is not published, the BOM line items aren't displayed in the flattened BOM. In this situation, the inline or phantom sub-assembly line item icon indicates that the sub-assembly’s BOM is not published and that its BOM line items are not visible in the parent assembly’s flattened BOM.
| |
| |
| |
| |
|
Consider an example BOM:
If all of the inline and phantom sub-assembly BOMs are published, the flattened BOM for the parent Assembly A will look like this: | |
If the BOM of inline Sub-assembly B is unpublished, the flattened BOM for the parent Assembly A will look like this: Note |
BOM lock down
In FactoryLogix a published BOM is locked down when the first process associated with the assembly revision is in Released to Production status. (Without modification, this behavior would allow the BOM of an inline or phantom sub-assembly to be modified after the parent assembly’s BOM was locked down. For a conventional sub-assembly, this is not an issue, but for an inline or phantom sub-assembly this is an issue because a change to an inline or phantom sub-assembly BOM would affect the flattened BOM of the parent assembly.)
When a BOM is released to production, the parent assembly BOM is locked down and the BOMs of every inline and phantom sub-assembly identified by the parent assembly’s BOM are also locked down.