Activiti 獲取當(dāng)前節(jié)點(diǎn)的下一節(jié)點(diǎn)任務(wù)處理人

一、模型架構(gòu)概覽

? ?? ?在流程資源文件中,每一個(gè)節(jié)點(diǎn)元素在activiti中都有對(duì)應(yīng)的元素屬性承載類,比如,UserTask任務(wù)節(jié)點(diǎn),它的元素屬性承載類為UserTask,相同,startEvent開始節(jié)點(diǎn)的元素承載類為StartEvent,在bpmn流程文件進(jìn)行解析時(shí),也是將xml文檔中每個(gè)元素解析為對(duì)應(yīng)的承載類,從而進(jìn)行組裝成一個(gè)BmpnModel模型,我們可以直接由activiti將bpmn xml文件解析為一個(gè)實(shí)例模型(下圖所示),也可以完成通過自定義手動(dòng)創(chuàng)建模型。
download.png

二、BpmnModel講解

?? ?? ?? ?根據(jù)上圖所示BpmnModel是流程資源文件的承載類,通過BpmnModel可以獲取流程資源文件里面的節(jié)點(diǎn)資源信息

三、BpmnModel代碼演示

?? ?? ?? ?
   //流程定義Id
   String processDefId="process:1:7";   
   //通過流程資源部署類獲取BpmnModel
   BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefId);

三、根據(jù)BpmnModel獲取流程節(jié)點(diǎn)信息演示

   //通過BpmnModel獲取Process
  Process process = bpmnModel.getProcesses().get(0);
  //通過Process獲取UserTask信息
  List<UserTask> UserTaskList = process.findFlowElementsOfType(UserTask.class);

四、獲取UserTask的各類信息

   for(UserTask userTask:UserTaskList){
           String id  = userTask.getId();  //流程節(jié)點(diǎn)Id
           String assign = userTask.getAssignee(); //節(jié)點(diǎn)任務(wù)執(zhí)行人
    }

五、綜合代碼演示

 public void getCurrentNextUserTaskAssign(){
        //流程定義Id
        String processDefId="process:1:7";   
        //當(dāng)前流程節(jié)點(diǎn)Id,在任務(wù)表里面對(duì)應(yīng)TASK_DEF_KEY_字段,可以根據(jù)taskId獲取該字段數(shù)據(jù)
        String flowElemetId = "leader";  
        BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefId);
        Process process = bpmnModel.getProcesses().get(0);
        //獲取所有普通任務(wù)節(jié)點(diǎn)
        List<UserTask> UserTaskList = process.findFlowElementsOfType(UserTask.class);
        for(UserTask userTask:UserTaskList){
           //獲取當(dāng)前任務(wù)節(jié)點(diǎn)Id
            String id  = userTask.getId();
            if(id.equals(flowElemetId)){
                //獲取當(dāng)前任務(wù)節(jié)點(diǎn)的所有出線信息
                List<SequenceFlow> outgoingFlows = userTask.getOutgoingFlows();
                for(SequenceFlow sequenceFlow:outgoingFlows){
                    //獲取出線連接的目標(biāo)節(jié)點(diǎn)
                    FlowElement targetFlowElement = sequenceFlow.getTargetFlowElement();
                    //獲取到了下一個(gè)節(jié)點(diǎn)的Id
                    String nextId = targetFlowElement.getId();
                    List<UserTask> UserTaskLists = process.findFlowElementsOfType(UserTask.class);
                    //再次遍歷所有普通任務(wù)節(jié)點(diǎn)
                    for(UserTask userTasks:UserTaskLists) {
                        //獲取任務(wù)節(jié)點(diǎn)Id
                        String flowId = userTasks.getId();
                        //如果遍歷的某個(gè)任務(wù)節(jié)點(diǎn)Id等于下一個(gè)節(jié)點(diǎn)的Id
                        if (flowId.equals(nextId)) {
                           //獲取下一個(gè)任務(wù)節(jié)點(diǎn)的執(zhí)行人
                            String assignee = userTasks.getAssignee();
                            System.out.println("下一個(gè)節(jié)點(diǎn)的執(zhí)行人:"+assignee);
                        }
                    }
                }
            }
        }
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容