Creating Alternate Assemblies in Downstream View
You can create one or more alternate assemblies in the downstream view from the existing assemblies in the upstream view or downstream view.
You can also create assemblies in the downstream in the context of change (change task or change notice).
To create alternate assemblies, the transformation types available for the child parts are NEW_BRANCH, NEW_PART, ADD_SAME, or NEW_PART_PER_ASSEMBLY.
See the EDM of the domain available at the metadata URL Windchill/servlet/odata/BomTransformation/$metadata for details.
* 
To create alternate assemblies in the downstream view, you must first check out the target (downstream) part under which you want to create the assemblies.
To create alternate assemblies in the downstream view, the quantity of specified upstream parent parts should be the same and at least one of those should have child parts under it.
When alternate assemblies are created in the downstream view, all child parts under the specified upstream parts are added in those assemblies.
If two or more child parts of same part number and view exist at the same level under a specified upstream part, the transformation type for those child parts must be the same.
You can use the following existing API to get information about the parts in the BOM transformer for providing it as an input to the Assemble action:
POST /Windchill/servlet/odata/BomTransformation/XBOMParts('<RootPartOID>')/PTC.BomTransformation.GetManufacturingBOM?$expand=Components($levels=max)
Example: Creating Multiple Alternate Assemblies in the Downstream View from Multiple Upstream Assemblies Using the ADD_SAME Transformation Type
This example shows you how to create two alternate assemblies in the downstream view from two upstream assemblies using the ADD_SAME transformation type. This example shows you how to create two alternate assemblies in the downstream view by specifying the parent parts of two existing upstream assemblies. In this example, each upstream assembly has two child parts. Use the following POST URI with the request body:
URI
POST Windchill/servlet/odata/BomTransformation/Assemble
Request Headers
Content-Type: application/json
CSRF_NONCE: <Use the value from Fetch NONCE example>
Request Body
{
"DiscrepancyContext": {
"SourceRoot@odata.bind": "Parts('OR:wt.part.WTPart:288351')",
"SourcePartSelection": [
{
"Part@odata.bind": "Parts('OR:wt.part.WTPart:288744')"
},
{
"Part@odata.bind": "Parts('OR:wt.part.WTPart:311119')"
}
],
"TargetRoot@odata.bind": "Parts('OR:wt.part.WTPart:288519')",
"TargetPart@odata.bind": "Parts('OR:wt.part.WTPart:288519')",
"UpstreamNavigationCriteria": {
"ApplicableType": "PTC.ProdMgmt.Part",
"ApplicationName": null,
"ApplyToTopLevelObject": false,
"Centricity": false,
"ConfigSpecs": [
{
"@odata.type": "#PTC.NavCriteria.WTPartStandardConfigSpec",
"WorkingIncluded": true,
"View": "Design",
"LifeCycleState": null,
"Variation1": null,
"Variation2": null
}
],
"Filters": [],
"HideUnresolvedDependents": false,
"SharedToAll": true,
"UseDefaultForUnresolved": false
},
"DownstreamNavigationCriteria": {
"ApplicableType": "PTC.ProdMgmt.Part",
"ApplicationName": null,
"ApplyToTopLevelObject": false,
"Centricity": false,
"ConfigSpecs": [
{
"@odata.type": "#PTC.NavCriteria.WTPartStandardConfigSpec",
"WorkingIncluded": true,
"View": "Manufacturing",
"LifeCycleState": null,
"Variation1": null,
"Variation2": null
}
],
"Filters": [],
"HideUnresolvedDependents": false,
"SharedToAll": true,
"UseDefaultForUnresolved": false
}
},
"NewObjectIdentifications": [
{
"UpstreamParentPart@odata.bind": "Parts('OR:wt.part.WTPart:288744')",
"ChildExistingEquivalenceAssociations@odata.bind": [],
"ChildPath": [
"cdfe8e1c-63b3-4c77-9382-7c8f81235615|8028e9b1-16c5-4280-92f1-93915698442d"
],
"TransformationType": "ADD_SAME"
},
{
"UpstreamParentPart@odata.bind": "Parts('OR:wt.part.WTPart:288744')",
"ChildExistingEquivalenceAssociations@odata.bind": [],
"ChildPath": [
"c9bfde7c-88d3-4793-a3ff-55220c86883a|b57ab507-a6a8-4437-bc47-0688b143d3b1"
],
"TransformationType": "ADD_SAME"
},
{
"UpstreamParentPart@odata.bind": "Parts('OR:wt.part.WTPart:311119')",
"ChildExistingEquivalenceAssociations@odata.bind": [],
"ChildPath": [
"420c3cb1-fec9-4dfb-9d09-1b236e7d9628|69b8d9de-e41d-4890-bade-881420c3a4db"
],
"TransformationType": "ADD_SAME"
},
{
"UpstreamParentPart@odata.bind": "Parts('OR:wt.part.WTPart:311119')",
"ChildExistingEquivalenceAssociations@odata.bind": [],
"ChildPath": [
"65f1ce6f-3d85-4caf-bb58-2d5733ccd463|f19f50e0-ab7d-4e00-b587-9cffa20ee724"
],
"TransformationType": "ADD_SAME"
}
],
"NewAlternates": [
{
"Name": "NewAlternatePart1",
"View": "Manufacturing"
},
{
"Name": "NewAlternatePart2",
"View": "Manufacturing"
}
]
}
The request creates two alternate assemblies in the downstream view, NewAlternatePart1 and NewAlternatePart2 with four child parts each. The request returns information about the equivalent link created between each alternate assembly parent part and specified upstream parent part. The request also returns the usage link between each alternate assembly parent part and the specified target (downstream) part. Because the transformation type is ADD_SAME, the four child parts added in each alternate assembly have the same part master.
Example: Creating Multiple Alternate Assemblies in the Downstream View from a Single Upstream Assembly Using the NEW_PART Transformation Type
This example shows you how to create two alternate assemblies in the downstream view from one existing upstream assembly using the NEW_PART transformation type. This example shows you how to create two alternate assemblies in the downstream view by specifying the parent part of one existing upstream assembly. In this example, the upstream assembly has two child parts. Use the following POST URI with the request body:
URI
POST Windchill/servlet/odata/BomTransformation/Assemble
Request Headers
Content-Type: application/json
CSRF_NONCE: <Use the value from Fetch NONCE example>
Request Body
{
"DiscrepancyContext": {
"SourceRoot@odata.bind": "Parts('OR:wt.part.WTPart:190712')",
"SourcePartSelection": [
{
"Part@odata.bind": "Parts('OR:wt.part.WTPart:190713')"
}
],
"TargetRoot@odata.bind": "Parts('OR:wt.part.WTPart:197925')",
"TargetPart@odata.bind": "Parts('OR:wt.part.WTPart:197925')",
"UpstreamNavigationCriteria": {
"ApplicableType": "PTC.ProdMgmt.Part",
"ApplicationName": null,
"ApplyToTopLevelObject": false,
"Centricity": false,
"ConfigSpecs": [
{
"@odata.type": "#PTC.NavCriteria.WTPartStandardConfigSpec",
"WorkingIncluded": true,
"View": "Design",
"LifeCycleState": null,
"Variation1": null,
"Variation2": null
}
],
"Filters": [],
"HideUnresolvedDependents": false,
"SharedToAll": true,
"UseDefaultForUnresolved": false
},
"DownstreamNavigationCriteria": {
"ApplicableType": "PTC.ProdMgmt.Part",
"ApplicationName": null,
"ApplyToTopLevelObject": false,
"Centricity": false,
"ConfigSpecs": [
{
"@odata.type": "#PTC.NavCriteria.WTPartStandardConfigSpec",
"WorkingIncluded": true,
"View": "Manufacturing",
"LifeCycleState": null,
"Variation1": null,
"Variation2": null
}
],
"Filters": [],
"HideUnresolvedDependents": false,
"SharedToAll": true,
"UseDefaultForUnresolved": false
}
},
"NewObjectIdentifications": [
{
"UpstreamParentPart@odata.bind": "Parts('OR:wt.part.WTPart:190713')",
"ChildPath": [
"ecc191eb-af2f-43e1-987b-9f3d4dca0a53|4585c514-f574-4ca8-a9df-c8cc2253f7ce"
],
"TransformationType": "NEW_PART",
"ChildExistingEquivalenceAssociations@odata.bind": [
]
},
{
"UpstreamParentPart@odata.bind": "Parts('OR:wt.part.WTPart:190713')",
"ChildPath": [
"ecc191eb-af2f-43e1-987b-9f3d4dca0a53|3c2395d6-f39d-48ee-9b37-1d61cd514956"
],
"TransformationType": "NEW_PART",
"ChildExistingEquivalenceAssociations@odata.bind": []
}
],
"NewAlternates": [
{
"Name": "NewAlternatePart1",
"View": "Manufacturing"
},
{
"Name": "NewAlternatePart2",
"View": "Manufacturing"
}

]
}
The request creates two alternate assemblies in the downstream view, NewAlternatePart1 and NewAlternatePart2 with two child parts each. The request returns information about the equivalent link created between each alternate assembly parent part and the specified upstream parent part. The request also returns the usage link between each alternate assembly parent part and the specified target (downstream) part. Because the transformation type is NEW_PART, the number and the view of each added child part changes.
Example: Creating Multiple Alternate Assemblies in the Downstream View from a Single Upstream Assembly Using the NEW_PART_PER_ASSEMBLY Transformation Type
This example shows you how to create two alternate assemblies in the downstream view from one existing upstream assembly using the NEW_PART_PER_ASSEMBLY transformation type. This example shows you how to create two alternate assemblies in the downstream view by specifying the parent part of one existing upstream assembly. In this example, the upstream assembly has two child parts. Use the following POST URI with the request body:
URI
POST Windchill/servlet/odata/BomTransformation/Assemble
Request Headers
Content-Type: application/json
CSRF_NONCE: <Use the value from Fetch NONCE example>
Request Body
{
"DiscrepancyContext": {
"SourceRoot@odata.bind": "Parts('OR:wt.part.WTPart:190712')",
"SourcePartSelection": [
{
"Part@odata.bind": "Parts('OR:wt.part.WTPart:190714')"
}
],
"TargetRoot@odata.bind": "Parts('OR:wt.part.WTPart:197925')",
"TargetPart@odata.bind": "Parts('OR:wt.part.WTPart:197925')",
"UpstreamNavigationCriteria": {
"ApplicableType": "PTC.ProdMgmt.Part",
"ApplicationName": null,
"ApplyToTopLevelObject": false,
"Centricity": false,
"ConfigSpecs": [
{
"@odata.type": "#PTC.NavCriteria.WTPartStandardConfigSpec",
"WorkingIncluded": true,
"View": "Design",
"LifeCycleState": null,
"Variation1": null,
"Variation2": null
}
],
"Filters": [],
"HideUnresolvedDependents": false,
"SharedToAll": true,
"UseDefaultForUnresolved": false
},
"DownstreamNavigationCriteria": {
"ApplicableType": "PTC.ProdMgmt.Part",
"ApplicationName": null,
"ApplyToTopLevelObject": false,
"Centricity": false,
"ConfigSpecs": [
{
"@odata.type": "#PTC.NavCriteria.WTPartStandardConfigSpec",
"WorkingIncluded": true,
"View": "Manufacturing",
"LifeCycleState": null,
"Variation1": null,
"Variation2": null
}
],
"Filters": [],
"HideUnresolvedDependents": false,
"SharedToAll": true,
"UseDefaultForUnresolved": false
}
},
"NewObjectIdentifications": [
{
"UpstreamParentPart@odata.bind": "Parts('OR:wt.part.WTPart:190714')",
"ChildPath": [
"ecc191eb-af2f-43e1-987b-9f3d4dca0a53|4585c514-f574-4ca8-a9df-c8cc2253f7ce"
],
"TransformationType": "NEW_PART_PER_ASSEMBLYT",
"ChildExistingEquivalenceAssociations@odata.bind": [
]
},
{
"UpstreamParentPart@odata.bind": "Parts('OR:wt.part.WTPart:190714')",
"ChildPath": [
"ecc191eb-af2f-43e1-987b-9f3d4dca0a53|3c2395d6-f39d-48ee-9b37-1d61cd514956"
],
"TransformationType": "NEW_PART_PER_ASSEMBLY",
"ChildExistingEquivalenceAssociations@odata.bind": []
}
],
"NewAlternates": [
{
"Name": "NewAlternatePart1",
"View": "Manufacturing"
},
{
"Name": "NewAlternatePart2",
"View": "Manufacturing"
}

]
}
The request creates two alternate assemblies in the downstream view, NewAlternatePart1 and NewAlternatePart2 with two child parts each. The request returns information about the equivalent link created between each alternate assembly parent part and the specified upstream parent part. The request also returns the usage link between each alternate assembly parent part and the specified target (downstream) part. Because the transformation type is NEW_PART_PER_ASSEMBLY, a new part is created in the downstream view for each alternate assembly. The child parts are added to the corresponding new alternate assembly parent part.
Similarly, you can create multiple alternate assemblies in the downstream view from existing upstream assemblies using the NEW_BRANCH transformation type. In this transformation type, the part number of each child part added in each alternate assembly in the downstream view remains the same; however, the view changes.
Example: Creating an Alternate Assembly in the Downstream View from an Upstream Assembly That Has Two Same Child Parts and One Different Child Part
This example shows you how to create an alternate assembly in the downstream view from an upstream assembly with three child parts. This example shows you how to create two alternate assemblies in the downstream view by specifying the parent part of an existing upstream assembly. In this example, two of the three child parts in the specified upstream assembly have same part number and view and also have existing downstream equivalent objects. The third child part has a different part number and view. Use the following POST URI with the request body:
URI
POST Windchill/servlet/odata/BomTransformation/Assemble
Request Headers
Content-Type: application/json
CSRF_NONCE: <Use the value from Fetch NONCE example>
Request Body
{
"DiscrepancyContext": {
"SourceRoot@odata.bind": "Parts('OR:wt.part.WTPart:190712')",
"SourcePartSelection": [
{
"Part@odata.bind": "Parts('OR:wt.part.WTPart:190955')"
}
],
"TargetRoot@odata.bind": "Parts('OR:wt.part.WTPart:197925')",
"TargetPart@odata.bind": "Parts('OR:wt.part.WTPart:197925')",
"UpstreamNavigationCriteria": {
"ApplicableType": "PTC.ProdMgmt.Part",
"ApplicationName": null,
"ApplyToTopLevelObject": false,
"Centricity": false,
"ConfigSpecs": [
{
"@odata.type": "#PTC.NavCriteria.WTPartStandardConfigSpec",
"WorkingIncluded": true,
"View": "Design",
"LifeCycleState": null,
"Variation1": null,
"Variation2": null
}
],
"Filters": [],
"HideUnresolvedDependents": false,
"SharedToAll": true,
"UseDefaultForUnresolved": false
},
"DownstreamNavigationCriteria": {
"ApplicableType": "PTC.ProdMgmt.Part",
"ApplicationName": null,
"ApplyToTopLevelObject": false,
"Centricity": false,
"ConfigSpecs": [
{
"@odata.type": "#PTC.NavCriteria.WTPartStandardConfigSpec",
"WorkingIncluded": true,
"View": "Manufacturing",
"LifeCycleState": null,
"Variation1": null,
"Variation2": null
}
],
"Filters": [],
"HideUnresolvedDependents": false,
"SharedToAll": true,
"UseDefaultForUnresolved": false
}
},
"NewObjectIdentifications": [
{
"UpstreamParentPart@odata.bind": "Parts('OR:wt.part.WTPart:190955')",
"ChildPath": [
"ecc191eb-af2f-43e1-987b-9f3d4dca0a53|4585c514-f574-4ca8-a9df-c8cc2253f7ce",
"ecc191eb-af2f-43e1-987b-9f3d4dca0a53|da7e89ea-6a02-493d-81c2-93bc147be9bb"
],
"TransformationType": "ADD_SAME",
"ChildExistingEquivalenceAssociations@odata.bind": [
"ExistingDownstreamAssociations('OR:wt.associativity.EquivalenceLink:190828')",
"ExistingDownstreamAssociations('OR:wt.associativity.EquivalenceLink:192138')"
]
},
{
"UpstreamParentPart@odata.bind": "Parts('OR:wt.part.WTPart:190955')",
"ChildPath": [
"ecc191eb-af2f-43e1-987b-9f3d4dca0a53|3c2395d6-f39d-48ee-9b37-1d61cd514956"
],
"TransformationType": "NEW_PART",
"ChildExistingEquivalenceAssociations@odata.bind": []
}
],
"NewAlternates": [
{
"Name": "NewAlternatePart1",
"View": "Manufacturing"
}
]
}
The request creates a new alternate assembly, NewAlternatePart1 in the downstream with three child parts. The request returns information of the equivalent link between the alternate assembly parent part and the specified upstream parent part. It returns the usage link between the alternate assembly parent part and the specified target (downstream) part. The two child parts with the transformation type ADD_SAME have existing downstream equivalent objects that are reused and added as is in the new alternate assembly.
The third child part with the transformation type NEW_PART is added as a new part in the alternate assembly.
Example: Creating Multiple Alternate Assemblies in the Downstream View in the Context of Change
This example shows you how to create two alternate assemblies in the downstream view from two upstream assemblies in the context of change using the NEW_PART transformation type. Use the following POST URI with the request body:
URI
POST Windchill/servlet/odata/BomTransformation/Assemble
Request Headers
Content-Type: application/json
CSRF_NONCE: <Use the value from Fetch NONCE example>
Request Body
{
"DiscrepancyContext": {
"SourceRoot@odata.bind": "Parts('OR:wt.part.WTPart:435116')",
"SourcePartSelection": [
{
"Part@odata.bind": "Parts('OR:wt.part.WTPart:435283')"
},
{
"Part@odata.bind": "Parts('OR:wt.part.WTPart:435222')"
}
],
"TargetRoot@odata.bind": "Parts('OR:wt.part.WTPart:435097')",
"TargetPart@odata.bind": "Parts('OR:wt.part.WTPart:435097')",
"UpstreamNavigationCriteria": {
"ApplicableType": "PTC.ProdMgmt.Part",
"ApplicationName": null,
"ApplyToTopLevelObject": false,
"Centricity": false,
"ConfigSpecs": [
{
"@odata.type": "#PTC.NavCriteria.WTPartStandardConfigSpec",
"WorkingIncluded": true,
"View": "Design",
"LifeCycleState": null,
"Variation1": null,
"Variation2": null
}
],
"Filters": [],
"HideUnresolvedDependents": false,
"SharedToAll": true,
"UseDefaultForUnresolved": false
},
"DownstreamNavigationCriteria": {
"ApplicableType": "PTC.ProdMgmt.Part",
"ApplicationName": null,
"ApplyToTopLevelObject": false,
"Centricity": false,
"ConfigSpecs": [
{
"@odata.type": "#PTC.NavCriteria.WTPartStandardConfigSpec",
"WorkingIncluded": true,
"View": "Manufacturing",
"LifeCycleState": null,
"Variation1": null,
"Variation2": null
}
],
"Filters": [],
"HideUnresolvedDependents": false,
"SharedToAll": true,
"UseDefaultForUnresolved": false
}
},
"NewObjectIdentifications": [
{
"UpstreamParentPart@odata.bind": "Parts('OR:wt.part.WTPart:435283')",
"ChildExistingEquivalenceAssociations@odata.bind": [],
"ChildPath": [
"a17ef71a-3505-4343-8083-768c43a33a16|d751198f-6c8c-4ef1-a0b5-6fac80ff947f"
],
"TransformationType": "NEW_PART"
},
{
"UpstreamParentPart@odata.bind": "Parts('OR:wt.part.WTPart:435222')",
"ChildExistingEquivalenceAssociations@odata.bind": [],
"ChildPath": [
"7f399932-7035-472b-b294-d10516174c47|d1aadd7b-c514-4aee-b969-4b69750a8907"
],
"TransformationType": "NEW_PART"
}
],
"NewAlternates": [
{
"Name": "NewAlternatePart1",
"View": "Manufacturing"
},
{
"Name": "NewAlternatePart2",
"View": "Manufacturing"
}
],
"ChangeOid": "VR:wt.change2.WTChangeActivity2:435959"
}
The request creates two alternate assemblies in the downstream, NewAlternatePart1 and NewAlternatePart2. The request adds the alternate assembly parent parts to the Resulting Objects table of the change object specified in the ChangeOid attribute.
The following URI with expand returns all the information for each upstream parent part and the downstream equivalent parent part for each alternate assembly. Additionally, the request returns information for the equivalent link and usage link for each newly created alternate assembly.
URI with Expand
POST Windchill/servlet/odata/BomTransformation/Assemble?$expand=UpstreamPart,DownstreamPart,UsageLink,EquivalenceLink