activiti本身是自带成员以及群组管理的,但是有不少局限。
======
问题一:一般在公司中都会有一套自己的人员系统,这样两者就会并存,产生不少同步的问题。
解决方案:参考了好几种自定义的方案,我决定使用自定义sessionFactory,UserEntityManager的思路。这个方式的优点在于,我可以集成自己的服务进来,不需要同步数据。而且,自己集成服务以后,有更多自由的空间。
问题二:审批需要根据部门信息来。
解决方案:可以在一开始确定候选人的时候,就将人员确定。但是这种我觉得在业务代码中会增加太多筛选逻辑,而本来的角色设定用途就小了。于是我又换了一种方式:在查询个人任务以及派发任务的时候,根据角色来做过滤,只能显示自己允许部门的人的审批。试验下来,有部分比较方便,有部分审批部门信息规则不同的时候,就会很头疼。
问题三:一个任务既想安排个个人又想安排给小组。
解决方案:当一个userTask节点定义好以后,在candidateUser和candidateGroup中都设定变量以后,假如我变量只设置一个,就会运行报错。后来想到,因为我自定义了group服务,所以我将每个用户都作为一个组,为了和普通的小组做区分,加了个前缀 p. 比如用户名 zhangsan。假如选择了zhangsan,我就给candidateGroup赋值,p.zhangsan。当调用到分组查询时,p.zhangsan里有zhangsan这个用户,而zhangsan这个用户,默认会存在一个p.zhangsan 这个组。这样,一个任务就可以灵活分配了。
问题四:职能部门的角色安排
解决方案:当部门多了以后,分配角色是一个很麻烦的事情。于是对于已经能得到比较细致的人员组织架构的时候,可以将组织架构直接转换为角色。思路还是如同问题三。给予特定的组名,比如dp.行政。该方式可以实现功能,但实际还没用上。