Activiti工作流學習(四)

前言

上一篇中我們將工作流啓動,獲得了流程實例,本篇在上一篇的基礎上再寫幾個常用的方法。

幾個常用方法

1.查詢流程實例

@Test
public void queryProcessInstance(){
        String processDefintionKey = "activiti_leave";

        //創建流程實例查詢對象
        ProcessInstanceQuery processInstanceQuery = runtimeService.createProcessInstanceQuery();
        List<ProcessInstance> processInstanceList = processInstanceQuery
                                    .processDefinitionKey(processDefintionKey)
                                    .orderByProcessDefinitionKey()
                                    .desc()
                                    .list();

        for(ProcessInstance processInstance : processInstanceList){
            System.out.println("流程實例ID:"+processInstance.getId());
            System.out.println("正在活動的節點ID:"+processInstance.getActivityId());//正在活動的流程節點
            System.out.println(""+processInstance.getProcessDefinitionId());//正在活動的流程節點
        }

        //如果能夠確定是單個實例,可以用以下方法
//      ProcessInstance processInstance = processInstanceQuery
//              .processDefinitionKey(processDefintionKey).singleResult();
//      
//      System.out.println("流程實例ID:"+processInstance.getId());
//      System.out.println("正在活動的節點ID:"+processInstance.getActivityId());//正在活動的流程節點
//      System.out.println(""+processInstance.getProcessDefinitionId());//正在活動的流程節點
}

2.查詢流程定義-通過id查詢

@Test
public void queryProcessDefinitionById(){
//      ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//      RepositoryService repositoryService = processEngine.getRepositoryService();

        String processDefinitionId = "activiti_leave:1:4";
        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
                                                               .processDefinitionId(processDefinitionId)
                                                               .singleResult();
        System.out.println("流程定義的Id:"+processDefinition.getId());
        System.out.println("流程定義的key:"+processDefinition.getKey());
        System.out.println("流程定義的名字:"+processDefinition.getName());
        System.out.println("流程定義的資源文件名:"+processDefinition.getResourceName());
}

3.查詢流程定義-通過key查詢

@Test
public void queryProcessDefinitionByKey(){
//          ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//          RepositoryService repositoryService = processEngine.getRepositoryService();

        String processDefinitionKey = "activiti_leave";
        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
                                                                .processDefinitionKey(processDefinitionKey)
                                                                .singleResult();
        System.out.println("流程定義的Id:"+processDefinition.getId());
        System.out.println("流程定義的key:"+processDefinition.getKey());
        System.out.println("流程定義的名字:"+processDefinition.getName());
        System.out.println("流程定義的資源文件名:"+processDefinition.getResourceName());
}

4.根據辦理人查詢他的全部任務

 @Test
public void queryTaksByAssignee(){

        String assignee = "employee";
        List<Task> taskList = taskService.createTaskQuery()//創建任務 查詢對象
                                        .processDefinitionKey("activiti_leave")//根據流程定義key查詢
                                        .taskAssignee(assignee)//根據辦理人查詢
                                        .orderByTaskCreateTime()
                                        .desc()
                                        .list();
        for(Task task : taskList){
            System.out.println("任務的ID:"+task.getId());
            System.out.println("任務的名字:"+task.getName());
            System.out.println("任務的創建時間:"+task.getCreateTime());
            System.out.println("辦理人:"+task.getAssignee());
        }
}

5.查詢正在執行的流程對象

@Test
public void queryExecution(){
        List<Execution> executionList = runtimeService.createExecutionQuery()//創建正在執行的流程對象的查詢對象
                                                    .processDefinitionKey("activiti_leave")//根據流程定義的key查詢
                                                    .list();
        for (Execution execution : executionList) {
            System.out.println("正在執行的流程對象Id:"+execution.getId());
            System.out.println("正在活動的節點Id:"+execution.getActivityId());
            System.out.println("所屬流程實例Id:"+execution.getProcessInstanceId());
        }
}

6.辦理完成任務

 /**辦理任務流程沒有結束時
     * act_ru_execution --正在活動的ACT_ID指到下一個節點
     * act_hi_procinst  --如果不是最後一個節點沒有變化
     * act_ru_task      --刪除當前實例上一步的任務,產生當前的任務
     * act_hi_taskinst  --增加一條當前任務的數據
     * act_hi_actinst   --增加一條當前任務的數據
     */

    /**辦理任務流程結束時
     * act_ru_execution --正在運行的流程對象消失
     * act_hi_procinst  --歷史的流程實例完成,endtime出現。
     * act_ru_task      --當前實例的任務消失
     * act_hi_taskinst  --沒有變化
     * act_hi_actinst   --增加一個結束的活動endevent
     */
    @Test
    public void completeTaksByAssignee(){
        String assignee = "employee";
        List<Task> taskList = taskService.createTaskQuery()//創建任務 查詢對象
                                        .processDefinitionKey("activiti_leave")//根據流程定義key查詢
                                        .taskAssignee(assignee)//根據辦理人查詢
                                        .orderByTaskCreateTime()
                                        .desc()
                                        .list();
        //獲取第一個任務
        Task task = taskList.get(0);
        //使用任務服務接口來辦理任務
        taskService.complete(task.getId());

    }

7.流程狀態查詢

@Test
public void queryProcessInstanceState(){
        ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
                .processInstanceId("201")
                .singleResult();
        if(processInstance == null){
            System.out.println("當前流程已經完成");
        }else{
            System.out.println("當前流程實例ID:"+processInstance.getId());
            System.out.println("當前流程所處的位置:"+processInstance.getActivityId());
        }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章