activiti 表結構講解

可能你在苦惱這個問題,由於在跟蹤已結束流程的時候須要獲取流程辦理中設置的變量值(能夠分析每一個節點辦理的詳細狀態),今天咱們就來探索一下如何實現。 html

1.Activiti表結構設計

Activiti的表結構設計分爲兩種類型:運行時(ACT_RU)、歷史(ACT_HI)。 spring

1.1 運行時變量

全部運行時的變量都保存在表:ACT_RU_VARIABLE中,這些變量能夠在啓動流程、完成任務、動態添加的方式插入到數據庫,以便流程在處理中能夠根據變量的值決定流程的走向。 數據庫

1.2 歷史變量呢?

爲何沒有ACT_HI_VARIABLE這張表呢? 性能

我在開始的時候也是苦惱爲何沒有這張表,致使在跟蹤歷史流程信息的時候不能獲取變量。 ui

2.瞭解歷史級別

Activit默認提供了4中歷史級別: spa

  • none: 不保存任何歷史記錄,能夠提升系統性能; 設計

  • activity:保存全部的流程實例、任務、活動信息; orm

  • audit:也是Activiti的默認級別,保存全部的流程實例、任務、活動、表單屬性; htm

  • full: 最完整的歷史記錄,除了包含audit級別的信息以外還能保存詳細,例如:流程變量。 ci

對於幾種級別根據對功能的要求選擇,若是須要往後跟蹤詳細能夠開啓full

3.配置歷史級別

3.1 在XML中配置

在引擎BeanprocessEngineConfiguration中配置:

?
1
2
3
<beanid="processEngineConfiguration"class="org.activiti.spring.SpringProcessEngineConfiguration">
    <propertyname="history"value="full">
</property></bean>

3.2 動態配置

?
1
2
3
4
ProcessEngine processEngine = ProcessEngineConfiguration
  .createProcessEngineConfigurationFromResourceDefault()
  .setHistory(ProcessEngineConfiguration.HISTORY_FULL)
  .buildProcessEngine();

4.讀取歷史變量

如今再重啓你的應用,啓動流程或者在任務complete以後查看ACT_HI_DETAIL表的數據已經記錄了。

開始full歷史級別後保存的歷史信息

4.1 Java代碼-5.10版本以前

?
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>

4.2 Java代碼-5.11版本以後

5.11版本在變量保存方面作了變更,單首創建了一張表ACT_HI_VARINST保存變量,能夠經過下面的代碼讀取變量。參見:Activiti 5.11發佈

5.11添加的表ACT_HI_VARINST

?
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>

5.只讀取表單字段

?
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>
相關文章
相關標籤/搜索