学习资料:《Activiti实战》

第十三章 流量数据查询与跟踪

本章讲解运行时与历史数据的查询方法。主要包含三种:标准查询,Native查询,CustomSql查询。

13.1 Query API

Activiti的查询API分为:

1 标准查询
以Java对象的方式,创建一个指定类型的Query对象,然后链式编程查询。
缺点:不支持复杂的查询。
2 Nativit查询
采用标准SQL的方式查询,因此支持复杂的查询。
缺点:仅支持部分对象的查询。

(1)Query接口与NativeQuery

Query接口:

 (I)Query<...>
asc() T
desc() T
count() long
singleResult() U
list() List<U>
listPage(int,int) List<U>

NativeQuery接口(可以看到与Query无区别):

1 (I)NativeQuery<...>
2 asc() T
3 desc() T
4 count() long
5 singleResult() U
6 list() List<U>
7 listPage(int,int) List<U>

Query接口的子接口:

 UserQuery
GroupQuery JobQuery
ProcessDefinitionQuery
DeploymentQuery
ModelQuery
TaskQuery
ExecutionQuery
ProcessInstanceQuery HistroricProcessInstanceQuery
HistroricTaskInstanceQuery
HistroricActivityInstanceQuery
HistroricDetailQuery
HistroricVariableInstanceQuery

NativeQuery接口的子接口(正如前面所说,NativeQuery只支持部分流程对象):

 1 UserQuery
2 GroupQuery 4 JobQuery
5 ProcessDefinitionQuery
6 DeploymentQuery
7 ModelQuery
NativeTaskQuery
NativeExecutionQuery
NativeProcessInstanceQuery NativeHistroricProcessInstanceQuery
NativeHistroricTaskInstanceQuery
NativeHistroricActivityInstanceQuery
15 HistroricDetailQuery
16 HistroricVariableInstanceQuery

(2)使用xxxService创建查询

运行时与历史数据涉及到的Service有:RuntimeService,TaskService,HistoryService。

这里以TaskService为例:

 (I)TaskService
createTaskQuery() TaskQuery
createNativeTaskQuery() NativeTaskQuery

13.2 运行时数据查询

运行时涉及到的Service是:RuntimeService,TaskService。

(1)流程对象对应的数据库表

Activiti提供了通过流程对象获取对应表名的接口,比如:

1 String tableName = managementService.getTableName(Task.Class)
//此时返回的tableName = "ACT_RU_TASK"

下面列出流程对象对应的数据库表名。

类名 表名
**.task.Task ACT_RU_TASK
**.runtime.Job ACT_RU_JOB
**.runtime.Execution ACT_RU_EXECUTION
**.runtime.ProcessInstance ACT_RU_EXECUTION
**.repository.ProcessDefinition ACT_RE_PROCDEF
**.repository.Deployment ACT_RE_DEPLOYMENT
**.history.HistoricProcessInstance ACT_HI_PROCINST
**.history.HistoricActivityInstance ACT_HI_ACTINST
**.history.HistoricDetail ACT_HI_DETAIL
**.history.HistoricVariableUpdate ACT_HI_DETAIL
**.history.HistoricFormProperty ACT_HI_DETAIL
**.history.HistoricTaskInstance ACT_HI_TASKINST
**.history.HistoricVariableInstance ACT_HI_VARINST

(2)任务查询

任务查询的时候,一般都需要满足分页查询的要求。所以标准查询无法做到,采用Native查询。从前面的接口介绍中可以看出,NativeTaskQuery是有的。

 List<Task> tasks = taskService.createNativeTaskQuery()
.sql("SELECT * FROM ACT_RU_TASK T WHERE T.NAME_ = #{taskName}" ) //此处的表明也可通过managementService.getTableName(Task.Class)获得
.parameter("taskName","人事审批")
.listPage();//使用list()则不分页

如果不需要分页,采用标准查询也可以完成task的查询功能。

如果要条件查询,只需要修改sql语句,把 = 换做 like 即可。

(2)查询参与的流程

需求:查询已经办理过的流程,以及跟踪流程的办理情况。

使用标准查询:

 //第9章时已经介绍过ProcessInstance与Execution的关系为一对多
List<ProcessInstance> processInstanceList = runtimeService.createProcessInstanceQuery().list(); List<Execution> executionList = runtimeService.createExecutionQuery().list();

但是ProcessInstanceQuery与ExecutionQuery均没有提供"查询某个用户相关的流程"这个接口。所以这时需要用到Native查询。

native查询的用法前面已经讲过。sql语句如下:

 --用于native查询的sql语句
SELECT RES.* FROM ACT_RU_EXECUTION RES
LEFT JOIN ACT_HI_TASKINST ART
ON ART.PROC_INST_ID_ = RES.PROC_INST_ID_
WHERE ART.ASSIGNEE_ = #{userId}
AND ACT_ID_ IS NOT NULL
AND IS_ACTIVE_ = 'TRUE'
ORDER BY START_TIME_ DESC

2017.2.21 activiti实战--第十三章--流量数据查询与跟踪(一)查询接口介绍及运行时数据查询的更多相关文章

  1. 2017.2.21 activiti实战--第七章--Activiti与spring集成(一)配置文件

    学习资料:<Activiti实战> 第七章 Activiti与容器集成 本章讲解activiti-spring可以做的事情,如何与现有系统集成,包含bean的注入.统一事务管理等. 7.1 ...

  2. 2017.2.28 activiti实战--第七章--Spring容器集成应用实例(五)普通表单

    学习资料:<Activiti实战> 第七章  Spring容器集成应用实例(五)普通表单 第六章中介绍了动态表单.外置表单.这里讲解第三种表单:普通表单. 普通表单的特点: 把表单内容写在 ...

  3. 2017.2.20 activiti实战--第五章--用户与组及部署管理(一)用户与组

    学习资料:<Activiti实战> 第五章 用户与组及部署管理(一)用户与组 内容概览:讲解activiti中内置的一套用户.组的关系,以及如何通过API添加.删除.查询. 5.1 用户与 ...

  4. 2017.2.28 activiti实战--第六章--任务表单(二)外置表单

    学习资料:<Activiti实战> 第六章 任务表单(二)外置表单 6.3 外置表单 考虑到动态表单的缺点(见上节),外置表单使用的更多. 外置表单的特点: 页面的原样显示 字段值的自动填 ...

  5. 2017.2.28 activiti实战--第六章--任务表单(一)动态表单

    学习资料:<Activiti实战> 第六章 任务表单(一)动态表单 内容概览:本章要完成一个OA(协同办公系统)的请假流程的设计,从实用的角度,讲解如何将activiti与业务紧密相连. ...

  6. 2017.2.28 activiti实战--第五章--用户与组及部署管理(三)部署流程及资源读取

    学习资料:<Activiti实战> 第五章 用户与组及部署管理(三)部署流程及资源读取 内容概览:如何利用API读取已经部署的资源,比如读取流程定义的XML文件,或流程对应的图片文件. 以 ...

  7. 2017.2.28 activiti实战--第五章--用户与组及部署管理(二)部署流程资源

    学习资料:<Activiti实战> 第五章 用户与组及部署管理(二)部署流程资源 内容概览:讲解流程资源的读取与部署. 5.2 部署流程资源 5.2.1 流程资源 流程资源常用的有以下几种 ...

  8. 2017.2.22 activiti实战--第六章--任务表单

    学习资料:<Activiti实战> 第六章 任务表单 本章将一步步完成一个协同办公系统(OA)的请假流程的设计,讲解如何将Activiti和实际业务联系起来. 首先讲解动态表单与外置表单的 ...

  9. 2017.2.20 activiti实战--第二章--搭建Activiti开发环境及简单示例(二)简单示例

    学习资料:<Activiti实战> 第一章 搭建Activiti开发环境及简单示例 2.5 简单流程图及其执行过程 (1)leave.bpmn 后缀名必须是bpmn.安装了activiti ...

随机推荐

  1. [oldboy-django][2深入python] orm中auto_now =True, antu_now_add=True的应用

    DateTimeField.auto_now 这个参数的默认值为false,设置为true时,能够在保存该字段时,将其值设置为当前时间,并且每次修改model,都会自动更新.因此这个参数在需要存储“最 ...

  2. arp_ignore和arp_announce内核参数

    arp_announce : INTEGER 对网络接口上本地IP地址发出的ARP报文作出相应级别的限制. 0:本机所有IP地址都向任何一个接口通告ARP报文. 1:尽量仅向该网卡回应与该网段匹配的A ...

  3. 【bzoj3295】[Cqoi2011]动态逆序对 线段树套SBT

    题目描述 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序 ...

  4. 【bzoj3555】[Ctsc2014]企鹅QQ 字符串hash

    题目描述 PenguinQQ是中国最大.最具影响力的SNS(Social Networking Services)网站,以实名制为基础,为用户提供日志.群.即时通讯.相册.集市等丰富强大的互联网功能体 ...

  5. 永琳的竹林迷径(path)

    永琳的竹林迷径(path) 题目描述 竹林可以看作是一个n 个点的树,每个边有一个边长wi,其中有k 个关键点,永琳需要破坏这些关键点才能走出竹林迷径. 然而永琳打算将这k 个点编号记录下来,然后随机 ...

  6. 逆序对(inversion)

    逆序对(inversion) 题目描述 对于序列AA,它的逆序对数定义为满足i<ji<j,且Ai>AjAi>Aj 的数对i,ji,j的个数. 现给你11到nn的一个排列,并按照 ...

  7. 小程序红包开发跳坑记 微信小程序红包接口开发过程中遇到的问题 微信小程序红包开发

    现在做小程序的越来越多,商家推广也是一个瓶颈,谁不发点红包,都很难找到人来用你的微信小程序了.于是不管你开发什么小程序功能,你或多或少都要用到小程序来发红包吧.  我们自己之前做公众号发红包,做了两三 ...

  8. POJ1595 Prime Cuts

    Prime Cuts Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 11961   Accepted: 4553 Descr ...

  9. 完美CSS文档的8个最佳实践

      在css的世界,文档没有被得到充分的利用.由于文档对终端用户不可见,因此它的价值常常被忽视.另外,如果你第一次为css编写文档,可能很难确定哪些内容值得记录,以及如何能够高效完成编写. 然而,为C ...

  10. [LeetCode] Longest Common Prefix 字符串公有前序

    Write a function to find the longest common prefix string amongst an array of strings. Hide Tags Str ...