在Activiti中如何使用自定义的组织架构


我们知道,activiti是一个不错的流程引擎,它有自身的人员组织架构,但仅限于用户、用户组的管理,流程产生的任务(UserTask),就涉及到任务的所属人(Owner),任务的执行人(assignee),还有任务的候选人、候选用户等。而在中国的流程业务需求里,仅靠这块的人员查找是没有办法满足目前的业务需求的。举个请假流程的例子,其流程如下所示:【说明】:其中上级主管、及所在部门的领导都跟发起人所有的组织架构有关,这种查找算法可以理解为汇报线的查找处理。另外在国内的流程处理方案中,还存在一些如其他业务的人员查找算法。因此,我们一般都是需要使用我们的业务的组织架构来实现流程的处理。要实现流程中的与组织架构有关的整合,我们需要先了解一下目前在哪些业务需求上使用了组织架构的需求,在我们以往的大量实施国内的业务流程的基础上,我们总结有以下几点:任务的执行人员的分配任务的代理任务的通知流程启动的权限而Activiti在流程引擎与组织架构的整合过程中,只有第一项跟组织架构是有关的,其他的方面只需要通过我们自身的扩展表来实现即可。在Activiti中,跟组织架有关的只有以下几个表,我们把它的表结构展示如下:【说明】其中act_ru_task中的owner,assignee为任务的所属人与执行人,而act_ru_identitylink为任务的人员关联表,里面的字段,groupId为用户组Id,userId为用户Id,taskId为关联的任务Id,type为用户参与任务的类型。若我们为了更加简化人员对任务的参与算法,可以不需要act_ru_identitylink表,进而扩展自己的参与表,不过这个表从目前来说是可以满足我们对任务的人员计算需求的。如何通过activiti原生的api来实现人员的授予?首先我们来说授予的时机,activiti的任务产生是在流程的状态跳至某个任务节点时,其会产生一条记录至act_ru_task表中,这时我们需要在其产生的时候,通过流程定义的人员配置属性,结合自身的组织架构及业务查找(如汇报线)计算出参与该任务的人与组,从而把任务分配给这些用户。另外是任务手工进行分配授权。
我们来说第一种,任务产生时进行人员授权activiti提供了任务的创建事件,所以我们可以在它的这个事件上定义一个监听即可,如何配置这个监听,请参考我们另一个文章Activiti的事件机制及其监听处理关于activiti的全局事件定义,我们只需要定义以下任务创建监听器(TaskCreateListener),并且获得任务的实体对象TaskEntity,通过setAssignee及setOwner改变任务的执行人、任务的所属人即可。现在来说另一种:任务产生时进行任务手工分配这种方式就需要通过taskService以下api实现即可流程的节点的人员配置很难提供一组通用的配置规则以实现用户的查找,因为,我们只为节点的人员查找设置config的属性配置,开发用户则根据这些配置实现对应的定义分类,并且实现自己的流程查找方式。流程的配置方式如下所示:我们提供一个总的人员计算分类,以使得我们在流程节点的人员配置中可以显示如下的人员配置分类列表:虽然TaskService有提供按人员的查找任务API,但从我的个人来看,那些是不能满足我们的查找算法的,因此,很有必要自定义查找我的任务列表。查找无非是按Activiti的act_ru_task表来查,若结合了用户对应的用户组,还需要结合act_ru_identitylink来查找。开发云主机域名这块看你的底层的数据库访问的采用是什么ORM框架,在JSAAS中,我们的界面如下,提供按时间、事项名称、状态等来查找我的待办列表,并且分页返回,其界面如下:其查找的自定义Sql如下所示:开源社区试用DEMO,以及资料,请联系QQ:1361783075

相关推荐: 业务相关同步机制

【现象】:竞猜系统规定一个用户每天只可以领取免费筹码一次,并发领取筹开发云主机域名码时发现相同用户重复领取问题【原因分析】:出现重复领取是因为开始没有加线程加锁,在多并发时容易出现重复领取的情况。【解决方案】:在相应动作上加了同步机制,防止了重复的情况出现。相…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 05/06 11:31
下一篇 05/06 11:31