一、模型架構(gòu)概覽
? ?? ?在流程資源文件中漠魏,每一個(gè)節(jié)點(diǎn)元素在activiti中都有對應(yīng)的元素屬性承載類嚼酝,比如,UserTask任務(wù)節(jié)點(diǎn)桑孩,它的元素屬性承載類為UserTask,相同拜鹤,startEvent開始節(jié)點(diǎn)的元素承載類為StartEvent,在bpmn流程文件進(jìn)行解析時(shí),也是將xml文檔中每個(gè)元素解析為對應(yīng)的承載類流椒,從而進(jìn)行組裝成一個(gè)BmpnModel模型敏簿,我們可以直接由activiti將bpmn xml文件解析為一個(gè)實(shí)例模型(下圖所示),也可以完成通過自定義手動(dòng)創(chuàng)建模型宣虾。
二惯裕、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ù)表里面對應(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);
}
}
}
}
}
}