Skip to main content
14-Alexandrite
February 29, 2024
Question

when specific document created, we want to automatically create another document and attach as child

  • February 29, 2024
  • 1 reply
  • 958 views

when specific document created, we want to automatically create another document and attach as child

In the given code the child document which created automatically its failed to add as a child, and i tried with without linkage. The document is created automatically but after i tried to link it was showing error

 

@Override

protected synchronized void performStartupProcess() throws ManagerException {

super.performStartupProcess();

System.out.println("Registering CreateDocumentListener listeners...");

final ManagerService managerService = this.getManagerService();

 

managerService.addEventListener(new ServiceEventListenerAdapter(CreateDocumentListenerManager.class.getName()) {

public void notifyVetoableEvent(Object event) throws Exception {

System.out.println("DocumentDownloadListener notifyVetoableEvent POST_STORE ");

CreateDocumentListenerManager.addChildDocument((KeyedEvent) event);

};

}, PersistenceManagerEvent.generateEventKey(PersistenceManagerEvent.POST_STORE));

 

}

 

protected static void addChildDocument(KeyedEvent event) throws WTException, PropertyVetoException, RemoteException {

Object eventTarget = event.getEventTarget();

if (eventTarget instanceof WTDocument) {

WTDocument doc = (WTDocument) eventTarget;

 

// Check if the created document is of type com.windchill.WFActivityA

TypeIdentifier type = ClientTypedUtility.getTypeIdentifier(doc);

if (type.getTypeInternalName().equals("com.windchill.WFActivityA")) {

// Get the name and number of the parent document

WTDocument doc1 = (WTDocument) doc;

 

// wt.vc.wip.WorkInProgressHelper.service.checkin((wt.vc.wip.Workable) doc1, "Check in comment");

 

WTDocumentUsageLink linknew = new WTDocumentUsageLink();

 

 

// Find the TypeIdentifier for com.windchill.WFActivityB

TypeDefinitionReference childTypeDefRef = TypedUtilityServiceHelper.service.getTypeDefinitionReference("com.windchill.WFActivityB");

System.out.println("childTypeDefRef :"+childTypeDefRef);

 

 

// Create a new document of type com.windchill.WFActivityB

WTDocument childDocument = WTDocument.newWTDocument();

childDocument.setName("Child Document " + doc1.getNumber());

 

WTDocumentMaster masterChild = (WTDocumentMaster)childDocument.getMaster();

// Set the type definition reference for the child document

childDocument.setTypeDefinitionReference(childTypeDefRef);

System.out.println("childDocument :"+childDocument);

 

linknew.setRoleAObject(doc1);

linknew.setRoleBObject(childDocument);

 

WTDocumentUsageLink usageLink = WTDocumentHelper.service.createUsageLink(doc1, childDocument);

wt.fc.PersistenceHelper.manager.save(usageLink);

wt.vc.wip.WorkInProgressHelper.service.checkin((wt.vc.wip.Workable) doc1, "Check in comment");

System.out.println("Created successfully !!");

 

}

}

}

1 reply

HelesicPetr
22-Sapphire II
22-Sapphire II
February 29, 2024

Hi @AR_9920456 

What is the error you are talking about?

 

The point could be that the original Document is not yet stored and listener event is triggered too early. 

 

PetrH

14-Alexandrite
March 15, 2024

I am unable to do save as the EPM Document. while save as its giving error in MS log 

Error Message : "The value of "Owner Application" cannot be set to null, since it is a "required" attribute."

14-Alexandrite
March 15, 2024

Sorry,this is the code iam using.

 

In this line error is poping up [ copyInfoArray = EnterpriseHelper.service.newMultiObjectCopy(originals); ]

private
EPMDocument saveAsCADAssembly(EPMDocument emptyCADAssembly , String name, String number) {

try {

 

 

RevisionControlled[] originals = new RevisionControlled[1];

CopyObjectInfo[] copyInfoArray = null;

 

originals[0] = emptyCADAssembly;

System.out.println("originals: " + originals);

copyInfoArray = EnterpriseHelper.service.newMultiObjectCopy(originals);

EPMDocument copy = (EPMDocument) copyInfoArray[0].getCopy();

 

copy.setNumber(number +".SLDASM");

System.out.println("number set");

copy.setName(name+".SLDASM");

System.out.println("name set");

copy.setContainer(emptyCADAssembly.getContainer());

 

copyInfoArray = EnterpriseHelper.service.saveMultiObjectCopy(copyInfoArray);

} catch (Exception e) {

e.printStackTrace();

}