十五、从中间的TaskNode节点出发如何得到下一步可选路径列表

在上一节中说到:

Set<Transition> list = instance.getRootToken().getAvailableTransitions();

适合于从开始节点往下选择流向,但是如果当前节点不是开始节点时且流程中有fork节点时,该方法就不一定行,原因如下:


十五、从中间的TaskNode节点出发如何得到下一步可选路径列表

当流程走到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();
        }
       
    }

你可能感兴趣的:(node)