Activiti 學習筆記六:流程執行歷史記錄

衣舞晨風發表於2016-09-06

一、查詢歷史流程例項

查詢按照某個流程定義的規則一共執行了多少次流程

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

    /** 查詢歷史流程例項 */
    @Test
    public void findHistoryProcessInstance() {
        String processInstanceId = "2101";
        HistoricProcessInstance hpi = processEngine.getHistoryService()// 與歷史資料(歷史表)相關的Service
                .createHistoricProcessInstanceQuery()// 建立歷史流程例項查詢
                .processInstanceId(processInstanceId)// 使用流程例項ID查詢
                .orderByProcessInstanceStartTime().asc().singleResult();
        System.out.println(hpi.getId() + "    " + hpi.getProcessDefinitionId() + "    " + hpi.getStartTime() + "    "
                + hpi.getEndTime() + "     " + hpi.getDurationInMillis());
    }

二、查詢歷史活動

某一次流程的執行一共經歷了多少個活動

/** 查詢歷史活動 */
    @Test
    public void findHistoryActiviti() {
        String processInstanceId = "2101";
        List<HistoricActivityInstance> list = processEngine.getHistoryService()//
                .createHistoricActivityInstanceQuery()// 建立歷史活動例項的查詢
                .processInstanceId(processInstanceId)//
                .orderByHistoricActivityInstanceStartTime().asc()//
                .list();
        if (list != null && list.size() > 0) {
            for (HistoricActivityInstance hai : list) {
                System.out.println(hai.getId() + "   " + hai.getProcessInstanceId() + "   " + hai.getActivityType()
                        + "  " + hai.getStartTime() + "   " + hai.getEndTime() + "   " + hai.getDurationInMillis());
                System.out.println("#####################");
            }
        }
    }

三、查詢歷史任務

某一次流程的執行一共經歷了多少個任務

/** 查詢歷史任務 */
    @Test
    public void findHistoryTask() {
        String processInstanceId = "2101";
        List<HistoricTaskInstance> list = processEngine.getHistoryService()// 與歷史資料(歷史表)相關的Service
                .createHistoricTaskInstanceQuery()// 建立歷史任務例項查詢
                .processInstanceId(processInstanceId)//
                .orderByHistoricTaskInstanceStartTime().asc().list();
        if (list != null && list.size() > 0) {
            for (HistoricTaskInstance hti : list) {
                System.out.println(hti.getId() + "    " + hti.getName() + "    " + hti.getProcessInstanceId() + "   "
                        + hti.getStartTime() + "   " + hti.getEndTime() + "   " + hti.getDurationInMillis());
                System.out.println("################################");
            }
        }
    }

四、查詢歷史流程變數

某一次流程的執行一共設定的流程變數

/** 查詢歷史流程變數 */
    @Test
    public void findHistoryProcessVariables() {
        String processInstanceId = "2101";
        List<HistoricVariableInstance> list = processEngine.getHistoryService()//
                .createHistoricVariableInstanceQuery()// 建立一個歷史的流程變數查詢物件
                .processInstanceId(processInstanceId)//
                .list();
        if (list != null && list.size() > 0) {
            for (HistoricVariableInstance hvi : list) {
                System.out.println(hvi.getId() + "   " + hvi.getProcessInstanceId() + "   " + hvi.getVariableName()
                        + "   " + hvi.getVariableTypeName() + "    " + hvi.getValue());
                System.out.println("###############################################");
            }
        }
    }

五、總結

由於資料庫中儲存著歷史資訊以及正在執行的流程例項資訊,在實際專案中對已完成任務的檢視頻率遠不及對代辦和可接任務的檢視,所以在activiti採用分開管理,把正在執行的交給RuntimeService、TaskService管理,而歷史資料交給HistoryService來管理。
這樣做的好處在於,加快流程執行的速度,因為正在執行的流程的表中資料不會很大。

演示demo原始碼下載:http://download.csdn.net/detail/xunzaosiyecao/9623532

本文部分內容整理自itcast講義,在此表示感謝。
作者:jiankunking 出處:http://blog.csdn.net/jiankunking

相關文章