让Activiti记录变量历史信息
2015-09-15 10:31
537 查看
可能你在苦恼这个问题,因为在跟踪已结束流程的时候需要获取流程办理中设置的变量值(可以分析每个节点办理的详细状态),今天我们就来探索一下如何实现。
我在开始的时候也是苦恼为什么没有这张表,导致在跟踪历史流程信息的时候不能获取变量。
none: 不保存任何历史记录,可以提高系统性能;
activity:保存所有的流程实例、任务、活动信息;
audit:也是Activiti的默认级别,保存所有的流程实例、任务、活动、表单属性;
full: 最完整的历史记录,除了包含audit级别的信息之外还能保存详细,例如:流程变量。
对于几种级别根据对功能的要求选择,如果需要日后跟踪详细可以开启full。
1.Activiti表结构设计
Activiti的表结构设计分为两种类型:运行时(ACT_RU)、历史(ACT_HI)。1.1 运行时变量
所有运行时的变量都保存在表:ACT_RU_VARIABLE中,这些变量可以在启动流程、完成任务、动态添加的方式插入到数据库,以便流程在处理中可以根据变量的值决定流程的走向。1.2 历史变量呢?
为什么没有ACT_HI_VARIABLE这张表呢?我在开始的时候也是苦恼为什么没有这张表,导致在跟踪历史流程信息的时候不能获取变量。
2.了解历史级别
Activit默认提供了4中历史级别:none: 不保存任何历史记录,可以提高系统性能;
activity:保存所有的流程实例、任务、活动信息;
audit:也是Activiti的默认级别,保存所有的流程实例、任务、活动、表单属性;
full: 最完整的历史记录,除了包含audit级别的信息之外还能保存详细,例如:流程变量。
对于几种级别根据对功能的要求选择,如果需要日后跟踪详细可以开启full。
3.配置历史级别
3.1 在XML中配置
在引擎BeanprocessEngineConfiguration中配置:<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration"> <property name="history" value="full"> </property></bean>
3.2 动态配置
ProcessEngine processEngine = ProcessEngineConfiguration .createProcessEngineConfigurationFromResourceDefault() .setHistory("full") .buildProcessEngine();
4.读取历史变量
现在再重启你的应用,启动流程或者在任务complete之后查看ACT_HI_DETAIL表的数据已经记录了。4.1 Java代码-5.10版本之前
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()); }
4.2 Java代码-5.11版本之后
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()); }
5.只读取表单字段
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()); }
相关文章推荐
- 利用ScrollView滑动属性实现点击查看更多
- OpenCV/source/sample/cpp的学习
- vim 快捷键总结
- c/c++中delete/free 指针后,设置p=NULL的好处
- STL容器vector
- 实战使用Axure设计App,使用WebStorm开发(5) – 实现页面功能
- 利用ScrollView滑动属性实现点击查看更多
- HTML5 CSS3 精美案例 : 达到VCD盒个性幻灯片
- 27.Remove Element(Array)
- 阿里服务器配置swap
- o怎么样racle输入dmp数据库文件
- 稻盛和夫:人该如何合理地与欲望共度一生
- JS实现仿FLASH效果的竖排导航代码
- iOS 禁止横屏
- WinIO3.0在win7 64位系统下的使用
- word转pdf还有什么好的方法
- c#正则替换之Regex.Escape
- webservice
- 51nod 1429:巧克力
- 二十岁出头的时候上,你一无所有,你拥有一切。