ZPY博客

Activiti7中没有getOutgoingTransitions等方法

从Activiti6开始,就把PvmTransition对象,findActivity,getIncomingTransitionsgetOutgoingTransitions等方法都删除了。那么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();

如果还有不清楚的,欢迎留言讨论。