您的位置:首页 > 其它

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

2017-02-27 15:27 204 查看
学习资料:《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.TaskACT_RU_TASK
**.runtime.JobACT_RU_JOB
**.runtime.ExecutionACT_RU_EXECUTION
**.runtime.ProcessInstanceACT_RU_EXECUTION
**.repository.ProcessDefinitionACT_RE_PROCDEF
**.repository.DeploymentACT_RE_DEPLOYMENT
**.history.HistoricProcessInstanceACT_HI_PROCINST
**.history.HistoricActivityInstanceACT_HI_ACTINST
**.history.HistoricDetailACT_HI_DETAIL
**.history.HistoricVariableUpdateACT_HI_DETAIL
**.history.HistoricFormPropertyACT_HI_DETAIL
**.history.HistoricTaskInstanceACT_HI_TASKINST
**.history.HistoricVariableInstanceACT_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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: