springboot+flowable第三节(动态设置审批人)
目录1. 创建流程2. 启动流程1. 创建流程创建一个3个节点的流程:开始—>申请—>结束。xml文件:<?xml version="1.0" encoding="UTF-8"?><definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"xmlns:flowable="http://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"处理。
更多推荐
已为社区贡献2条内容
所有评论(0)