Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Multi-level BOM import

!
Info
iconfalse
title

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.)

...

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.

     
    Noteiconfalsetitle


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.

Info

...

...

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.

Parent assembly Parent Rev. P1Image Removed

Child assembly ChildImage Removed

Image RemovedParent assembly Parent Rev. P1Image AddedChild assemblyImage AddedImage Added


...

When importing multi-level BOM XML data, each assembly or sub-assembly is processed individually.

...

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

...

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:

  • conventional sub-assembly

conventional sub-assembly iconImage Removed
conventional sub-assembly iconImage Added
  • inline sub-assembly

inline sub-assembly iconImage Removed
inline sub-assembly iconImage Added

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.
inline assemblyImage Removed

...


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:

Assembly 1Image Removed



Assembly 1Image Added
  • Assembly 1 has four part numbers.

  • Part X is flagged as an inline assembly.

  • Only one of Part X is required to build Assembly 1.

  • The BOM for Assembly X has 3 part numbers.

Assembly XImage Removed
Assembly XImage Added
  • The "flattened" BOM for Assembly 1.

Assembly 1 flattenedImage Removed
Assembly 1 flattenedImage Added
  • If Assembly 1 requires three instances of Assembly X, the "flattened" BOM will reflect the additional materials required.

  • Notice how the quantities for the BOM line items for Assembly X are now tripled.

Assembly XImage Removed
Assembly XImage Added

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.

...

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.

...

Phantom assemblies are identified like inline assemblies in the BOM Viewer in the NPI client application, but use a different icon: Image Removed Phantom assembly iconImage Added

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).
phantom assemblyImage Removed

...


Multi-level BOM behavior

...

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.

Info

...

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.)

...

When a BOM is flattened, the information contained in the sub-assembly indentation is lost. Consider the following example:

Image Removed
Image Added
  • Assembly A has three part numbers: B, L, and M.

    • B is an inline assembly that has part numbers C, D, E, and K.

  • Sub-assembly E is a phantom assembly with three part numbers: F, G, and J.

    • G is an inline assembly that has part numbers H and I.

  • Part numbers I and L are conventional sub-assemblies—their BOM line items are not included in the flattened BOM.

Image Removed
Image Added

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.

Image Removed


Image Added

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.

  • sub-assembly

sub-assembly iconImage Removed
sub-assembly iconImage Added
  • inline assembly (published)

inline assembly (published) iconImage Removed
inline assembly (published) iconImage Added
  • inline assembly (unpublished)

inline assembly (unpublished) iconImage Removed
inline assembly (unpublished) iconImage Added
  • phantom assembly (published)

phantom assembly (published) iconImage Removed
phantom assembly (published) iconImage Added
  • phantom assembly (unpublished)

phantom assembly (unpublished) iconImage Removed
phantom assembly (unpublished) iconImage Added

Consider an example BOM:

Image Removed
Image Added


If all of the inline and phantom sub-assembly BOMs are published, the flattened BOM for the parent Assembly A will look like this:

Image Removed


Image Added


If the BOM of inline Sub-assembly B is unpublished, the flattened BOM for the parent Assembly A will look like this:

Image Removed

NoteiconfalsetitleNote:


Image Added

Note
Note that the icon for the inline Sub-assembly B is highlighted and its BOM line items are not displayed because the BOM is unpublished.


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.)

...