在 Activiti 流程引擎中,盡管通過 setAssignee(taskId, userId) 可以設置受理人,但這畢竟要先把下一步的任務查出來才能設置,比較繁瑣;借助 Activiti 的 activiti:assignee 屬性就可以自動化設置,即在當前任務完成之時就給下一個任務的受理人賦值。
這本質上是在設置一個局部變量,為流程的單個用戶任務服務。
不提倡的 setAssignee 的方式
taskService.complete(task.getId(), vars);
// 下一步的用戶任務
task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
taskService.setAssignee(task.getId(), addModel.getCurrentTracer().toString());
為了設置受理人,在已經完成任務后,還需要把下一步的任務再次查詢出來,比較繁瑣。
提倡 activiti:assignee 動態設置
1.在流程設計中為 Assignee 指定變量“${assigneeUserId}”
其對應的 XML 配置為:
<userTask id="usertask2" name="報項審核(業務經理)" activiti:assignee="${assigneeUserId}"></userTask>
2. 針對變量賦值
vars = new HashMap<>();
// 完成任務
vars.put("assigneeUserId", addModel.getCurrentTracer().toString());
taskService.complete(task.getId(), vars);
只需關心完成當前任務即可,Activiti 會自動把參數 assigneeUserId 的值作為下一步用戶任務的 Assignee_ 字段的值。
3. 驗證
查詢運行時任務表 act_ru_task 的記錄,可見 Assignee_ 字段已經有了值。