"I need to retrieve the parts from the BOM structure that do not have a CAD association. Once identified, I want to associate an empty CAD assembly with each of these parts. The CAD association for each part should be named based on the respective part."
Hi @AR_9920456
If you need to find parts that do not have CAD from one BOM use the compare function "Compare to CAD Structure" from part detail page action menu.
Another way is to create a QureyBuilder report in the Windchill Report Management
The QueryBuilder report can be used in Advanced search and there you can interact with the result objects.
here is a report how to search EPM Document without WTP but you can change the direction...
also you can use a one level report together
report technique
an Another way is to write own code to report what you need 😄
PetrH
any sample code to retrieve the parts which has not having CAD association
Hi @AR_9920456
If you want to write a code, then don't care about retrieving what does not have a association.
get the full BOM and go through the bom and check if the association exists.
code to get owner association is
QueryResult activeEMPDoc = PersistenceHelper.manager.navigate(sourceWTPart, EPMBuildRule.BUILD_SOURCE_ROLE, EPMBuildRule.class);
if the result is null or zero(empty) then the association does not exists
PetrH
Thank You,
I have a requirement that from the variants Structure we don't have cad association i need to iterate through each level and check for the CAD association if their no association, their is empty cad assembly we need to associate that cad to each part and saveas the cad name based on the respective part number
I don't want to create an EPM Document. An empty assembly named "empty.SLDASM" has already been created. I need to associate this assembly with variants that do not have CAD associations. The CAD name should be changed to the respective variant's number and associated with the respective variant.
Hi @AR_9920456
You have to describe what object you want to link in better way. Screenshot could be more helpful or any picture of your idea.
the API that helps to recognize if the WTPart has owner link to cad I've already provided.
PetrH
This is the code that i have return, I want to retrieve the parts which is not associate to the EPM Document.
public class SaveasUtilityFormProcessor extends DefaultObjectFormProcessor {
public FormResult doOperation(NmCommandBean nmCommandBean, List<ObjectBean> listOfObjects) throws WTException {
FormResult formResult = new FormResult();
String warningMsg = null;
Object object = nmCommandBean.getActionOid().getRefObject();
System.out.println("object: " + object);
if (object instanceof WTPart) {
WTPart part = (WTPart) object;
// Check if the parent part has a CAD association
QueryResult parentEMPDoc = PersistenceHelper.manager.navigate(part, EPMBuildRule.BUILD_SOURCE_ROLE, EPMBuildRule.class);
if (parentEMPDoc == null || !parentEMPDoc.hasMoreElements()) {
System.out.println("Parent part " + part.getName() + part.getNumber() + " does not have an associated EPM document.");
// You can add further logic here if needed
} else {
// Print the details of the associated parent EPM documents if needed
while (parentEMPDoc.hasMoreElements()) {
// You can add logic to print the details of associated parent EPM documents here
}
}
// Get the part usage links of the part
QueryResult partUsageLinks = WTPartHelper.service.getUsesWTPartMasters(part);
// Iterate through the part usage links
while (partUsageLinks.hasMoreElements()) {
WTPartUsageLink usageLink = (WTPartUsageLink) partUsageLinks.nextElement();
WTPartMaster childPart = (WTPartMaster) usageLink.getUses();
// Navigate from the child part to EPM documents using EPMBuildRule
QueryResult activeEMPDoc = PersistenceHelper.manager.navigate(childPart, EPMBuildRule.BUILD_SOURCE_ROLE, EPMBuildRule.class);
// Check if the result is null or empty
if (activeEMPDoc == null || !activeEMPDoc.hasMoreElements()) {
System.out.println("Child part " + childPart.getName() + childPart.getNumber() + " does not have an associated EPM document.");
// You can add further logic here if needed
} else {
// Print the details of the associated EPM documents if needed
while (activeEMPDoc.hasMoreElements()) {
// You can add logic to print the details of associated EPM documents here
}
}
}
}
return formResult;
}
}
Hi @AR_9920456
If you control the structure objects you need to find latest iteteration, you can not use master objects in the method
QueryResult activeEMPDoc = PersistenceHelper.manager.navigate(childPart, EPMBuildRule.BUILD_SOURCE_ROLE, EPMBuildRule.class);
You always has to use WTPart object ton Master one.
So variable has to be WTPart childPart....
You have to use Master to get the latest iteration.
PetrH
can you please show me how to do this.
I have done as same as you suggested now i am getting the parts which are not having the cad association. now i need to associate the one empty cad assembly to that part .
Hi @AR_9920456
Here is a method to create the link between an EPM and a WTP
//EPMDocument epmDocAssoc, WTPart partAssoc, int buildType (EPMBuildRule.ALL_BUILD_ROLES)
epmbuildrule = EPMBuildRule.newEPMBuildRule(epmDocAssoc, partAssoc, buildType);
epmbuildrule = (EPMBuildRule) PersistenceHelper.manager.save(epmbuildrule);
PetrH