springboot+flowable第三节(动态设置审批人)
1. 创建流程
创建一个3个节点的流程: 开始—>审核—>结束。 xml文件:
<?xml version="1.0" encoding="UTF-8"?> <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:flowable="http://flowable.org/bpmn" targetNamespace="http://www.flowable.org/processdef"> <process id="process_audit2" name="审核流程"> <startEvent id="startNode1" name="开始"> <outgoing>Flow_0ksehsm</outgoing> </startEvent> <endEvent id="Event_08rzeth" name="结束"> <incoming>Flow_18upiqx</incoming> </endEvent> <sequenceFlow id="Flow_0ksehsm" sourceRef="startNode1" targetRef="Activity_0ipmowu" /> <sequenceFlow id="Flow_18upiqx" sourceRef="Activity_0ipmowu" targetRef="Event_08rzeth" /> <!--用户任务:需要指定用户来执行 flowable:assignee:任务受理人,动态设置受理人为流程参数中的approval --> <userTask id="Activity_0ipmowu" name="审核" flowable:assignee="${approval}"> <incoming>Flow_1huwgzm</incoming> <outgoing>Flow_18upiqx</outgoing> </userTask> </process> </definitions>
将xml文件保存在src/main/resources/processes下 启动项目,等流程自动部署到数据库。
2. 启动流程
设置审批人,启动流程。 下面填写的的approval参数即为xml文件中的${approval},参数名称要保持一致
@PostMapping("/start") @Transactional(rollbackFor = Exception.class) public String start(@RequestParam String key) { try { // 构建流程启动需要的流程参数信息 Map<String, Object> variables = new HashMap<String, Object>(); variables.put("approval", 2); // 设置流程启动用户 identityService.setAuthenticatedUserId("1"); // 根据key启动,返回流程实例 ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(key,variables); // 返回流程实例ID return processInstance.getProcessInstanceId(); } catch (Exception e) { e.printStackTrace(); return "启动失败!"; } }
启动: 启动成功。 因为代码里是把审核节点的审批人设为了"2",现在我们去查询一下用户2的待办任务:
/**获取指定用户的待办的任务列表 * 代办 * */ @GetMapping("/getNeedDoTasks/{userId}") @Transactional(rollbackFor = Exception.class) public String getNeedDoTasks(@PathVariable String userId) { List<Task> tasks = taskService.createTaskQuery() .taskCandidateOrAssigned(userId) .list(); if (!tasks.isEmpty()) { List<Map<String, Object>> list = new ArrayList<>(); for (Task task : tasks) { Map<String, Object> map = new HashMap<>(); //代办id String taskId = task.getId(); //代办节点名称 String taskName = task.getName(); //创建时间 Date createTime = task.getCreateTime(); map.put("taskId", taskId); map.put("taskName", taskName); map.put("createTime", createTime); list.add(map); } return listToString(list,,); } return "当前用户在当前流程实例中并无待办!"; }
结果: 查询其他用户,比如用户"1"的待办列表:
可以看到,任务成功分配给了用户"2"处理。