10組任務

流程中的某個任務由指定的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(參與者)

相關文章
相關標籤/搜索