Activiti6中调用complete方法后获取后续任务ID及Task1重复指派经办人方案咨询
解决Activiti6流程回退时重置任务经办人问题
先针对你当前的疑问——调用complete方法后如何获取task2的任务ID,给你直接的解决方案,再分享更优的实现思路。
一、获取task2任务ID的直接方法
当你调用taskService.complete(task.getId(), variables)完成task1后,流程会自动流转到task2,这时候你可以通过流程实例ID+经办人来精准查询到刚生成的task2:
@Test public void testCompleteTask() { Task task = taskService.createTaskQuery().taskAssignee("Tom").singleResult(); if (task == null) { System.out.println("no task!!!"); return; } String preTaskId = task.getId(); String processInstanceId = task.getProcessInstanceId(); // 获取当前流程实例ID HashMap<String, Object> variables = new HashMap<>(); variables.put("userId", "Jerry"); variables.put("oper", "saolu"); // 完成task1,流程流转到task2 taskService.complete(task.getId(), variables); // 查询task2:根据流程实例ID+经办人Jerry(和你设置的userId对应) Task task2 = taskService.createTaskQuery() .processInstanceId(processInstanceId) .taskAssignee("Jerry") .singleResult(); if (task2 != null) { // 设置task2的局部变量pre_task_id taskService.setVariableLocal(task2.getId(), "pre_task_id", preTaskId); System.out.println("已成功设置task2局部变量,task2ID:" + task2.getId()); } else { System.out.println("未找到task2,请检查流程流转逻辑"); } }
这个方法的核心是利用processInstanceId锁定当前流程实例,避免查询到其他流程的同名任务,确保拿到的是刚生成的task2。
二、更优的解决方案:无需局部变量,自动重置task1经办人
你最终的需求是流程回退到task1时,经办人自动设为Tom,其实不需要通过存pre_task_id查历史的方式,有两种更简洁的实现:
方案1:BPMN定义中固定task1的经办人
直接在BPMN文件的task1节点配置assignee="Tom",这样无论流程多少次回退到task1,Activiti都会自动将经办人设置为Tom,完全不需要代码干预:
<userTask id="task1" name="Task1" activiti:assignee="Tom"> <!-- 其他配置 --> </userTask>
方案2:任务监听器动态设置经办人
如果后续需要动态调整经办人(比如从数据库获取),可以给task1添加创建事件监听器,每次task1被创建(包括回退触发的创建)时,自动设置经办人:
- 编写监听器类:
public class Task1AssigneeListener implements TaskListener { @Override public void notify(DelegateTask delegateTask) { // 这里可以写逻辑,比如从配置/数据库获取Tom delegateTask.setAssignee("Tom"); } }
- 在BPMN文件中配置监听器:
<userTask id="task1" name="Task1"> <extensionElements> <activiti:taskListener event="create" class="com.example.Task1AssigneeListener"/> </extensionElements> </userTask>
这两种方案都比你当前的思路更符合Activiti的设计理念,减少了代码中对任务ID的依赖,也避免了查询历史表的额外开销。
内容的提问来源于stack exchange,提问作者coooooong
相关产品推荐
相关产品推荐

