文档章节

让Activiti记录变量历史信息

wangrikui
 wangrikui
发布于 2015/09/15 10:31
字数 643
阅读 601
收藏 3

可能你在苦恼这个问题,因为在跟踪已结束流程的时候需要获取流程办理中设置的变量值(可以分析每个节点办理的详细状态),今天我们就来探索一下如何实现。

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表的数据已经记录了。

开始full历史级别后保存的历史信息

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发布

5.11添加的表ACT_HI_VARINST

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());
}

本文转载自:http://blog.csdn.net/yfqttll/article/details/11952147

wangrikui
粉丝 10
博文 31
码字总数 20614
作品 0
南京
后端工程师
私信 提问
扩展activiti删除ACT_HI_*历史表

本人博客开始迁移,博客整个架构自己搭建及编码 http://www.cookqq.com/listBlog.action activiti自带了很多表,如图: ACTHI*:HI表示历史数据(History)表,包括过期的流程实例,过期的变量和...

cookqq
2013/03/27
0
2
三分钟了解Activity工作流

一、 什么是工作流 以请假为例,现在大多数公司的请假流程是这样的 员工打电话(或网聊)向上级提出请假申请——上级口头同意——上级将请假记录下来——月底将请假记录上交公司——公司将请...

java1990
2015/08/05
0
0
Activiti 工作流学习 (三)

上一篇 Activiti 工作流学习(二) 都是在网上找的一些基本概念,引用的文档比较多比较杂,就不一一列出了。再此表示感谢。 关键对象 1. Deployment:流程部署对象,部署一个流程时创建。 2....

雷斯林
2016/12/10
139
0
activiti开发笔记

actgebytearray 多个对1个 actredeployment 数据库说明: ACTRE* RE 表示 repository . 这个前缀表包含了流程定义 和流程静态资源(图片,规则等等) ACTRU* RU表示 runtime 这些运行时的表,...

之渊
2016/09/21
33
0
Activiti工作流实战-3

数据库(先了解后看) Activiti数据库支持: Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。 ACTRE*: ‘RE’表示...

帅的不像男的
2016/07/01
219
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周五乱弹 —— 要步入《攻壳机动队》的世界了么?

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @ nnnm:说到音乐,这段一直是纯音乐在循环。每次听到久石让的Summer时心上都会莫名的感觉着轻松。《菊次郞的夏天》竟然是北野武的片子,没有...

小小编辑
12分钟前
22
2
C++ STL set::find的用法

参考: http://blog.csdn.net/lihao21/article/details/6302196 /* class for function predicate * - operator() returns whether a person is less than another person */ c......

shzwork
21分钟前
0
0
抽象同步队列AQS——AbstractQueuedSynchronizer锁详解

AQS——锁的底层支持 谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)! 类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资...

须臾之余
今天
3
0
springboot配置百度UEditor 富文本详解

富文本简介 UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码... 准备工作 ueditor需要单独文...

wotrd
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部