在上一节中说到:
Set<Transition> list = instance.getRootToken().getAvailableTransitions();
适合于从开始节点往下选择流向,但是如果当前节点不是开始节点时且流程中有fork节点时,该方法就不一定行,原因如下:
当流程走到fork节点时,rootToken是指向fork节点的,用之前的方法运行得到如下:
当前节点可以选择的流转方向有:
流向王五
流向李四
而此时流程真正已经流转到了李四审批和王五审批,显然他们的可选流转方向,不是上面两个。
所以改为如下使用方法:
//从中间的TaskNode节点出发如何得到下一步可选路径列表
@SuppressWarnings("unchecked")
@Test
public void searchNextTransitionsFromTaskNodeTest(){
JbpmContext context = null;
try {
//默认从classpath中查找名为hibernate.cfg.xml的配置文件
JbpmConfiguration configuration = JbpmConfiguration.getInstance();
//JbpmContext是对hibernate session的封装,提供了对JBPM相关对象的持久化功能
context = configuration.createJbpmContext();
//已知公文Id=7和用户ID
String actorId = "李四";
Long docId = 7l;
List<TaskInstance> list = context.getTaskMgmtSession().findTaskInstances(actorId);
for (TaskInstance taskInstance : list) {
Long documentId = (Long) taskInstance.getContextInstance().getVariable("documentId");
if (docId.equals(documentId)) {
List<Transition> nextTrans = taskInstance.getAvailableTransitions();
System.out.println("当前节点可以选择的流转方向有:");
for (Transition transition : nextTrans) {
System.out.println(transition.getName());
//taskInstance.end(transition.getName());
}
}
}
} catch (RuntimeException e) {
e.printStackTrace();
}finally{
context.close();
}
}