资讯专栏INFORMATION COLUMN

activiti需要用户信息吗?

feng409 / 2647人阅读

摘要:但是在后面的使用过程中发现完全可以在没有用户信息的情况下运行,我们可以指派表中根本不存在的用户或组给一个,然后使用查询这个。经过观察后发现,的,,信息只是以字符串形式保存在和表中,更进一步证实了我的想法。

在刚接触流程引擎Activiti的时候误以为必须得使用它所提供的用户管理,而一般来说在业务系统里本身就自带了一套用户管理,于是就去寻找同步用户数据到Activiti的ACT_ID_*表中方法,找到了这篇文章。

但是在后面的使用过程中发现Activiti完全可以在没有用户信息的情况下运行,我们可以指派ACT_ID_*表中根本不存在的用户或组给一个Task,然后使用TaskService查询这个Task。可以看Activiti论坛的这个回答。

经过观察后发现,Task的Assignee,Candidate Users,Candidate Groups信息只是以字符串形式保存在act_ru_takACT_RU_IDENTITYLINK表中,更进一步证实了我的想法。

不过事情有一些例外,Activiti实际上在查询Task的时候,在某些情况下还是使用了ACT_ID_*表中的数据,下面总结了出来。

taskCandidateOrAssigned
taskService.createTaskQuery().taskCandidateOrAssigned(userId);

当使用taskCandidateOrAssigned做查询条件时,Activiti会按照以下规则查找Task:

Assignee匹配

或者*.bpmn中定义的Candidate Users 匹配

或者Candidate Group 匹配(用户所属用户组的信息从Activiti的ACT_ID_*表获取)

可以从以下SQL看出它查找的逻辑:

select distinct RES.* from ACT_RU_TASK RES
left join ACT_RU_IDENTITYLINK I on I.TASK_ID_ = RES.ID_
WHERE (
  RES.ASSIGNEE_ = ?
  or (
    RES.ASSIGNEE_ is null
    and (
      I.USER_ID_ = ?
      or
      I.GROUP_ID_ IN (
        select g.GROUP_ID_ from ACT_ID_MEMBERSHIP g where g.USER_ID_ = ?
      )
    )
  )
)
taskAssignee
taskService.createTaskQuery().taskAssignee(userId);

当使用taskAssignee做查询条件时,Activiti会按照以下规则查找Task:

Assignee匹配。可以从以下SQL看出它查找的逻辑:

select distinct RES.* from ACT_RU_TASK RES WHERE RES.ASSIGNEE_ = ?

taskCandidateGroup
taskService.createTaskQuery().taskCandidateGroup(userId);

当使用taskCandidateGroup做查询条件时,Activiti会按照以下规则查找Task:

*.bpmn中定义的Candidate Groups匹配。可以从以下SQL看出它查找的逻辑:

select distinct RES.* from ACT_RU_TASK RES
inner join ACT_RU_IDENTITYLINK I on I.TASK_ID_ = RES.ID_
WHERE RES.ASSIGNEE_ is null
and I.TYPE_ = "candidate"
and ( I.GROUP_ID_ IN ( ? ) )

taskCandidateUser
taskService.createTaskQuery().taskCandidateUser(userId);

当使用taskCandidateUser做查询条件时,Activiti会按照以下规则查找Task:

先查找用户所属的组(用户所属用户组的信息从Activiti的ACT_ID_*表获取)

select g.* from ACT_ID_GROUP g, ACT_ID_MEMBERSHIP membership
where g.ID_ = membership.GROUP_ID_
and membership.USER_ID_ = ?

如果找到了用户组信息,那么

*.bpmn中定义的Candidate Users 匹配

或者Candidate Group 匹配(用户所属用户组的信息从Activiti的ACT_ID_*表获取)

select distinct RES.* from ACT_RU_TASK RES
inner join ACT_RU_IDENTITYLINK I on I.TASK_ID_ = RES.ID_
WHERE RES.ASSIGNEE_ is null
and I.TYPE_ = "candidate"
and ( I.USER_ID_ = ? or I.GROUP_ID_ IN ( ? , ? ) )

如果找不到用户所属的组,那么和*.bpmn中定义的Candidate Users 匹配

select distinct RES.* from ACT_RU_TASK RES
inner join ACT_RU_IDENTITYLINK I on I.TASK_ID_ = RES.ID_
WHERE RES.ASSIGNEE_ is null
and I.TYPE_ = "candidate"
and ( I.USER_ID_ = ? )

taskCandidateGroupIn
taskService.createTaskQuery().taskCandidateGroupIn(groups);

当使用taskOwner做查询条件时,Activiti会按照以下规则查找Task:

*.bpmn中定义的Candidate Groups匹配(匹配一个就行)。可以从以下SQL看出它查找的逻辑:

select distinct RES.* from ACT_RU_TASK RES
inner join ACT_RU_IDENTITYLINK I on I.TASK_ID_ = RES.ID_
WHERE RES.ASSIGNEE_ is null
and I.TYPE_ = "candidate"
and ( I.GROUP_ID_ IN ( ? , ? ) )

taskOwner
taskService.createTaskQuery().taskOwner(userId);

当使用taskOwner做查询条件时,Activiti会按照以下规则查找Task:

*.bpmn中定义的owner匹配。可以从以下SQL看出它查找的逻辑:

select distinct RES.* from ACT_RU_TASK RES
WHERE RES.OWNER_ = ?

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/64918.html

相关文章

  • 01.Android之基础组件问题

    摘要:此时再次旋转屏幕时,该不会被系统杀死和重建,只会调用。因此可通过和来判断是否被重建,并取出数据进行恢复。但需要注意的是,在取出数据时一定要先判断是否为空。只有在进程不被掉,正常情况下才会执行方法。 目录介绍 1.0.0.1 说下Activity的生命周期?屏幕旋转时生命周期?异常条件会调用什么方法? 1.0.0.2 后台的Activity被系统回收怎么办?说一下onSaveInsta...

    iamyoung001 评论0 收藏0
  • 分类整理我在SF上针对某些问题作的回答

    摘要:是什么意思是类型,意图是通过数字获取对应的类如果,返回的就是如果,返回的就是当拿到类后,通过调用该类的无参数构造器,创建并返回该类的一个实例,等价于。 Android 资源Resource与布局Layout android:怎么实现一个控件与另一个指定控件左对齐 针对你这种情况,最简单的一种办法是,设置两个TextView的宽度为固定值,且相等。LinearLayout是一种线性排列的...

    paulquei 评论0 收藏0
  • 1688跨境专供(阿里巴巴1688批发网是真的?)

    阿里巴巴1688批发网是真的吗?阿里巴巴1688批发网是真的。1688.com就是阿里巴巴中国站(alibaba.com.cn)启用的新域名。1.1688将定位于网上采购批发大市场帮助工厂、品牌商、一级批发商引进大量的买家,包括十万级的淘宝网店掌柜、百万级的线下城市实体店主、千万级的现有批发市场买家,提供一系列交易工具,打造全球最大的批发大市场。2.1688以批发和采购业务为核心,通过专业化运营,...

    不知名网友 评论0 收藏1126
  • Android Q 开发者最常见问题

    摘要:安装与测试的流程也是用了的机制而不会受到影响。其他提供自定义类加载器的公有,是不是意味着对于热修复或者插件化将有官方的支持我们按照开发者的反馈,将部分合理的常用非接口以新的取代。而热修复或者插件化皆违反政策,是不容许的。showImg(https://user-gold-cdn.xitu.io/2019/5/17/16ac450a4b6e13b5); Device ID Q: 预装应用可以获...

    FuisonDesign 评论0 收藏0
  • 【详细】Android入门到放弃篇-YES OR NO-》各种UI组件,布局管理器,单元Activi

    摘要:文件下的为根标签,属性和为指定了的命名空间,表示各种标准属性能在文件中使用和为标准的应用包名。元素下包含组件声明,包含四大组件。暂停状态失去焦点,但对用户可见,如弹窗。非活动状态被销毁,即退出应用。 问:达叔,你放弃了吗? 答:不,放弃是不可能的,丢了Android,你会心疼吗?如果别人把你丢掉,你是痛苦呢?还是痛苦呢?~ 引导语 有人说,爱上一个人是痛苦的,有人说,喜欢一个人是幸福的。...

    QiShare 评论0 收藏0

发表评论

0条评论

feng409

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<