zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    hdu 2203
    hdu 3081
    hdu 4240 最大流量路径
    b_vj_Fiber Network(floyd思想+状态压缩)
    b_vj_Corn Fields(预处理行的状态、合法状态+枚举当前行与上一行的状态)
    b_vj_Hackers' Crackdown(预处理所有集合+检查合法集合后进行状态转移)
    b_vj_Count Color(线段树+二进制表示颜色)
    b_vj_K-th Number(二分+线段树)
    b_lg_火烧赤壁(讨论完全覆盖/部分覆盖)
    b_hdu_Ping pong(树状数组+乘法原理)
  • 原文地址:https://www.cnblogs.com/lyh421/p/6474392.html
Copyright © 2011-2022 走看看