博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Activiti用户任务分配
阅读量:5925 次
发布时间:2019-06-19

本文共 2075 字,大约阅读时间需要 6 分钟。

hot3.png

一、前言

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

 

二、需求分析

    一般公司的组织结构:

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

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

 

三、配置文件

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

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

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系统流程指定受理人目录业务接口

 

 *  linhy

 

 *

 

 */

public interface FmsLdapService {

        /**

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

         *  employee

         

         */

        public List<String> findDeptLeaders(String employee);

 

        /**

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

         *  employee

         

         */

        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

你可能感兴趣的文章
IE不能直接顯示PDF的原因分析和解決方法
查看>>
Windows Phone 7 系统主题颜色RGB和Hex值
查看>>
网站分析系统
查看>>
Python应用02 Python服务器进化
查看>>
表格高亮
查看>>
在web网页中正确使用图片格式
查看>>
耳机没有声音
查看>>
解决PKIX:unable to find valid certification path to requested target 的问题
查看>>
一站式解决,Android 拍照 图库的各种问题
查看>>
Redis整合Spring结合使用缓存实例
查看>>
MySQL存储过程相互调用
查看>>
libcurl实现解析(3) - libcurl对select的使用
查看>>
作为Java程序员应该掌握的10项技能
查看>>
编辑器领域正发生变革?从面试看 Visual Studio Code 的崛起
查看>>
微软正式发布Azure Functions 2.0
查看>>
免去架构算法调优,如何让你的系统风驰电掣?|图说
查看>>
你被大数据“杀熟”过吗?怎么解决的?丨Q言Q语
查看>>
上海女白领吃火锅碰瓷,支付宝口碑居然真的要赔?
查看>>
HUAWEI nova 青春版闪速快充,让追剧不再断电
查看>>
OPPO R9凭创新赢得2000万销量,成2016年热销手机
查看>>