流程中的某個任務由指定的group來完成,其中group由多個user組成。 一、直接指定辦理組 1、流程圖 2、部署和啟動流程 //部署流程 @Test public void bushu() { InputStream inputStream = this.getClass().getResou ...
流程中的某個任務由指定的group來完成,其中group由多個user組成。
一、直接指定辦理組
1、流程圖
2、部署和啟動流程
//部署流程 @Test public void bushu() { InputStream inputStream = this.getClass().getResourceAsStream("GroupTask.zip"); ZipInputStream zipInputStream = new ZipInputStream(inputStream); RepositoryService repositoryService = processEngine.getRepositoryService(); Deployment deploy = repositoryService.createDeployment().name("請假流程") .addZipInputStream(zipInputStream).deploy(); System.out.println("部署成功:部署ID"+deploy.getId()); } //啟動流程 @Test public void startProcess() { RuntimeService runtimeService = processEngine.getRuntimeService(); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess"); System.out.println("流程啟動成功,流程實例ID為:"+processInstance.getId()); } 流程啟動之後,任務表中的辦理人為空,存放流程辦理人的信息表中有八條數據,每個人既是參與者,又是申請者:
3、查詢組任務
此處的張三,可以是李四,王五或者趙六,得到的結果一樣,每個人都可以看到此任務。 //查詢組任務 @Test public void findGroupTask() { TaskService taskService = this.processEngine.getTaskService(); List<Task> list = taskService.createTaskQuery().taskCandidateUser("張三").list(); if (null != list && list.size() > 0) { for (Task task : list) { System.out.println("任務ID:" + task.getId()); } } }4、任務拾取
任務拾取後組任務變成個人任務。 //任務拾取 @Test public void claim() { String taskId="2504"; TaskService taskService = this.processEngine.getTaskService(); taskService.claim(taskId, "張三"); System.out.println("任務拾取成功"); }5、任務回退(設置辦理人為空)
// 任務回退 @Test public void claimBack() { String taskId="2504"; TaskService taskService = this.processEngine.getTaskService(); taskService.setAssignee(taskId, null); System.out.println("任務回退成功"); } 在實際開發中:由主任務辦理人去設置組任務的辦理人,設置時應將組任務辦理人查出進行選擇。目的就是讓組任務變成個人任務。6、查詢組任務成員列表
// 查詢組任務成員列表 @Test public void findGroupUser(){ String taskId = "2504"; List<IdentityLink> list = processEngine.getTaskService()// .getIdentityLinksForTask(taskId); //List<IdentityLink> list = processEngine.getRuntimeService()// // .getIdentityLinksForProcessInstance(instanceId); for(IdentityLink identityLink:list ){ System.out.println("userId="+identityLink.getUserId()); System.out.println("taskId="+identityLink.getTaskId()); System.out.println("piId="+identityLink.getProcessInstanceId()); System.out.println("TYPE="+identityLink.getType()); System.out.println("######################"); } }
二、使用流程變數指定辦理組
1、流程圖
2、在啟動時設置辦理人
//啟動流程 @Test public void startProcess() { RuntimeService runtimeService = this.processEngine.getRuntimeService(); String processDefinitionKey = "myProcess"; Map<String,Object> variables=new HashMap<>(); variables.put("usernames", "張三,李四,王五,趙六"); runtimeService.startProcessInstanceByKey(processDefinitionKey,variables); System.out.println("流程啟動成功"); }三、使用監聽器指定辦理組
指定步驟與個人任務指定一致。四、總結
組任務及三種分配方式,
1,在taskProcess.bpmn中直接寫 candidate-users=“小A,小B,小C,小D"
2,在taskProcess.bpmn中寫 candidate-users =“#{userIDs}”,變數的值要是String的。
使用流程變數指定辦理人
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("userIDs", "大大,小小,中中");
3,使用TaskListener介面,使用類實現該介面,在類中定義,
//添加組任務的用戶
delegateTask.addCandidateUser(userId1);
delegateTask.addCandidateUser(userId2);
組任務分配給個人任務(認領任務),
processEngine.getTaskService().claim(taskId, userId);
個人任務分配給組任務,
processEngine.getTaskService(). setAssignee(taskId, null);
向組任務添加人員,
processEngine.getTaskService().addCandidateUser(taskId, userId);
向組任務刪除人員,
processEngine.getTaskService().deleteCandidateUser(taskId, userId);
個人任務和組任務存放辦理人對應的表,
act_ru_identitylink表存放任務的辦理人,包括個人任務和組任務,表示正在執行的任務
act_hi_identitylink表存放任務的辦理人,包括個人任務和組任務,表示歷史任務
區別在於,如果是個人任務TYPE的類型表示participant(參與者)
如果是組任務TYPE的類型表示candidate(候選者)和participant(參與者)