Creating a New Downstream Branch
You can create a new downstream branch iteration for an upstream part by specifying the upstream part and the required attributes in the request body. You can create new downstream branch iterations for one or more upstream parts by specifying the upstream and downstream navigation criteria in the request body. If you do not specify the navigation criteria, the System Default filter is applied.
You can also create a new downstream branch iteration in the context of change (change task or change notice).
The child structure options can be specified as DoNotDuplicate, DuplicateWithPropagation, or DuplicateWithoutPropagation.
See the EDM of the domain available at the metadata URL Windchill/servlet/odata/BomTransformation/$metadata for details.
* 
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)
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.
Example: Creating a New Downstream Branch for an Upstream Part with No Child Parts
This example shows you how to create a new downstream branch by specifying an upstream parent part, TransformationOption as DoNotDuplicate, and inline upstream and downstream navigation criteria in the request body. In this example, the upstream part does not have child parts under it. Use the following POST URI with the request body:
URI
POST Windchill/servlet/odata/BomTransformation/NewDownstreamBranch
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:211566')",
"ReviseExistingDownstream": false,
"TransformationOption": "DoNotDuplicate",
"TransformationEntity": {
"View": "Manufacturing"
}
}
]
}
The request creates a new branch iteration and an equivalence link between the new downstream branch iteration and the specified upstream part. The request also returns information for the equivalence link.
Example: Creating a New Downstream Branch for an Upstream Part with a Child Part
This example shows you how to create a new downstream branch by specifying an upstream part with one child part with TransformationOption as DuplicateWithPropagation and using inline upstream and downstream navigation criteria. Use the following POST URI with the request body:
URI
POST Windchill/servlet/odata/BomTransformation/NewDownstreamBranch
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:213274')",
"ReviseExistingDownstream": false,
"TransformationOption": "DuplicateWithPropagation",
"TransformationEntity": {
"View": "Manufacturing"
}
}
]
}
The request creates two equivalence links, one between the specified upstream parent part and the new downstream branch iteration, and second between the upstream child part and its downstream equivalent child part. The request returns information for each of the equivalence links.
Example: Creating a New Downstream Branch for an Upstream Part That Has an Existing Downstream Branch
This example shows you how to create a new downstream branch by specifying an upstream part for which a downstream branch exists and using inline upstream and downstream navigation criteria. Use the following POST URI with the request body:
URI
POST Windchill/servlet/odata/BomTransformation/NewDownstreamBranch
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:210435')",
"ExistingDownstreamAssociations@odata.bind": [
"ExistingDownstreamAssociations('OR:wt.associativity.EquivalenceLink:210094')"
],
"ReviseExistingDownstream": true,
"TransformationOption": "DoNotDuplicate",
"TransformationEntity": {
"View": "Manufacturing",
"Context@odata.bind": "Containers('OR:wt.pdmlink.PDMLinkProduct:115454')",
"Folder@odata.bind": "Folders('OR:wt.folder.SubFolder:206832')"
}
}
]
}
The request creates an updated downstream branch with an equivalence link between the revised existing downstream part and the specified upstream part. The request returns information for the equivalence link.
Example: Creating New Downstream Branches for Multiple Upstream Parts and with One of the Upstream Parts Having an Existing Downstream Branch
This example shows you how to create a new downstream branch for each of the two upstream parts specified in the request body. This example also shows you how to create the new downstream branch for one of the upstream parts that has an existing downstream branch and using specific upstream and downstream navigation criteria. Use the following POST URI with the request body:
URI
POST Windchill/servlet/odata/BomTransformation/NewDownstreamBranch
Request Headers
Content-Type: application/json
CSRF_NONCE: <Use the value from Fetch NONCE example>
Request Body
{
"DownstreamNavigationCriteria": {
"ID": "OR:wt.filter.NavigationCriteria:192832"
},
"UpstreamNavigationCriteria": {
"ID": "OR:wt.filter.NavigationCriteria:192828"
},
"TransformationDefinitions": [
{
"SourcePart@odata.bind": "Parts('OR:wt.part.WTPart:215041')",
"TransformationOption": "DoNotDuplicate",
"TransformationEntity": {
"View": "Manufacturing",
"Context@odata.bind": "Containers('OR:wt.pdmlink.PDMLinkProduct:115454')",
"Folder@odata.bind": "Folders('OR:wt.folder.SubFolder:206832')"
}
},
{
"SourcePart@odata.bind": "Parts('OR:wt.part.WTPart:215041')",
"ExistingDownstreamAssociations@odata.bind": [
"ExistingDownstreamAssociations('OR:wt.associativity.EquivalenceLink:210091')"
],
"TransformationOption": "DoNotDuplicate",
"TransformationEntity": {
"View": "Manufacturing",
"Context@odata.bind": "Containers('OR:wt.pdmlink.PDMLinkProduct:115454')",
"Folder@odata.bind": "Folders('OR:wt.folder.SubFolder:206832')"
}
}
]
}
The request creates a new downstream branch iteration for the first upstream part with an equivalence link between the new downstream equivalent part and the specified upstream part. The request also returns information for the equivalence link.
The request creates an updated downstream branch for the second upstream part with an equivalence link between the existing downstream part and the specified upstream part. The request returns information for the equivalence link.
Example: Creating a New Downstream Branch for an Upstream Part in the Context of Change
This example shows you how to create a new downstream branch in the context of change by specifying an upstream parent part, TransformationOption as DoNotDuplicate, upstream navigation criteria ID, and downstream navigation criteria ID in the request body. In this example, the upstream part does not have child parts under it. Use the following POST URI with the request body:
URI
POST Windchill/servlet/odata/BomTransformation/NewDownstreamBranch
Request Headers
Content-Type: application/json
CSRF_NONCE: <Use the value from Fetch NONCE example>
Request Body
{
"DownstreamNavigationCriteria": {
"ID": "OR:wt.filter.NavigationCriteria:191222"
},
"UpstreamNavigationCriteria": {
"ID": "OR:wt.filter.NavigationCriteria:191218"
},
"TransformationDefinitions": [
{
"SourcePart@odata.bind": "Parts('OR:wt.part.WTPart:230357')",
"ReviseExistingDownstream": false,
"TransformationOption": "DoNotDuplicate",
"TransformationEntity": {
"View": "Manufacturing"
}
}
],
"ChangeOid": "VR:wt.change2.WTChangeOrder2:230128"
}
The request creates a new branch iteration and an equivalence link between the new downstream branch iteration and the specified upstream part in context of change. The request adds the new downstream branch iteration in the Resulting Objects table of the change object specified in the ChangeOid attribute.
To see more details, expand the new downstream branch iteration, equivalent links, and equivalent usage links.