当前位置: 首页 > news >正文

Activiti用户任务分配

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

一、前言

    上篇博文《浅谈Activiti工作流引擎用户管理》中已介绍了如何自定义自己的用户管理模块。然而困恼大多数新手的另一个问题:如何将任务分配给有层级关系的组织结构用户呢?例如,我只想把任务分配给我上级部门的领导审批,而上级部门的任务又只分配给指定的上级审批。而按Activiti的用户(user)、组(group)来平级关系来操作的话,则需要设计多个组、多个配置来实现,这显然不合适。

 

二、需求分析
    一般公司的组织结构:

wKioL1VpLlmD6kjqAAFemghThW0275.jpg

    再看看我项目中的部分审批流程截图:

wKioL1VpL1eyeWXWAAG2axuyYxk089.jpg

    所以,我申请人的申请当然是给我上级部门领导审批,别的领导无权审批。而部门经理审批完后要相对应的上级中心领导来审批。就是这种层级关系。

 

三、配置文件

    用过activiti的都知道,流程定义的配置文件为.bpmn,在eclipse中可以视图或xml格式打开。上面已经看了流程图,那下面则看看其xml中是如何配置的:

wKiom1VpNdeD2IBDAAvS3MrKMwM605.jpg

    首先,我用的是动态表单配置,而每个节点允许签收任务的用户分配如上图红色框。

1、activiti:initiator属性:把启动流程实例的操作人以变量名称“applyUserId”保存到数据库中。

2、activiti:candidateUsers属性:此节点允许签收任务的用户。

例:<userTask id="theTask" name="my task" activiti:candidateUsers="kermit, gonzo" />

3、activiti:candidateGroups属性:此节点允许签收任务的组。

例:<userTask id="theTask" name="my task" activiti:candidateGroups="management, accountancy" />

4、activiti:assignee属性:此节点指定用户签收任务。

例:<userTask id="theTask" name="my task" activiti:assignee="kermit" />

 

 

    大家应该注意到了,我的配置文件中,不是确定某个人或某个组而是个表达式。没错,关键点就在于此,应为用了spring,所以可以用service表达式来动态指定谁能签收此节点任务。若没用spring的话,解决办法还是有的,可以在此节点上设置监听器啊,监听此任务是谁申请的来判断受理人。

    so,废话不多说。看看表达式中我所调用的方法吧:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

/**

 

 * fms系统流程指定受理人目录业务接口

 

 * @author linhy

 

 *

 

 */

public interface FmsLdapService {

        /**

         * 根据启动用户查询出其部门领导集合

         * @param employee

         * @return

         */

        public List<String> findDeptLeaders(String employee);

 

        /**

         * 根据启动用户查询运营操作者集合

         * @param employee

         * @return

         */

        public List<String> findOperators(String employee);

 

        /**

         * 根据启动用户查询总监领导集合

         * @param employee

         * @return

         */

        public List<String> findLeaders(String employee);

 

        /**

         * 根据启动用户查找财务集合

         * @param employee

         * @return

         */

        public List<String> findFinances(String employee);

 

        /**

         * 根据启动用户查找出纳集合

         * @param employee

         * @return

         */

        public List<String> findCashiers(String employee);

}

    看接口,大家应该知道什么意思吧,我根据启动实例流程的人,然后通过自己的用户管理系统去查找符合要求的受理任务者。要注意的是,这些方法查找出来的返回值必须是String或List<String>。

    恩,这样就解决了如何去指定有层级组织结构的任务分配问题。无需去多配置,多分组。完全可用自己的用户管理系统组织架构去动态查找。这就是activiti的动态表单最大的特点,灵活。

 

四、结语

    两篇文章,介绍了下自己对于Activiti工作流引擎,用户和任务分配模块的见解。并不是很深入,也不是很严谨,只是纯粹的分享与交流。接下去将还会陆续写些关于Activiti工作流引擎的使用心得,感谢阅读,本文若有不足之处,还望谅解指正。

    分享是种快乐,坚持是种精神!

转载于:https://my.oschina.net/zhanggc/blog/1624239

相关文章:

  • 2 使用unitest 模块扩展功能测试
  • 免费学习coursera的课程的操作办法
  • SylixOS Lite版本中断优先级设置
  • 小程序的iphoneX判断
  • 还在担心机器人?人工智能目前水平还不如初中生
  • linux多网卡绑定聚合-Bond详细完整版
  • HDU_1237_简单计算器
  • Docker基础技术:DeviceMapper
  • Docker社区版中Kubernetes开发
  • 云栖科技评论第38期:亚马逊推出时尚智能助手Echo Look
  • hadoop生态系统学习之路(十)MR将结果输出到hbase
  • Python入门篇(二)
  • 我为什么突然想转管理?
  • Eclipse Open J9:Eclipse OMR项目提供的开源JVM
  • MySQL优化Explain命令简介(一)
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • go语言学习初探(一)
  • jquery cookie
  • leetcode46 Permutation 排列组合
  • magento 货币换算
  • React-生命周期杂记
  • Ruby 2.x 源代码分析:扩展 概述
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • SpiderData 2019年2月23日 DApp数据排行榜
  • 安装python包到指定虚拟环境
  • 大整数乘法-表格法
  • ​520就是要宠粉,你的心头书我买单
  • ​人工智能书单(数学基础篇)
  • # 达梦数据库知识点
  • (windows2012共享文件夹和防火墙设置
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (三)Honghu Cloud云架构一定时调度平台
  • (转)iOS字体
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)母版页和相对路径
  • (转载)(官方)UE4--图像编程----着色器开发
  • .NET 动态调用WebService + WSE + UsernameToken
  • .net 生成二级域名
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .net6Api后台+uniapp导出Excel
  • @Autowired多个相同类型bean装配问题
  • @SuppressWarnings注解
  • [ CTF ]【天格】战队WriteUp- 2022年第三届“网鼎杯”网络安全大赛(青龙组)
  • [.net]官方水晶报表的使用以演示下载
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory
  • [2023-年度总结]凡是过往,皆为序章
  • [android] 天气app布局练习
  • [Android]一个简单使用Handler做Timer的例子
  • [AutoSar]BSW_OS 02 Autosar OS_STACK
  • [BZOJ3211]:花神游历各国(小清新线段树)
  • [C++] 如何使用Visual Studio 2022 + QT6创建桌面应用
  • [C++]类和对象(中)
  • [EFI]MSI GF63 Thin 9SCXR电脑 Hackintosh 黑苹果efi引导文件