流程中的某個任務由指定的group來完成,其中group由多個user組成。
1、直接指定辦理組
一、流程圖
二、部署和啓動流程
//部署流程
@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());
}
流程啓動以後,任務表中的辦理人爲空,存放流程辦理人的信息表中有八條數據,每一個人既是參與者,又是申請者:
三、查詢組任務
此處的張三,能夠是李四,王五或者趙六,獲得的結果同樣,每一個人均可以看到此任務。
//查詢組任務
@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());
}
}
}
四、任務拾取
任務拾取後組任務變成我的任務。
//任務拾取
@Test
public void claim() {
String taskId="2504";
TaskService taskService = this.processEngine.getTaskService();
taskService.claim(taskId, "張三");
System.out.println("任務拾取成功");
}
五、任務回退(設置辦理人爲空)
// 任務回退
@Test
public void claimBack() {
String taskId="2504";
TaskService taskService = this.processEngine.getTaskService();
taskService.setAssignee(taskId, null);
System.out.println("任務回退成功");
}
在實際開發中:由主任務辦理人去設置組任務的辦理人,設置時應將組任務辦理人查出進行選擇。目的就是讓組任務變成我的任務。
六、查詢組任務成員列表
// 查詢組任務成員列表
@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("######################");
}
}
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("流程啓動成功");
}
3、使用監聽器指定辦理組
指定步驟與我的任務指定一致。
4、總結
組任務及三種分配方式,ide
1,在taskProcess.bpmn中直接寫 candidate-users=「小A,小B,小C,小D"this
2,在taskProcess.bpmn中寫 candidate-users =「#{userIDs}」,變量的值要是String的。blog
使用流程變量指定辦理人接口
Map<String, Object> variables = new HashMap<String, Object>();ip
variables.put("userIDs", "大大,小小,中中");ci
3,使用TaskListener接口,使用類實現該接口,在類中定義,開發
//添加組任務的用戶部署
delegateTask.addCandidateUser(userId1);get
delegateTask.addCandidateUser(userId2);input
組任務分配給我的任務(認領任務),
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(參與者)