2017.2.21 activiti實戰--第十三章--流量數據查詢與跟蹤(一)查詢接口介紹及運行時數據查詢


學習資料:《Activiti實戰》

 

第十三章 流量數據查詢與跟蹤

本章講解運行時與歷史數據的查詢方法。主要包含三種:標准查詢,Native查詢,CustomSql查詢。

 

13.1 Query API

Activiti的查詢API分為:

1 標准查詢
  以Java對象的方式,創建一個指定類型的Query對象,然后鏈式編程查詢。
  缺點:不支持復雜的查詢。
2 Nativit查詢
  采用標准SQL的方式查詢,因此支持復雜的查詢。
  缺點:僅支持部分對象的查詢。

 

(1)Query接口與NativeQuery

Query接口:

1 (I)Query<...>
2       asc()                    T
3       desc()                   T
4       count()                  long
5       singleResult()           U
6       list()                   List<U>
7       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接口的子接口:

 1 UserQuery
 2 GroupQuery
 3 
 4 JobQuery
 5 ProcessDefinitionQuery
 6 DeploymentQuery
 7 ModelQuery
 8 TaskQuery
 9 ExecutionQuery
10 ProcessInstanceQuery
11 
12 HistroricProcessInstanceQuery
13 HistroricTaskInstanceQuery
14 HistroricActivityInstanceQuery
15 HistroricDetailQuery
16 HistroricVariableInstanceQuery

 

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

 1 UserQuery  2 GroupQuery  3 
 4 JobQuery  5 ProcessDefinitionQuery  6 DeploymentQuery  7 ModelQuery  8 NativeTaskQuery
 9 NativeExecutionQuery
10 NativeProcessInstanceQuery
11 
12 NativeHistroricProcessInstanceQuery
13 NativeHistroricTaskInstanceQuery
14 NativeHistroricActivityInstanceQuery
15 HistroricDetailQuery 16 HistroricVariableInstanceQuery

 

(2)使用xxxService創建查詢

運行時與歷史數據涉及到的Service有:RuntimeService,TaskService,HistoryService。

這里以TaskService為例:

1 (I)TaskService
2    createTaskQuery()             TaskQuery
3    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是有的。

1 List<Task> tasks = taskService.createNativeTaskQuery()
2                    .sql("SELECT * FROM ACT_RU_TASK T WHERE T.NAME_ = #{taskName}" ) //此處的表明也可通過managementService.getTableName(Task.Class)獲得
3                    .parameter("taskName","人事審批")
4                    .listPage();//使用list()則不分頁

 

如果不需要分頁,采用標准查詢也可以完成task的查詢功能。

如果要條件查詢,只需要修改sql語句,把 = 換做 like 即可。

 

(2)查詢參與的流程

需求:查詢已經辦理過的流程,以及跟蹤流程的辦理情況。

使用標准查詢:

1 //第9章時已經介紹過ProcessInstance與Execution的關系為一對多
2 List<ProcessInstance> processInstanceList = runtimeService.createProcessInstanceQuery().list();
3 
4 List<Execution> executionList = runtimeService.createExecutionQuery().list();

 

但是ProcessInstanceQuery與ExecutionQuery均沒有提供"查詢某個用戶相關的流程"這個接口。所以這時需要用到Native查詢。

native查詢的用法前面已經講過。sql語句如下:

1 --用於native查詢的sql語句
2 SELECT RES.* FROM ACT_RU_EXECUTION RES 
3 LEFT JOIN ACT_HI_TASKINST ART 
4 ON ART.PROC_INST_ID_ = RES.PROC_INST_ID_ 
5 WHERE ART.ASSIGNEE_ = #{userId} 
6 AND ACT_ID_ IS NOT NULL 
7 AND IS_ACTIVE_ = 'TRUE' 
8 ORDER BY START_TIME_ DESC

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM