1. 说明
在应用中可能需要获取当前节点的上一个节点的信息,或者下一个节点的信息。
2. 获取上一节点的方式
如下能够获取到上一个节点的key,可以用来进行回退等功能实现。
/**
* 根据流程实例id获取上一个节点的信息
*/
@Test
public void queryUpOneNode(){
Task task = taskService.createTaskQuery()
.taskAssignee("lisi")
.singleResult();
List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery()
.processInstanceId(task.getProcessInstanceId())
.orderByHistoricTaskInstanceEndTime()
.desc()
.list();
HistoricTaskInstance taskInstance = null;
if(!list.isEmpty()){
if(list.get(0).getEndTime()!=null){
taskInstance=list.get(0);
}
}
System.out.println(taskInstance.getTaskDefinitionKey());
}
效果图:
数据库:
查询到的:
3. 获取下一节点的方式
当前节点任务A,通过当前任务的流程定义id获取下一个节点任务B的信息。
/**
* 根据流程定义id获取当前节点的下一节点
*/
@Test
public void getNexNode(){
Task task = taskService.createTaskQuery()
.taskAssignee("zhangsan")
.singleResult();
//根据流程定义id获取bpmnModel对象
BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId());
//获取当前节点信息
FlowNode flowNode =
(FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey());
//获取当前节点输出连线
List<SequenceFlow> outgoingFlows = flowNode.getOutgoingFlows();
//遍历输出连线
for (SequenceFlow outgoingFlow : outgoingFlows) {
//获取输出节点元素
FlowElement targetFlowElement = outgoingFlow.getTargetFlowElement();
//排除非用户任务接点
if(targetFlowElement instanceof UserTask){
//获取输出节点id==名称
System.out.println(outgoingFlow.getTargetFlowElement().getId()+"==="
+outgoingFlow.getTargetFlowElement().getName());
}
}
}
效果图:
数据库:
查询到的:
可以看出当前节点任务A,可以查询到任务B的信息。