直接貼代碼,不懂可說明:
/**
* 擷取下一個節點的資訊測試
*/
@Test
public void testNextTasks() {
//流程執行個體id
String processInstanceId = "5b945750-81db-11e9-a576-1a73f8e23adc";
//目前任務資訊
Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).singleResult();
//擷取流程釋出Id資訊
String definitionId = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult().getProcessDefinitionId();
//擷取bpm對象
BpmnModel bpmnModel = repositoryService.getBpmnModel(definitionId);
//傳節點定義key 擷取目前節點
FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey());
//輸出連線
List<SequenceFlow> outgoingFlows = flowNode.getOutgoingFlows();
//周遊傳回下一個節點資訊
for (SequenceFlow outgoingFlow : outgoingFlows) {
//類型自己判斷
FlowElement targetFlowElement = outgoingFlow.getTargetFlowElement();
//使用者任務
if (targetFlowElement instanceof UserTask) {
//。。。
}
else if (targetFlowElement instanceof ExclusiveGateway) {
setExclusiveGateway(targetFlowElement);
}
}
}
private void setExclusiveGateway(FlowElement targetFlow) {
//排他網關,擷取連線資訊
List<SequenceFlow> targetFlows = ((ExclusiveGateway) targetFlow).getOutgoingFlows();
for (SequenceFlow sequenceFlow : targetFlows) {
//目标節點資訊
FlowElement targetFlowElement = sequenceFlow.getTargetFlowElement();
if (targetFlowElement instanceof UserTask) {
// do something
} else if (targetFlowElement instanceof EndEvent) {
// do something
} else if (targetFlowElement instanceof ServiceTask) {
// do something
} else if (targetFlowElement instanceof ExclusiveGateway) {
//遞歸尋找
setExclusiveGateway(targetFlowElement);
} else if (targetFlowElement instanceof SubProcess) {
// do something
}
}
}
//擷取所有節點資訊:
https://blog.csdn.net/double_hll123/article/details/97111583