一、需求分析
- 我們在實際業務開發過程中,某一個審批任務節點可以分配一個角色(或者叫做組),然后屬於這個角色的任何一個用戶都可以去完成這個任務節點的審批
二、案例
2.1 方式一:直接流程圖配置中寫死
- 如下圖,此時有兩個用戶

- 如下圖,此時有兩個組(角色)

- 用戶和組(角色)關聯關系表

- 在流程圖中配置

- 最后部署、啟動流程后,如下查詢候選人 依然要用 taskCandidateUser,由於張三李四都是“管理員”組(角色),所以都可以完成該任務
/** * 查看任務 */ @Test public void find_task() { List<Task> taskList=processEngine.getTaskService().createTaskQuery().taskCandidateUser("張三").list(); for(Task task:taskList){ System.out.println("任務ID:"+task.getId()); System.out.println("任務名稱:"+task.getName()); System.out.println("任務創建時間:"+task.getCreateTime()); System.out.println("任務委派人:"+task.getAssignee()); System.out.println("流程實例ID:"+task.getProcessInstanceId()); } }
2.2 方式二:使用流程變量

- 啟動流程的設置具體的值
/** * 啟動流程實例 */ @Test public void start(){ Map<String,Object> variables=new HashMap<String,Object>(); variables.put("groupId", "管理員); ProcessInstance pi=processEngine.getRuntimeService() // 運行時Service .startProcessInstanceByKey("groupProcess2",variables); // 流程定義表的KEY字段值 System.out.println("流程實例ID:"+pi.getId()); System.out.println("流程定義ID:"+pi.getProcessDefinitionId()); }
2.2 方式三:使用taskListener監聽器

- 在監聽器中添加組(角色)
package com.shyroke.activiti.listenter; import org.activiti.engine.delegate.DelegateTask; import org.activiti.engine.delegate.TaskListener; public class MyTaskListener implements TaskListener { public void notify(DelegateTask delegateTask) { delegateTask.addCandidateGroup("管理員"); } }
- 如下,所有“管理員”組的用戶都可以完成這個任務
/** * 查看任務 */ @Test public void find_task() { List<Task> taskList=processEngine.getTaskService().createTaskQuery().taskCandidateUser("李四").list(); for(Task task:taskList){ System.out.println("任務ID:"+task.getId()); System.out.println("任務名稱:"+task.getName()); System.out.println("任務創建時間:"+task.getCreateTime()); System.out.println("任務委派人:"+task.getAssignee()); System.out.println("流程實例ID:"+task.getProcessInstanceId()); } }
