1. 程式人生 > >activiti(7.0) 組任務流程CandidateUsers

activiti(7.0) 組任務流程CandidateUsers

1.部署流程定義

public static void main(String[] args) {
        //1.建立ProcessEngine物件
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

        //2.得到RepositoryService例項
        RepositoryService repositoryService = processEngine.getRepositoryService();

        //3.進行部署
        Deployment deployment = repositoryService.createDeployment()
                .addClasspathResource("diagram/holiday5.bpmn")  //新增bpmn資源
                // .addClasspathResource("diagram/holiday5.png")
                .name("請假申請單流程")
                .deploy();

        //4.輸出部署的一些資訊
        System.out.println(deployment.getName());
        System.out.println(deployment.getId());
    }

 

2.啟動流程例項

public static void main(String[] args) {
            //1.得到ProcessEngine物件
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

            //2.得到RunService物件
            RuntimeService runtimeService = processEngine.getRuntimeService();

            //3.建立流程例項  流程定義的key需要知道 holiday
            ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess_1");


            //4.輸出例項的相關資訊
            System.out.println("流程定義ID"+processInstance.getProcessDefinitionId());//holiday:1:4
            System.out.println("流程例項ID"+processInstance.getId());//2501
    }

 

3.填寫請假單的任務要執行完成

public static void main(String[] args) {
        //1.得到ProcessEngine物件
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

        //2.得到TaskService物件
        TaskService taskService = processEngine.getTaskService();

        //3.查詢當前使用者的任務
        Task task = taskService.createTaskQuery()
                .processDefinitionKey("myProcess_1")
                .taskAssignee("xiaozhang")
                .singleResult();

        //4.處理任務,結合當前使用者任務列表的查詢操作的話,任務ID:task.getId()
        if(task!=null){
            taskService.complete(task.getId());
            System.out.println("使用者任務執行完畢...");
        }


        //5.輸出任務的id
        System.out.println(task.getId());
    }

 

4.查詢候選使用者的組任務

public static void main(String[] args) {
        //1.得到ProcessEngine物件
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

        //2.得到TaskService物件
        TaskService taskService = processEngine.getTaskService();

        //3.設定一些引數,流程定義的key,候選使用者
        String key = "myProcess_1";
        String candidate_users="zhangsan";

        //4.執行查詢
        List<Task> list = taskService.createTaskQuery()
                .processDefinitionKey(key)
                .taskCandidateUser(candidate_users)//設定候選使用者
                .list();
        //5.輸出
        for(Task task :list){
            System.out.println(task.getProcessInstanceId());
            System.out.println(task.getId());
            System.out.println(task.getName());
            System.out.println(task.getAssignee());//為null,說明當前的zhangsan只是一個候選人,並不是任務的執行人
        }
    }

 

5.測試zhangsan使用者,來拾取組任務

public static void main(String[] args) {
        //1.得到ProcessEngine物件
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

        //2.得到TaskService物件
        TaskService taskService = processEngine.getTaskService();

        //3.設定一些引數,流程定義的key,候選使用者
        String key = "myProcess_1";
        String candidate_users="zhangsan";

        //4.執行查詢
        Task task = taskService.createTaskQuery()
                .processDefinitionKey(key)
                .taskCandidateUser(candidate_users)//設定候選使用者
                .singleResult();
        if(task!=null){
            taskService.claim(task.getId(),candidate_users);//第一個引數任務ID,第二個引數為具體的候選使用者名稱
            System.out.println("任務拾取完畢!");
        }
    }

 

6.當前的使用者查詢自己的任務

public static void main(String[] args) {
        //1.得到ProcessEngine物件
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

        //2.得到TaskService物件
        TaskService taskService = processEngine.getTaskService();

        //3.設定一些引數,流程定義的key,使用者
        String key = "myProcess_1";
        String assignee="zhangsan";

        //4.執行查詢
        List<Task> list = taskService.createTaskQuery()
                .processDefinitionKey(key)
                .taskAssignee(assignee)  //設定任務的負責人
                .list();
        //5.輸出
        for(Task task :list){
            System.out.println(task.getProcessInstanceId());
            System.out.println(task.getId());
            System.out.println(task.getName());
            System.out.println(task.getAssignee());//任務的執行人
        }

 

7.當前使用者完成自己的任務

public static void main(String[] args) {
        //1.得到ProcessEngine物件
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

        //2.得到TaskService物件
        TaskService taskService = processEngine.getTaskService();

        //3.設定一些引數,流程定義的key,使用者
        String key = "myProcess_1";
        String assignee="lisi";

        //4.執行查詢
        Task task = taskService.createTaskQuery()
                .processDefinitionKey(key)
                .taskAssignee(assignee)  //設定任務的負責人
                .singleResult();
        //5.執行當前的任務
        if(task!=null){
            taskService.complete(task.getId());
            System.out.println("任務執行完畢!");
        }

    }

 

8.任務交接,前提要保證當前使用者是這個任務的負責人,這時候他才可以有許可權去將任務交接給其他候選人

public static void main(String[] args) {
        //1.得到ProcessEngine物件
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

        //2.得到TaskService物件
        TaskService taskService = processEngine.getTaskService();

        //3.設定一些引數,流程定義的key,使用者
        String key = "myProcess_1";
        String assignee="zhangsan";

        //4.執行查詢
        Task task = taskService.createTaskQuery()
                .processDefinitionKey(key)
                .taskAssignee(assignee)  //設定任務的負責人
                .singleResult();
        //5.判斷是否有這個任務
        if(task!=null){
            taskService.setAssignee(task.getId(),"lisi");//交接任務為lisi  ,交接任務就是一個候選人拾取使用者的過程
            System.out.println("交接任務完成~!");
        }
    }