Activiti用户任务分配

一、前言

上篇博文《浅谈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,废话不多说。看看表达式中我所调用的方法吧:

/**

 * 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工作流引擎的使用心得,感谢阅读,本文若有不足之处,还望谅解指正。

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

时间: 2024-08-04 02:40:06

Activiti用户任务分配的相关文章

[转]activiti5用户任务分配

用户任务分配办理人:1.用户任务可以直接分配给一个用户,这可以通过humanPerformer元素定义. humanPerformer定义需要一个 resourceAssignmentExpression来实际定义用户eg: <userTask id='theTask' name='important task' > <humanPerformer> <resourceAssignmentExpression> <formalExpression>kermi

框架 day57 BOS项目练习(流程定义/实例管理,bos用户角色同步activiti用户表组表)

BOS项目笔记第11天 内容: 1.提供新的json文件,修改系统菜单(加入工作流的菜单) 2.流程定义管理(查询.部署流程.查看png流程图片) 3.流程实例管理(查询.查看运行状态) 4.将bos系统中的用户数据和角色数据同步到activiti的用户表和组表 1.    提供新的json文件,修改系统菜单(加入工作流的菜单) 2.    流程定义管理 第一步:创建一个ProcessDefinitionAction,提供list方法,并注入流程引擎对象  查询 @Controller @Sco

Activiti个人任务分配

1.Activiti中个人任务分配            1.1分配任务负责人:                1.1.1 固定分配,每一个任务都是固定的人进行执行                1.1.2 表达式分配:                    UEL表达式,统一表达式语言,在activiti当中支持两种形式,一种是value,另外一种是method形式                1.1.3 创建流程图,给每一个环节制定assignee值,通过UEL表达式分配任务负责人 1.1

浅谈Activiti工作流引擎用户管理

一.前言 近期做了一个简单的财务管理系统,在工作审批模块中运用了工作流引擎.在对比了JBPM与Activiti后,毅然而然决定使用Activiti.本文对Activiti不做过多的介绍,重点在于分析其自身的用户管理模块.刚接触,也只是阐述下自己的个人项目经验.若有不足之处,还望指正. 二.Activiti的用户管理 数据库表: act_id_user表: act_id_group表: act_id_membership表: 从图中可以看出,activiti的用户模块只有用户与组为多对多的关系,仅

分享本书《Activiti实战》和几个工作流的链接

现在搞工作流的,开源的很多都用Activiti,但相关的中文书其实不多,在当当上找到了一本,暂时没下载到pdf盗版,看了目录不错,特别从试读章节了解了历史,所以分享一下. java 工作流开发框架比较 http://blog.csdn.net/chinarenzhou/article/details/7679148 纵观jBPM:从jBPM3到jBPM5以及Activiti5 http://www.infoq.com/cn/articles/rh-jbpm5-activiti5 工作流引擎Act

智能家居系统-软件设计

1 智能家居远程控制系统的软件实现 1.1 基于uC/OS-II的中央控制器的软件设计 1.1.1 uC/OS-II系统移植 本设计使用uC/OS-II操作系统,uC/OS-II是一个源码公开.可移植.可固化.可剪裁和抢占式的实时多任务操作系统,uC/OS-II的大部分源码是用标准ANSI C编写,并且编程规范,可读性很高,内核中只有少量的与硬件相关的代码使用汇编语言编写,总共200余行,移植非常方便[37].uC/OS-II软件体系结构如图5-1所示.移植工作主要包括以下几个方面的内容: 1)

通向高可扩展性之路(谷歌篇)

原文链接:http://highscalability.com/google-architecture 原文写于2008年11月22日,以下是译文: 平台: 1. Linux 2. 很多种语言: Python, Java, C++ 平台上有什么? 一些数据: 1. 2006年时大约有450,000 台廉价商用服务器 2. 2005年的时候谷歌已经索引了80亿网页.现在大概没人知道他们以及索引了多少网页了. 3. 现在谷歌有超过200个GFS集群.一个集群可以有1000甚至5000台机器.成千上万

云计算安全解决方案白皮书(一)

云计算安全解决方案白皮书 Jack zhai 研究云的安全有两三年了,但形成完整的安全思路,还是去年的事,这也是"流安全"思路形成的主要阶段. 云计算的安全问题之所以突出,是因为虚拟机的动态迁移,以及多业务系统交织在一起,这让传统的网卡边界就是安全部署点的方法不在适用.流安全不再关注被保护服务器的物理位置,转而关注访问该服务器的数据流.通过对数据流的重新"路由",保证对数据流的安全清洗,从而实现对服务器的网络保护.在访问控制模型中,有一类流模型,就是针对数据流进行保

[Java][activiti]同步或者重构activiti identify用户数据的方法

同步或者重构Activiti Identify用户数据的多种方案比较 相信每个涉及到用户的系统都有一套用户权限管理平台或者模块,用来维护用户以及在系统内的功能.数据权限,我们使用的Activiti工作流引擎配套设计了包括User.Group的Identify模块,怎么和业务数据同步呢,这个问题是每个新人必问的问题之一,下面介绍几种同步方案,最后总结比较. 如果你在考虑直接使用Activiti引擎的Identify模块作为系统的用户数据管理模块,您真是奇才-开个玩笑 方案一:调用IdentifyS