Activiti待办事项查询VIEW

根据用户ID,查询该用户的待办事项,包括前一环节直接指定的情况,包括定义流程时定义的处理人的情况,包括根据角色或者组确定该用户可以处理的情况。

经过分析Activiti的数据库表,我们发现并不复杂,和待办事项有关系的表,包括ACT_RU_TASK、ACT_RU_IDENTITYLINK,ACT_RU_TASK中存储了任务相关信息,ACT_RU_IDENTITYLINK中存储了候选组和候选人信息。

在Activiti中,对于一个节点,可分为受托人,候选人和候选组三种情况,后两种可以设置多个,用逗号分隔,对应到数据库中,会被拆分为ACT_RU_IDENTITYLINK的多条记录。

基于以上,使用以下sql可查询获得所有待办事项:

SELECT A.ID_ AS TASK_ID,

       A.PROC_INST_ID_ PROC_INST_ID,

       A.TASK_DEF_KEY_ AS ACT_ID,

扫描二维码关注公众号,回复: 750100 查看本文章

       A.NAME_ AS ACT_NAME,

       A.ASSIGNEE_ AS ASSIGNEE,

       A.DELEGATION_ AS DELEGATION_ID,

       A.DESCRIPTION_ AS DESCRIPTION,

A.CREATE_TIME_ AS CREATE_TIME,

A.DUE_DATE_ AS DUE_DATE,

       -- date_format(A.CREATE_TIME_, 'YYYY-MM-DD HH24:MI:SS') AS CREATE_TIME,

       -- date_format(A.DUE_DATE_,'YYYY-MM-DD HH24:MI:SS') AS DUE_DATE,

       I.USER_ID AS CANDIDATE 

  FROM ACT_RU_TASK A

  LEFT JOIN (SELECT DISTINCT * FROM 

(SELECT I.TASK_ID_, I.USER_ID_ as USER_ID

                    FROM ACT_RU_IDENTITYLINK I, ACT_RU_TASK T

                      WHERE TASK_ID_ IS NOT NULL

                        AND USER_ID_ IS NOT NULL

                        AND I.TASK_ID_ = T.ID_

                        AND T.ASSIGNEE_ IS NULL

                        AND TYPE_ = 'candidate'

                     UNION

                     SELECT TASK_ID_, R.USER_ID_ as USER_ID

                       FROM ACT_RU_IDENTITYLINK I,act_id_membership R,ACT_RU_TASK T

                      WHERE I.TASK_ID_ IS NOT NULL

                        AND I.GROUP_ID_ IS NOT NULL

                        AND I.TASK_ID_ = T.ID_

                        AND T.ASSIGNEE_ IS NULL

                        AND I.TYPE_ = 'candidate'

                        AND I.GROUP_ID_ = R.GROUP_ID_)U) I  -- 候选组和业务上的角色用户表关联

    ON A.ID_ = I.TASK_ID_

根据以上sql,直接定义为视图也好,或者将查询数据放入某张表中已好,之后查询某用户的待办事项时,就可查询,比如定义为视图view_todotask;

    SELECT FROM  view_todotask WHERE ASSIGNEE = :userId OR CANDIDATE = :userId

该查询可获得任务的相关信息,比如流程实例,任务实例等。

猜你喜欢

转载自jiage17.iteye.com/blog/2249614