flowableプロセスノードの順序データの取得 4547 ワード java /*** * bpmnmodel * @param processInstanceId * @param taskList * @param flowElements * @param workflowRequestFormData * @param curFlowElement */ private void getTaskList(String processInstanceId, List taskList, Collection flowElements, Map workflowRequestFormData, FlowElement curFlowElement) { if (curFlowElement == null && taskList.size() == 0) { // UserTask FlowElement startElement = flowElements.stream().filter(flowElement -> flowElement instanceof StartEvent).collect(Collectors.toList()).get(0); List outgoingFlows = ((StartEvent) startElement).getOutgoingFlows(); String targetRef = outgoingFlows.get(0).getTargetRef(); // ID FlowElement FlowElement targetElementOfStartElement = getFlowElement(flowElements, targetRef); if (targetElementOfStartElement instanceof UserTask) { this.getTaskList(processInstanceId, taskList, flowElements, workflowRequestFormData, targetElementOfStartElement); } } else if (curFlowElement instanceof UserTask) { // Usertask taskList.add(curFlowElement); String targetRef = ""; List outgoingFlows = ((UserTask) curFlowElement).getOutgoingFlows(); if (outgoingFlows.size() == 1) { targetRef = outgoingFlows.get(0).getTargetRef(); } else { // sequenceFlow SequenceFlow sequenceFlow = getSequenceFlow(workflowRequestFormData, outgoingFlows); if (sequenceFlow != null) { targetRef = sequenceFlow.getTargetRef(); } } // ID FlowElement FlowElement targetElement = getFlowElement(flowElements, targetRef); this.getTaskList(processInstanceId, taskList, flowElements, workflowRequestFormData, targetElement); } else if (curFlowElement instanceof ExclusiveGateway) { String targetRef = ""; // , sequenceFlow FlowElement List exclusiveGatewayOutgoingFlows = ((ExclusiveGateway) curFlowElement).getOutgoingFlows(); // sequenceFlow SequenceFlow sequenceFlow = getSequenceFlow(workflowRequestFormData, exclusiveGatewayOutgoingFlows); if (sequenceFlow != null) { targetRef = sequenceFlow.getTargetRef(); } // ID FlowElement FlowElement targetElement = getFlowElement(flowElements, targetRef); this.getTaskList(processInstanceId, taskList, flowElements, workflowRequestFormData, targetElement); } } /*** * ID FlowElement * @param flowElements * @param targetRef * @return */ private FlowElement getFlowElement(Collection flowElements, String targetRef) { List targetFlowElements = flowElements.stream().filter( flowElement -> !StringUtils.isEmpty(flowElement.getId()) && flowElement.getId().equals(targetRef) ).collect(Collectors.toList()); if (targetFlowElements.size() > 0) { return targetFlowElements.get(0); } return null; } /*** * sequenceFlow * @param workflowRequestFormData * @param outgoingFlows * @return */ private SequenceFlow getSequenceFlow(Map workflowRequestFormData, List outgoingFlows) { List sequenceFlows = outgoingFlows.stream().filter(item -> { Object execConditionExpressionResult = null; boolean re = false; try { execConditionExpressionResult = this.getElValue(item.getConditionExpression(), workflowRequestFormData); } catch (Exception e) { e.printStackTrace(); } if (execConditionExpressionResult.equals("true")) { re = true; } return (Boolean) execConditionExpressionResult; }).collect(Collectors.toList()); if (sequenceFlows.size() > 0) { return sequenceFlows.get(0); } return null; } try、catch、finallyがreturnを返す問題について ウェブページの文章を採集する(小説採集に適している)[2回目の編集]