天天看點

activiti&flowable擷取下一個節點資訊

直接貼代碼,不懂可說明:

/**
 * 擷取下一個節點的資訊測試
 */
@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