根据流程活动获取工作项
public static Set<WorkItem> getWorkItems(WfAssignedActivity activity) throws WTException{
QueryResult qr = PersistenceHelper.manager.navigate(activity, ActivityAssignmentLink.ROLE_BOBJECT_ROLE, ActivityAssignmentLink.class);
Set<WorkItem> workitems = new HashSet<WorkItem>();
while(qr.hasMoreElements()){
WfAssignment assignment = (WfAssignment)qr.nextElement();
QueryResult qr1 = PersistenceHelper.manager.navigate(assignment, WorkItemLink.ROLE_BOBJECT_ROLE, WorkItemLink.class);
workitems.addAll(qr1.getObjectVectorIfc().getVector());
}
return workitems;
}
完成工作流任务
public static void completeActivity(WfAssignedActivity activity) throws WTException{
Vector<Object> vector = new Vector<Object>();
vector.addElement("");
WfEngineHelper.service.complete(activity, vector);
}
获取流程活动
public static WfAssignedActivity getActivityByName(WfProcess wfp,String activityName) throws WTException {
QueryResult result = wfp.getContainerNodes();
while (result.hasMoreElements()) {
Object obj = result.nextElement();
if (obj instanceof WfAssignedActivity && StringUtils.equals(activityName,((WfAssignedActivity) obj).getName())) {
return (WfAssignedActivity) obj;
}
}
return null;
}
获取活动对象
public static WfProcess getProcess(Object obj) {
if (obj == null) {
return null;
}
try {
Persistable persistable = null;
if (obj instanceof Persistable) {
persistable = (Persistable) obj;
} else if (obj instanceof ObjectIdentifier) {
persistable = PersistenceHelper.manager.refresh((ObjectIdentifier) obj);
} else if (obj instanceof ObjectReference) {
persistable = ((ObjectReference) obj).getObject();
}
if (persistable == null) {
return null;
}
if (persistable instanceof WorkItem) {
persistable = ((WorkItem) persistable).getSource().getObject();
}
if (persistable instanceof WfActivity) {
persistable = ((WfActivity) persistable).getParentProcess();
}
if (persistable instanceof WfConnector) {
persistable = ((WfConnector) persistable).getParentProcessRef()
.getObject();
}
if (persistable instanceof WfBlock) {
persistable = ((WfBlock) persistable).getParentProcess();
}
if (persistable instanceof WfProcess) {
return (WfProcess) persistable;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
重置流程活动
public static void restart(Object obj) {
WfProcess process = getProcess(obj);
try {
System.out.println(process.getName());
String oid = FACTORY.getReferenceString(ObjectReference.newObjectReference(process));
delectExamineRecord(oid);
addMethodToScheduleQueue("WfRestartQueue", RevocationProcessHelper.class.getName(), "resetWfProcess",
new Class[] { String.class }, new Object[] { oid });
} catch (Exception e) {
e.printStackTrace();
}
}
public static void resetWfProcess(String oid) {
if (oid == null || "".equals(oid)) {
return;
}
try {
WTReference wtref = FACTORY.getReference(oid);
WfProcess obj = (WfProcess) wtref.getObject();
if(obj == null ){
return;
}
Thread.sleep(10 * 1000);
obj = (WfProcess) PersistenceHelper.manager.refresh(obj);
ProcessData context = obj.getContext();
obj.changeState(WfTransition.RESET);
obj = (WfProcess) PersistenceHelper.manager.refresh(obj);
obj.start(context, true, obj.getContainerReference());
} catch (WTException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void addMethodToScheduleQueue(String queueName,
String classname, String method, Class argsClasses[],
Object argsObjects[]) throws WTException {
WtQueue queue = null;
Enumeration allqueues = QueueHelper.manager.queues(ProcessingQueue.class);
while (allqueues.hasMoreElements()) {
WtQueue aqueue = (WtQueue) allqueues.nextElement();
if (aqueue.getName().equals(queueName)) {
queue = aqueue;
break;
}
}
if (queue == null) {
queue = QueueHelper.manager.createQueue(queueName);
if (queue instanceof ProcessingQueue) {
QueueHelper.manager.enableQueue((ProcessingQueue)queue, true);
QueueHelper.manager.startQueue((ProcessingQueue)queue);
}
}
if (queue instanceof ProcessingQueue) {
ProcessingQueue pQueue = (ProcessingQueue) queue;
pQueue.addEntry(SessionHelper.manager.getAdministrator(), method, classname, argsClasses, argsObjects);
}
}
根据PBO获取关联的流程
WfEngineHelper.service.getAssociatedProcesses()
重新分配工作项给新的用户
ObjectIdentifier oid = ObjectIdentifier.newObjectIdentifier("wt.workflow.work.WorkItem:319469");
WorkItem wi = (WorkItem) PersistenceHelper.manager.refresh(oid);
System.out.println("WorkItem Name: " + wi.getIdentity());
System.out.println(" Workitem Owner (Before delegate): " + wi.getOwnership().getOwner().getIdentity());
WTUser user = wt.org.OrganizationServicesHelper.manager.getAuthenticatedUser("shirish");
WTPrincipal principal = (WTPrincipal) user;
wt.workflow.work.WorkflowHelper.service.delegate(wi, principal);
System.out.println(" Workitem Owner (After delegate): " + wi.getOwnership().getOwner().getIdentity());