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(参与者)

猜你喜欢

转载自www.cnblogs.com/Guorisy/p/12099285.html