Activiti 获取当前节点的下一节点任务处理人

一、模型架构概览

      在流程资源文件中,每一个节点元素在activiti中都有对应的元素属性承载类,比如,UserTask任务节点,它的元素属性承载类为UserTask,相同,startEvent开始节点的元素承载类为StartEvent,在bpmn流程文件进行解析时,也是将xml文档中每个元素解析为对应的承载类,从而进行组装成一个BmpnModel模型,我们可以直接由activiti将bpmn xml文件解析为一个实例模型(下图所示),也可以完成通过自定义手动创建模型。
download.png

二、BpmnModel讲解

          根据上图所示BpmnModel是流程资源文件的承载类,通过BpmnModel可以获取流程资源文件里面的节点资源信息

三、BpmnModel代码演示

          
   //流程定义Id
   String processDefId="process:1:7";   
   //通过流程资源部署类获取BpmnModel
   BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefId);

三、根据BpmnModel获取流程节点信息演示

   //通过BpmnModel获取Process
  Process process = bpmnModel.getProcesses().get(0);
  //通过Process获取UserTask信息
  List UserTaskList = process.findFlowElementsOfType(UserTask.class);

四、获取UserTask的各类信息

   for(UserTask userTask:UserTaskList){
           String id  = userTask.getId();  //流程节点Id
           String assign = userTask.getAssignee(); //节点任务执行人
    }

五、综合代码演示

 public void getCurrentNextUserTaskAssign(){
        //流程定义Id
        String processDefId="process:1:7";   
        //当前流程节点Id,在任务表里面对应TASK_DEF_KEY_字段,可以根据taskId获取该字段数据
        String flowElemetId = "leader";  
        BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefId);
        Process process = bpmnModel.getProcesses().get(0);
        //获取所有普通任务节点
        List UserTaskList = process.findFlowElementsOfType(UserTask.class);
        for(UserTask userTask:UserTaskList){
           //获取当前任务节点Id
            String id  = userTask.getId();
            if(id.equals(flowElemetId)){
                //获取当前任务节点的所有出线信息
                List outgoingFlows = userTask.getOutgoingFlows();
                for(SequenceFlow sequenceFlow:outgoingFlows){
                    //获取出线连接的目标节点
                    FlowElement targetFlowElement = sequenceFlow.getTargetFlowElement();
                    //获取到了下一个节点的Id
                    String nextId = targetFlowElement.getId();
                    List UserTaskLists = process.findFlowElementsOfType(UserTask.class);
                    //再次遍历所有普通任务节点
                    for(UserTask userTasks:UserTaskLists) {
                        //获取任务节点Id
                        String flowId = userTasks.getId();
                        //如果遍历的某个任务节点Id等于下一个节点的Id
                        if (flowId.equals(nextId)) {
                           //获取下一个任务节点的执行人
                            String assignee = userTasks.getAssignee();
                            System.out.println("下一个节点的执行人:"+assignee);
                        }
                    }
                }
            }
        }
    }

你可能感兴趣的:(Activiti 获取当前节点的下一节点任务处理人)