Windchill Java 代码:根据流程模板查找具体流程节点
以下是一个简单的示例代码,可根据流程模板 ID 查找具体流程节点:
import wt.fc.PersistenceHelper;
import wt.fc.QueryResult;
import wt.method.RemoteMethodServer;
import wt.org.WTPrincipal;
import wt.org.WTPrincipalReference;
import wt.pom.Transaction;
import wt.query.QuerySpec;
import wt.query.SearchCondition;
import wt.workflow.engine.ProcessData;
import wt.workflow.engine.ProcessDefinition;
import wt.workflow.engine.ProcessTemplate;
import wt.workflow.engine.WfProcess;
public class FindProcessNode {
public static void main(String[] args) throws Exception {
RemoteMethodServer rms = RemoteMethodServer.getDefault();
rms.setUserName('admin');
rms.setPassword('admin');
String processTemplateId = 'myProcessTemplateId';
try (Transaction tx = new Transaction()) {
ProcessTemplate processTemplate = ProcessTemplate.newProcessTemplate();
processTemplate.setTemplateID(processTemplateId);
QuerySpec qs = new QuerySpec(ProcessDefinition.class);
qs.appendWhere(new SearchCondition(ProcessDefinition.class, ProcessDefinition.TEMPLATE_REFERENCE + '.' + ProcessTemplate.ID_NAME, SearchCondition.EQUAL, processTemplate.getPersistInfo()));
QueryResult qr = PersistenceHelper.manager.find(qs);
while (qr.hasMoreElements()) {
ProcessDefinition processDefinition = (ProcessDefinition) qr.nextElement();
WfProcess wfProcess = initializeProcess(processDefinition);
ProcessData processData = wfProcess.getContext();
// 根据 processData 中的信息查找具体流程节点
// ...
}
tx.commit();
}
}
private static WfProcess initializeProcess(ProcessDefinition processDefinition) throws Exception {
WTPrincipal principal = WTPrincipalReference.newWTPrincipalReference('admin').resolve();
WfProcess wfProcess = null;
try {
wfProcess = WfProcess.newWfProcess(principal);
wfProcess.setDefinition(processDefinition);
wfProcess.setName(processDefinition.getName());
wfProcess.getContext().setProcess(wfProcess);
wfProcess.getContext().setContainerReference(wfProcess);
wfProcess.setNumber(WfProcess.getNextNumber());
wfProcess.getContext().setNumber(wfProcess.getNumber());
wfProcess = (WfProcess) PersistenceHelper.manager.store(wfProcess);
return wfProcess;
} catch (Exception e) {
if (wfProcess != null) {
PersistenceHelper.manager.delete(wfProcess);
}
throw e;
}
}
}
在上面的代码中,首先需要设置用户名和密码以进行远程调用。然后,通过流程模板 ID 查找对应的流程定义,然后初始化一个流程实例,从中获得流程上下文 ProcessData,最后根据 ProcessData 中的信息查找具体流程节点。
需要注意的是,该示例代码仅适用于 Windchill 11 和 12,Windchill 10 中的 API 可能略有不同。
原文地址: https://www.cveoy.top/t/topic/mRcv 著作权归作者所有。请勿转载和采集!