Creating a New Downstream Part
You can create a new downstream part by specifying the upstream part and inline or specific upstream and downstream navigation criteria along with the required attributes in the request body.
You can also create a new downstream part in the context of change (change task or change notice).
The child structure options can be specified as DoNotDuplicate, DuplicateWithPropagation, or DuplicateWithoutPropagation.
Refer to the EDM of the domain available at the metadata URL Windchill/servlet/odata/BomTransformation/$metadata for more details.
 
If you change the value of any of the View, BOMType, or AlternateBOM attributes, the request recalculates and changes the list of existing downstream parts and their equivalence links for the upstream parts.
When you do not specify the equivalent link for a part that has no existing downstream equivalent object, the new downstream part is created but not revised, even though the ReviseExistingDownstream flag is specified as true.
You can use the following API to fetch additional information of a part in the BOM structure required for this request:
POST /Windchill/servlet/odata/BomTransformation/XBOMParts('<RootPartOID>')/PTC.BomTransformation.GetManufacturingBOM?$expand=Components($levels=max)
Example: Creating a New Downstream Part for an Upstream Assembly Using “DoNotDuplicate”
This example shows you how to create a new downstream part for a parent part of an upstream assembly using the DoNotDuplicate transformation and inline upstream and downstream navigation criteria. Use the following POST URI with the request body:
URI
POST Windchill/servlet/odata/BomTransformation/NewDownstreamPart
Request Headers
Content-Type: application/json
CSRF_NONCE: <Use the value from Fetch NONCE example>
Request Body
{
"DownstreamNavigationCriteria": {
"ApplicableType": "PTC.ProdMgmt.Part",
"ApplicationName": null,
"ApplyToTopLevelObject": false,
"Centricity": false,
"ConfigSpecs": [
{
"@odata.type": "#PTC.NavCriteria.WTPartStandardConfigSpec",
"WorkingIncluded": false,
"View": "Manufacturing",
"LifeCycleState": null
}
],
"Filters": [],
"HideUnresolvedDependents": true,
"SharedToAll": false,
"UseDefaultForUnresolved": false
},
"UpstreamNavigationCriteria": {
"ApplicableType": "PTC.ProdMgmt.Part",
"ApplicationName": null,
"ApplyToTopLevelObject": false,
"Centricity": false,
"ConfigSpecs": [
{
"@odata.type": "#PTC.NavCriteria.WTPartStandardConfigSpec",
"WorkingIncluded": false,
"View": "Design",
"LifeCycleState": null
}
],
"Filters": [],
"HideUnresolvedDependents": true,
"SharedToAll": false,
"UseDefaultForUnresolved": false
},
"TransformationDefinitions": [
{
"SourcePart@odata.bind": "Parts('VR:wt.part.WTPart:219247')",
"ReviseExistingDownstream": false,
"TransformationOption": "DoNotDuplicate",
"TransformationEntity": {
"Name": "NewPart",
"View": "Manufacturing",
"Context@odata.bind": "Containers('OR:wt.pdmlink.PDMLinkProduct:199654')",
"Folder@odata.bind": "Folders('OR:wt.folder.SubFolder:219131')"
}
}
]
}
The request creates a new downstream part with no children. The request creates an equivalence link between the new downstream part and the specified upstream part and returns information for the equivalence link.
Example: Creating a New Downstream Part for an Upstream Assembly Using “DuplicateWithPropagation”
This example shows you how to create a new downstream part for a parent part of an upstream assembly that has two child parts by using the DuplicateWithPropagation transformation and inline upstream and downstream navigation criteria. Use the following POST URI with the request body:
URI
POST Windchill/servlet/odata/BomTransformation/NewDownstreamPart
Request Headers
Content-Type: application/json
CSRF_NONCE: <Use the value from Fetch NONCE example>
Request Body
{
"DownstreamNavigationCriteria": {
"ApplicableType": "PTC.ProdMgmt.Part",
"ApplicationName": null,
"ApplyToTopLevelObject": false,
"Centricity": false,
"ConfigSpecs": [
{
"@odata.type": "#PTC.NavCriteria.WTPartStandardConfigSpec",
"WorkingIncluded": false,
"View": "Manufacturing",
"LifeCycleState": null
}
],
"Filters": [],
"HideUnresolvedDependents": true,
"SharedToAll": false,
"UseDefaultForUnresolved": false
},
"UpstreamNavigationCriteria": {
"ApplicableType": "PTC.ProdMgmt.Part",
"ApplicationName": null,
"ApplyToTopLevelObject": false,
"Centricity": false,
"ConfigSpecs": [
{
"@odata.type": "#PTC.NavCriteria.WTPartStandardConfigSpec",
"WorkingIncluded": false,
"View": "Design",
"LifeCycleState": null
}
],
"Filters": [],
"HideUnresolvedDependents": true,
"SharedToAll": false,
"UseDefaultForUnresolved": false
},
"TransformationDefinitions": [
{
"SourcePart@odata.bind": "Parts('VR:wt.part.WTPart:219247')",
"ReviseExistingDownstream": false,
"TransformationOption": "DuplicateWithPropagation",
"TransformationEntity": {
"Name": "NewPart",
"View": "Manufacturing",
"Context@odata.bind": "Containers('OR:wt.pdmlink.PDMLinkProduct:199654')",
"Folder@odata.bind": "Folders('OR:wt.folder.SubFolder:219131')"
}
}
]
}
The request creates a new downstream part with two child parts. The request creates equivalence links between each part in the downstream assembly and the corresponding part in the upstream assembly.
Example: Creating a New Downstream Part for an Upstream Assembly with a Child Part That Has an Existing Downstream Equivalent Object
This example shows you how to create a new downstream part for an upstream assembly. In this example, the upstream assembly parent part has a child part that has an existing downstream equivalent object. This example also shows you how to revise the existing downstream equivalent object while creating the new downstream part.
 
To fetch the equivalence network information required for this request, use the following API:
POST /Windchill/servlet/odata/BomTransformation/GetEquivalenceNetworkForParts?$expand=EquivalenceNetwork($expand=EquivalenceLink)
To create a new downstream part for an upstream assembly, use the following POST URI with the request body:
URI
POST Windchill/servlet/odata/BomTransformation/NewDownstreamPart
Request Headers
Content-Type: application/json
CSRF_NONCE: <Use the value from Fetch NONCE example>
Request Body
{
"DownstreamNavigationCriteria": {
"ApplicableType": "PTC.ProdMgmt.Part",
"ApplicationName": null,
"ApplyToTopLevelObject": false,
"Centricity": false,
"ConfigSpecs": [
{
"@odata.type": "#PTC.NavCriteria.WTPartStandardConfigSpec",
"WorkingIncluded": false,
"View": "Manufacturing",
"LifeCycleState": null
}
],
"Filters": [],
"HideUnresolvedDependents": true,
"SharedToAll": false,
"UseDefaultForUnresolved": false
},
"UpstreamNavigationCriteria": {
"ApplicableType": "PTC.ProdMgmt.Part",
"ApplicationName": null,
"ApplyToTopLevelObject": false,
"Centricity": false,
"ConfigSpecs": [
{
"@odata.type": "#PTC.NavCriteria.WTPartStandardConfigSpec",
"WorkingIncluded": false,
"View": "Design",
"LifeCycleState": null
}
],
"Filters": [],
"HideUnresolvedDependents": true,
"SharedToAll": false,
"UseDefaultForUnresolved": false
},
"TransformationDefinitions": [
{
"SourcePart@odata.bind": "Parts('OR:wt.part.WTPart:210450')",
"ExistingDownstreamAssociations@odata.bind": [
"ExistingDownstreamAssociations('OR:wt.associativity.EquivalenceLink:210094')"
],
"TransformationEntity": {
"View": "Manufacturing",
"Context@odata.bind": "Containers('OR:wt.pdmlink.PDMLinkProduct:1025391')",
"Folder@odata.bind": "Folders('OR:wt.folder.SubFolder:4039741')"
},
"ReviseExistingDownstream": true
}
]
}
The request creates a new downstream part for the specified upstream part. The request reuses, revises and adds the existing downstream equivalent object as its child part. The request also creates an equivalence link between each part in the downstream assembly and the corresponding part in the upstream assembly.
Example: Creating a New Downstream Part for an Upstream Part in the Context of Change
This example shows you how to create a new downstream part in the context of change by specifying an upstream parent part, the DoNotDuplicate transformation, upstream navigation criteria ID, and downstream navigation criteria ID in the request body. Use the following POST URI with the request body:
URI
POST Windchill/servlet/odata/BomTransformation/NewDownstreamPart
Request Headers
Content-Type: application/json
CSRF_NONCE: <Use the value from Fetch NONCE example>
Request Body
{
"TransformationDefinitions": [
{
"SourcePart@odata.bind": "Parts('OR:wt.part.WTPart:232340')",
"ReviseExistingDownstream": false,
"ExistingDownstreamAssociations@odata.bind": [],
"TransformationOption": "DoNotDuplicate",
"TransformationEntity": {
"Name": "NewName",
"View": "Manufacturing",
"Context@odata.bind": "Containers('OR:wt.pdmlink.PDMLinkProduct:114768')",
"Folder@odata.bind": "Folders('OR:wt.folder.SubFolder:221121')"
}
}
],
"ChangeOid": "VR:wt.change2.WTChangeActivity2:232128",
"UpstreamNavigationCriteria": {
"ID": "OR:wt.filter.NavigationCriteria:191218"
},
"DownstreamNavigationCriteria": {
"ID": "OR:wt.filter.NavigationCriteria:191222"
}
}
The request creates an equivalence link between the new downstream part and the specified upstream part and returns information for the equivalence link. The request adds the new downstream part in the Resulting Objects table of the change object specified in the ChangeOid attribute.
To see more details, expand the new downstream part, equivalent links, and equivalent usage links.