10组任务,
10组任务,
流程中的某个任务由指定的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(参与者)
相关文章
- 暂无相关文章
用户点评