Skip to main content
1-Visitor
July 25, 2013
Solved

Load Multilevel BOM Via LoadFromFile

  • July 25, 2013
  • 4 replies
  • 3086 views

Hello all,

we use LoadFromFile utility to load parts , docs, n BOMs in Windchill.

i have a multilevel BOM.

as below..

PTC+Question.gif

I Found on Bom.XMl on PTC TAN: 129544.. Which gives a simple BOM.XML as below..

<?xml version="1.0" ?><!DOCTYPE NmLoader SYSTEM "standard70.dtd">

<NmLoader>

<csvCachePart handler="wt.part.LoadPart.cachePart" >

<csvpartNumber>asmA</csvpartNumber>

<csvpartVersion>C</csvpartVersion>

<csvpartIteration></csvpartIteration>

<csvpartView></csvpartView>

</csvCachePart>

<csvCachePart handler="wt.part.LoadPart.cachePart" >

<csvpartNumber>prtC</csvpartNumber>

<csvpartVersion></csvpartVersion>

<csvpartIteration></csvpartIteration>

<csvpartView></csvpartView>

</csvCachePart>

<csvCachePart handler="wt.part.LoadPart.cachePart" >

<csvpartNumber>prtD</csvpartNumber>

<csvpartVersion></csvpartVersion>

<csvpartIteration></csvpartIteration>

<csvpartView></csvpartView>

</csvCachePart>

<csvOccurrencedAssemblyAdd handler="wt.part.LoadPart.addPartToOccurrencedAssembly" >

<csvassemblyPartNumber>asmA</csvassemblyPartNumber>

<csvassemblyPartVersion>C</csvassemblyPartVersion>

<csvconstituentPartNumber>prtC</csvconstituentPartNumber>

<csvconstituentPartQty>1</csvconstituentPartQty>

<csvconstituentPartUnit>ea</csvconstituentPartUnit>

<csvlineNumber>10000</csvlineNumber>

<csvoccurrenceLocation></csvoccurrenceLocation>

<csvreferenceDesignator></csvreferenceDesignator>

<csvassemblyPartIteration></csvassemblyPartIteration>

<csvassemblyPartView></csvassemblyPartView>

</csvOccurrencedAssemblyAdd>

<csvOccurrencedAssemblyAdd handler="wt.part.LoadPart.addPartToOccurrencedAssembly" >

<csvassemblyPartNumber>asmA</csvassemblyPartNumber>

<csvassemblyPartVersion>C</csvassemblyPartVersion>

<csvconstituentPartNumber>prtD</csvconstituentPartNumber>

<csvconstituentPartQty>1</csvconstituentPartQty>

<csvconstituentPartUnit>ea</csvconstituentPartUnit>

<csvlineNumber>100</csvlineNumber>

<csvoccurrenceLocation></csvoccurrenceLocation>

<csvreferenceDesignator></csvreferenceDesignator>

<csvassemblyPartIteration></csvassemblyPartIteration>

<csvassemblyPartView></csvassemblyPartView>

</csvOccurrencedAssemblyAdd>

</NmLoader>

********************************************

This is for only 1 level Child part..

Please any one had done Multilevel BOM Loading Before...Please share the format of MultilevelBom.csv for loading in to Windchill.

Thanks,

Vivek

Best answer by PatrickMcEvoy

Make sure you use the right DTD for your release. Use standardX10.dtd for 9.0 and 9.1. Use standardX12.dtd for 10.0 and 10.1.

Make sure you load/create any products, folders, users, etc. before loading the parts.

There are multiple ways to create the parts and to create the usage links.

Then load the parts and then the usage links.

Here is a simple way (if you don't care about occurrences).

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE NmLoader SYSTEM "standardX20.dtd">

<NmLoader>

<!-- Parts -->

<csvPart handler="wt.part.LoadPart.createPart">

<csvuser/>

<csvpartName>YourTopPart</csvpartName>

<csvpartNumber>YOUR_TOP_PART</csvpartNumber>

<csvtype>separable</csvtype>

<csvsource>make</csvsource>

<csvfolder>/Default/YourFolder</csvfolder>

<csvlifecycle>Basic</csvlifecycle>

<csvview>Design</csvview>

<csvteamTemplate/>

<csvlifecyclestate>INWORK</csvlifecyclestate>

<csvtypedef/>

<csvversion>A</csvversion>

<csviteration>1</csviteration>

<csvparentContainerPath/>

<csvorganizationName/>

<csvorganizationID/>

</csvPart>

<csvPart handler="wt.part.LoadPart.createPart">

<csvuser/>

<csvpartName>YourMiddlePart</csvpartName>

<csvpartNumber>YOUR_MIDDLE_PART</csvpartNumber>

<csvtype>separable</csvtype>

<csvsource>make</csvsource>

<csvfolder>/Default/YourFolder</csvfolder>

<csvlifecycle>Basic</csvlifecycle>

<csvview>Design</csvview>

<csvteamTemplate/>

<csvlifecyclestate>INWORK</csvlifecyclestate>

<csvtypedef/>

<csvversion>A</csvversion>

<csviteration>1</csviteration>

<csvparentContainerPath/>

<csvorganizationName/>

<csvorganizationID/>

</csvPart>

<csvPart handler="wt.part.LoadPart.createPart">

<csvuser/>

<csvpartName>YourBottomPart</csvpartName>

<csvpartNumber>YOUR_BOTTOM_PART</csvpartNumber>

<csvtype>separable</csvtype>

<csvsource>make</csvsource>

<csvfolder>/Default/YourFolder</csvfolder>

<csvlifecycle>Basic</csvlifecycle>

<csvview>Design</csvview>

<csvteamTemplate/>

<csvlifecyclestate>INWORK</csvlifecyclestate>

<csvtypedef/>

<csvversion>A</csvversion>

<csviteration>1</csviteration>

<csvparentContainerPath/>

<csvorganizationName/>

<csvorganizationID/>

</csvPart>

<!-- Usage Links -->

<csvAssemblyAddLoad handler="wt.part.LoadPart.addPartToAssemblyLoad">

<csvassemblyPartNumber>YOUR_TOP_PART</csvassemblyPartNumber>

<csvconstituentPartNumber>YOUR_MIDDLE_PART</csvconstituentPartNumber>

<csvconstituentPartQty>1.0</csvconstituentPartQty>

<csvconstituentPartUnit>ea</csvconstituentPartUnit>

<csvcomponentId/>

<csvquantityOption/>

<csvreference/>

<csvassemblyPartVersion/>

<csvassemblyPartIteration/>

<csvassemblyPartView>Design</csvassemblyPartView>

</csvAssemblyAddLoad>

<csvAssemblyAddLoad handler="wt.part.LoadPart.addPartToAssemblyLoad">

<csvassemblyPartNumber>YOUR_MIDDLE_PART</csvassemblyPartNumber>

<csvconstituentPartNumber>YOUR_BOTTOM_PART</csvconstituentPartNumber>

<csvconstituentPartQty>1.0</csvconstituentPartQty>

<csvconstituentPartUnit>ea</csvconstituentPartUnit>

<csvcomponentId/>

<csvquantityOption/>

<csvreference/>

<csvassemblyPartVersion/>

<csvassemblyPartIteration/>

<csvassemblyPartView>Design</csvassemblyPartView>

</csvAssemblyAddLoad>

</NmLoader>

4 replies

1-Visitor
July 25, 2013

Make sure you use the right DTD for your release. Use standardX10.dtd for 9.0 and 9.1. Use standardX12.dtd for 10.0 and 10.1.

Make sure you load/create any products, folders, users, etc. before loading the parts.

There are multiple ways to create the parts and to create the usage links.

Then load the parts and then the usage links.

Here is a simple way (if you don't care about occurrences).

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE NmLoader SYSTEM "standardX20.dtd">

<NmLoader>

<!-- Parts -->

<csvPart handler="wt.part.LoadPart.createPart">

<csvuser/>

<csvpartName>YourTopPart</csvpartName>

<csvpartNumber>YOUR_TOP_PART</csvpartNumber>

<csvtype>separable</csvtype>

<csvsource>make</csvsource>

<csvfolder>/Default/YourFolder</csvfolder>

<csvlifecycle>Basic</csvlifecycle>

<csvview>Design</csvview>

<csvteamTemplate/>

<csvlifecyclestate>INWORK</csvlifecyclestate>

<csvtypedef/>

<csvversion>A</csvversion>

<csviteration>1</csviteration>

<csvparentContainerPath/>

<csvorganizationName/>

<csvorganizationID/>

</csvPart>

<csvPart handler="wt.part.LoadPart.createPart">

<csvuser/>

<csvpartName>YourMiddlePart</csvpartName>

<csvpartNumber>YOUR_MIDDLE_PART</csvpartNumber>

<csvtype>separable</csvtype>

<csvsource>make</csvsource>

<csvfolder>/Default/YourFolder</csvfolder>

<csvlifecycle>Basic</csvlifecycle>

<csvview>Design</csvview>

<csvteamTemplate/>

<csvlifecyclestate>INWORK</csvlifecyclestate>

<csvtypedef/>

<csvversion>A</csvversion>

<csviteration>1</csviteration>

<csvparentContainerPath/>

<csvorganizationName/>

<csvorganizationID/>

</csvPart>

<csvPart handler="wt.part.LoadPart.createPart">

<csvuser/>

<csvpartName>YourBottomPart</csvpartName>

<csvpartNumber>YOUR_BOTTOM_PART</csvpartNumber>

<csvtype>separable</csvtype>

<csvsource>make</csvsource>

<csvfolder>/Default/YourFolder</csvfolder>

<csvlifecycle>Basic</csvlifecycle>

<csvview>Design</csvview>

<csvteamTemplate/>

<csvlifecyclestate>INWORK</csvlifecyclestate>

<csvtypedef/>

<csvversion>A</csvversion>

<csviteration>1</csviteration>

<csvparentContainerPath/>

<csvorganizationName/>

<csvorganizationID/>

</csvPart>

<!-- Usage Links -->

<csvAssemblyAddLoad handler="wt.part.LoadPart.addPartToAssemblyLoad">

<csvassemblyPartNumber>YOUR_TOP_PART</csvassemblyPartNumber>

<csvconstituentPartNumber>YOUR_MIDDLE_PART</csvconstituentPartNumber>

<csvconstituentPartQty>1.0</csvconstituentPartQty>

<csvconstituentPartUnit>ea</csvconstituentPartUnit>

<csvcomponentId/>

<csvquantityOption/>

<csvreference/>

<csvassemblyPartVersion/>

<csvassemblyPartIteration/>

<csvassemblyPartView>Design</csvassemblyPartView>

</csvAssemblyAddLoad>

<csvAssemblyAddLoad handler="wt.part.LoadPart.addPartToAssemblyLoad">

<csvassemblyPartNumber>YOUR_MIDDLE_PART</csvassemblyPartNumber>

<csvconstituentPartNumber>YOUR_BOTTOM_PART</csvconstituentPartNumber>

<csvconstituentPartQty>1.0</csvconstituentPartQty>

<csvconstituentPartUnit>ea</csvconstituentPartUnit>

<csvcomponentId/>

<csvquantityOption/>

<csvreference/>

<csvassemblyPartVersion/>

<csvassemblyPartIteration/>

<csvassemblyPartView>Design</csvassemblyPartView>

</csvAssemblyAddLoad>

</NmLoader>

1-Visitor
July 26, 2013

Hi,

Patrick is RIght !!!