一、歷史活動查詢
- 本章案例是基於上一章節案例的基礎上,流程走完后進行測試的,也就是下圖的流程從學生請假到班主任審批都已經完成,本章用來測試查詢歷史活動和歷史任務的
- 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("流程已經執行結束!"); } }
- 如果流程已經處理完下圖中的“學生請假”和“班長審批”和“班主任審批”,那么流程已經執行結束。