从Activiti6开始,就把PvmTransition对象,findActivity,getIncomingTransitions,getOutgoingTransitions等方法都删除了。那么Activiti7中如何获取OutgoingTransitions和IncomingTransitions呢?
首先需要获取BpmnModel对象,通过repositoryService.getBpmnModel(processDefinitionId);这个对象里对应的是bpmn文件的对象。
然后通过bpmnModel.getMainProcess().getFlowElement()方法可以得到FlowNode对象,参数为ActivityId。至于ActivityId,可以从HistoricActivityInstance对象里的getActivityId()方法来获取。HistoricActivityInstance对象又如何获取呢?可以通过historyService.createHistoricActivityInstanceQuery().processInstanceId(processInstanceId)来得到了。FlowNode对象里就有getOutgoingFlows和getIncomingFlows()方法了。
也就是说,只要有processDefinitionId,就可以一步步的得到FlowNode对象,也就有了getOutgoingFlows和getIncomingFlows()方法了。具体可以看下面的代码:
String processDefinitionId = lastTask.getProcessDefinitionId(); BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId); String lastActivityId = null; List<HistoricActivityInstance> haiFinishedList = historyService.createHistoricActivityInstanceQuery() .executionId(lastExecutionId).finished().list(); for (HistoricActivityInstance hai : haiFinishedList) { if (lastTaskId.equals(hai.getTaskId())) { // 得到ActivityId,只有HistoricActivityInstance对象里才有此方法 lastActivityId = hai.getActivityId(); break; } } // 得到上个节点的信息 FlowNode lastFlowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(lastActivityId); List<SequenceFlow> incomingFlows = lastFlowNode.getIncomingFlows(); List<SequenceFlow> outgoingFlows = lastFlowNode.getOutgoingFlows();
如果还有不清楚的,欢迎留言讨论。