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