一、概念
-
我們在開發的時候,有一種情況是這樣的,
我們有一個任務,可以讓多個用戶中的任何一個人辦理即可,比如某個審批任務,
張三,李四,王五他們中的任何一人辦理下都行,這時候,我們用到多用戶任務分配。
1.1 方式一:直接流程圖配置中寫死
- 查看任務的時候需要如下
/** * 查看任務 */ @Test public void findTask(){ List<Task> taskList=processEngine.getTaskService() // 任務相關Service .createTaskQuery() // 創建任務查詢 //.taskAssignee("李四") // 指定某個人 .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()); } }
- 啟動流程后,任務表中的ASSIGNEE_為空
- 身份聯系表如下圖,可知在流程圖里配置的用戶 全是參與者participant,然后還有一份候選人candidate,候選人綁定任務id,參與者綁定流程實例ID,這里我們可以通過Activiti的接口來增加或者減少候選人
- 我們用張三,李四,王五中的任何一人,都能查詢到任務,最后任何一人完整任務即可;
1.2 方式二:使用流程變量
- 啟動流程的時候設置流程變量的值,其他的和上面一樣
/** * 啟動流程實例 */ @Test public void start(){ Map<String,Object> variables=new HashMap<String,Object>(); variables.put("userIds", "張三,李四,王五"); ProcessInstance pi=processEngine.getRuntimeService() // 運行時Service .startProcessInstanceByKey("multiUserProcess2",variables); // 流程定義表的KEY字段值 System.out.println("流程實例ID:"+pi.getId()); System.out.println("流程定義ID:"+pi.getProcessDefinitionId()); }
1.3 分配方式三 TaskListener監聽實現
- 定義一個監聽類 MyTaskListener 實現 TaskListener接口
public class MyTaskListener implements TaskListener{ /** * */ private static final long serialVersionUID = 1L; public void notify(DelegateTask delegateTask) { // TODO Auto-generated method stub delegateTask.addCandidateUser("張三"); delegateTask.addCandidateUser("李四"); delegateTask.addCandidateUser("王五"); } }
- 畫流程圖