可能你在苦惱這個問題,由於在跟蹤已結束流程的時候須要獲取流程辦理中設置的變量值(能夠分析每一個節點辦理的詳細狀態),今天咱們就來探索一下如何實現。html
Activiti的表結構設計分爲兩種類型:運行時(ACT_RU)、歷史(ACT_HI)。java
全部運行時的變量都保存在表:ACT_RU_VARIABLE中,這些變量能夠在啓動流程、完成任務、動態添加的方式插入到數據庫,以便流程在處理中能夠根據變量的值決定流程的走向。web
爲何沒有ACT_HI_VARIABLE這張表呢?spring
我在開始的時候也是苦惱爲何沒有這張表,致使在跟蹤歷史流程信息的時候不能獲取變量。數據庫
Activit默認提供了4中歷史級別:性能
none: 不保存任何歷史記錄,能夠提升系統性能;ui
activity:保存全部的流程實例、任務、活動信息;spa
audit:也是Activiti的默認級別,保存全部的流程實例、任務、活動、表單屬性;設計
full: 最完整的歷史記錄,除了包含audit級別的信息以外還能保存詳細,例如:流程變量。code
對於幾種級別根據對功能的要求選擇,若是須要往後跟蹤詳細能夠開啓full。
在引擎BeanprocessEngineConfiguration中配置:
<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration"> <property name="history" value="full"> </property></bean>
ProcessEngine processEngine = ProcessEngineConfiguration .createProcessEngineConfigurationFromResourceDefault() .setHistory("full") .buildProcessEngine();
如今再重啓你的應用,啓動流程或者在任務complete以後查看ACT_HI_DETAIL表的數據已經記錄了。
List<HistoricDetail> list = historyService.createHistoricDetailQuery().processInstanceId(processInstance.getId()).list(); for (HistoricDetail historicDetail : list) { HistoricVariableUpdate variable = (HistoricVariableUpdate) historicDetail; System.out.println("variable: " + variable.getVariableName() + " = " + variable.getValue()); }
5.11版本在變量保存方面作了變更,單首創建了一張表ACT_HI_VARINST保存變量,能夠經過下面的代碼讀取變量。參見:Activiti 5.11發佈
List<HistoricVariableInstance> list = historyService.createHistoricVariableInstanceQuery().processInstanceId(processInstanceId).list(); for (HistoricVariableInstance variable : list) { System.out.println("variable: " + variable.getVariableName() + " = " + variable.getValue()); }
List<HistoricDetail> formProperties = historyService.createHistoricDetailQuery().processInstanceId(processInstance.getId()).formProperties().list(); for (HistoricDetail historicDetail : formProperties) { HistoricFormProperty field = (HistoricFormProperty) historicDetail; System.out.println("field id: " + field.getPropertyId() + ", value: " + field.getPropertyValue()); }