(七)Activiti之歷史活動查詢和歷史任務查詢和流程狀態查詢


一、歷史活動查詢

  • 本章案例是基於上一章節案例的基礎上,流程走完后進行測試的,也就是下圖的流程從學生請假到班主任審批都已經完成,本章用來測試查詢歷史活動和歷史任務的

  • activiti5的歷史活動包括所有節點(上圖的圓圈)和任務(上圖的矩形),而歷史任務只包含任務。所以一般開發中查詢歷史活動比較常用。
    /**
     * 歷史活動查詢
     */
    @Test
    public void historyActInstanceList(){
        List<HistoricActivityInstance>  list=processEngine.getHistoryService() // 歷史相關Service
            .createHistoricActivityInstanceQuery() // 創建歷史活動實例查詢
            .processInstanceId("2501") // 執行流程實例id
            .finished()
            .list();
        for(HistoricActivityInstance hai:list){
            System.out.println("活動ID:"+hai.getId());
            System.out.println("流程實例ID:"+hai.getProcessInstanceId());
            System.out.println("活動名稱:"+hai.getActivityName());
            System.out.println("辦理人:"+hai.getAssignee());
            System.out.println("開始時間:"+hai.getStartTime());
            System.out.println("結束時間:"+hai.getEndTime());
            System.out.println("=================================");
        }
    }
  • 結果,下圖的數據來源於表act_hi_actinst

 

 二、歷史任務查詢

  •  activiti5的歷史活動包括所有節點(上圖的圓圈)和任務(上圖的矩形),而歷史任務只包含任務。所以一般開發中查詢歷史活動比較常用。

 

    /**
     * 歷史任務查詢
     */
    @Test
    public void historyTaskList(){
        List<HistoricTaskInstance> list=processEngine.getHistoryService() // 歷史相關Service
            .createHistoricTaskInstanceQuery() // 創建歷史任務實例查詢
            .processInstanceId("2501") // 用流程實例id查詢
            .finished() // 查詢已經完成的任務
            .list(); 
        for(HistoricTaskInstance hti:list){
            System.out.println("任務ID:"+hti.getId());
            System.out.println("流程實例ID:"+hti.getProcessInstanceId());
            System.out.println("任務名稱:"+hti.getName());
            System.out.println("辦理人:"+hti.getAssignee());
            System.out.println("開始時間:"+hti.getStartTime());
            System.out.println("結束時間:"+hti.getEndTime());
            System.out.println("=================================");
        }
    }
    
  • 結果,下圖的數據來源於act_hi_taskinst表

 

 

 三、查詢流程狀態

    /**
     * 查詢流程狀態(正在執行 or 已經執行結束)
     */
    @Test
    public void processState(){
        ProcessInstance pi=processEngine.getRuntimeService() // 獲取運行時Service
            .createProcessInstanceQuery() // 創建流程實例查詢
            .processInstanceId("2501") // 用流程實例id查詢
            .singleResult();
        if(pi!=null){
            System.out.println("流程正在執行!");
        }else{
            System.out.println("流程已經執行結束!");
        }
    }
  • 如果流程已經處理完下圖中的“學生請假”和“班長審批”和“班主任審批”,那么流程已經執行結束。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM