可能你在苦恼这个问题,由于在跟踪已结束流程的时候须要获取流程办理中设置的变量值(能够分析每一个节点办理的详细状态),今天咱们就来探索一下如何实现。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()); }