Activiti6获取上一级,下一级节点信息
上一级节点信息:
主要是通过bpmn对象获取节点信息,然后遍历获取到需要的那个节点,主要是: String sourceRef = incomingFlow.getSourceRef(), flowNode.getIncomingFlows();这两个方法后者是获取输入节点的节点信息,前者是获取输入节点的sid通过这个id可以获取到上一个节点的相关信息。
@Override
public Result lastNodeMessage(String processInstanceId) {
//当前任务信息
List<Task> list = taskService.createTaskQuery().processInstanceId(processInstanceId).list();
List<Map> listNode = new ArrayList<>();
for (Task task : list) {
Map map = new HashMap();
//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> incomingFlows = flowNode.getIncomingFlows();
//遍历返回下一个节点信息
for (SequenceFlow incomingFlow : incomingFlows) {
//类型自己判断
String sourceRef = incomingFlow.getSourceRef();
//通过上级节点对象的信息来判断上级节点是什么节点(网关、用户、开始、结束)
FlowNode flowElement = (FlowNode) bpmnModel.getMainProcess().getFlowElement(sourceRef);
//用户任务
if (flowElement instanceof UserTask) {
map.put("name", flowElement.getName());
map.put("taskId", flowElement.getId());
map.put("processInstanceId", processInstanceId);
listNode.add(map);
logger.info("节点信息:{}",map);
} else if (flowElement instanceof Gateway) {
List<Map> maps = setExclusiveGateway(incomingFlows, processInstanceId);
logger.info("节点信息:{}",maps);
return Result.data(maps);
} else if (flowElement instanceof StartEvent) {
map.put("name", flowElement.getName());
map.put("taskId", flowElement.getId());
map.put("processInstanceId", processInstanceId);
map.put("message", "上级节点是流程起点");
listNode.add(map);
logger.info("节点信息:{}",map);
}
}
}
return Result.data(listNode);
与获取上一节点信息代码差不多,主要参数是流程I的,也就是act_ru_task,正在运行的流程id,也是主要的方法outgoingFlow.getTargetFlowElement();获取输出节点的节点信息。
下一节点信息代码:
@Override
public Result nextNodeMessage(String processInstanceId) {
//当前任务信息
List<Task> list = taskService.createTaskQuery().processInstanceId(processInstanceId).list();
List<Map> listNode = new ArrayList<>();
for (Task task : list) {
Map map = new HashMap();
//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) {
map.put("name", targetFlowElement.getName());
map.put("taskId", targetFlowElement.getId());
map.put("processInstanceId", processInstanceId);
listNode.add(map);
logger.info("节点信息:{}",map);
} else if (targetFlowElement instanceof Gateway) {
List<Map> maps = setExclusiveGateway(outgoingFlows, processInstanceId);
logger.info("节点信息:{}",maps);
return Result.data(maps);
} else if (targetFlowElement instanceof EndEvent) {
map.put("name", targetFlowElement.getName());
map.put("taskId", targetFlowElement.getId());
map.put("processInstanceId", processInstanceId);
map.put("message", "下级节点是流程终点");
listNode.add(map);
logger.info("节点信息:{}",map);
}
}
}
return Result.data(listNode);
}