下一个节点多个的情况,任意选择一个节点跳转实现
下一个节点多个的情况,任意选择一个节点跳转实现
场景:如下:在节点1的位置,选择跳转节点2三个中的任意一个节点执行
实现思路:
- 查询当前节点所有流程方向的节点列表,再选择其中一个节点执行。。
- 每个节点标识一个唯一的id,对应task表的字段TASK_DEF_KEY_,设置连线跳转条件${condition== "T8S0b4A5"}(condition为流程变量)
- 流程运行过程中,设置condition的值,流程就会自动扭转了
条件的写法
${condition=="node2.2"}
代码实现:
@GetMapping("/findNextNodeList")
@ApiOperation("查询下一个指向的所有节点(当前节点所有接下来的流向)")
public Object findNextNodeList(String taskId) {
Task ruTask = taskService.createTaskQuery().taskId(taskId).singleResult();
//流程定义id
String processDefinitionId = ruTask.getProcessDefinitionId();
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
Process process = bpmnModel.getProcesses().get(0);
//根据流程定义id获取所有任务节点(整条流程)
List<UserTask> userTaskList = process.findFlowElementsOfType(UserTask.class);
for (UserTask userTask : userTaskList) {
if (userTask.getId().equals(ruTask.getTaskDefinitionKey())){
//代表当前任务id 对应的节点就是userTask
//当前任务节点流向的节点
List<SequenceFlow> outgoingFlows = userTask.getOutgoingFlows();
return outgoingFlows;
}
}
return userTaskList;
}
@GetMapping("/completeTaskAndSetVariables")
@ApiOperation(value = "完成任务并设置流程变量")
public void completeTaskAndSetVariables(String taskId,String condition) {
//任务id
Map<String,Object> map = new HashMap<>();
map.put("condition",condition);
taskService.complete(taskId,map);
}