- A+
所属分类:工作流引擎
从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();如果还有不清楚的,欢迎留言讨论。
