论坛首页 Java企业应用论坛

在生产流程应用activiti流程引擎多实例

浏览 6506 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2014-07-08  
项目介绍:项目主要是关于项目开发的生产管理流程,大致的流程如下
          开始—>项目立项—>项目经理分配任务—>开发人员完成任务—>结束
1、项目有很多模块,在流程部署的时候是不确定的
2、在项目经理分配任务的时候根据项目模块动态的生成多个实例任务,不同的开发人员会接收到
   不同的任务,所有实例任务完成以后进入流程下一个任务节点(使用的是会签任务实现)。
3、有明显的缺点就是:必须所有实例任务都完成以后才能进行下一步流程任务,这对于生产还是管理
   不符合业务需求。
4、要实现的是:动态的生成多实例,每个实例互相不影响。例如:动态生成n个流程,每个流程互相
   不影响,可以一个流程完成以后向下执行,其他流程等到完成以后继续执行。
5、有什么好的想法和思路可以实现?非常感谢!
   发表时间:2014-07-09  
我觉得这个问题是一个主流程和多个子流程问题,其中所有子流程的都是一样的,不过是不同的人去完成而已,而且只有当所有的子流程完成后 主流程才会继续执行以后的操作。

如果以上描述正确的话,我觉得你可以吧”项目经理分配任务-->开发人员完成任务“拆分出来作为一个单独的子流程。

当项目立项后,项目尽力可以创建N个任务,并且分配给不同人完成,这个时候就有(N+1)个流程产生,这样的话N个子流程完全是独立的,就符合你所说的实例间不相互影响。

至于如何确定主流程在分配完任务后是否继续执行,这个我觉得可以通过设置变量来确定。你可以再项目经理分配任务的时候创建一个变量,然后再所有任务完成后将这个变量修改为另外一个值,仅当这个值为true时候才让他继续执行,否则一直阻塞。

至于你提到的一个问题就是 根据模块指派给不同人完成,这个其实在流程里面我觉得是没有必要体现出来的,你可以通过一个数据库表的映射关系来管理 某个模块给到某几个人完成。 这样的话就会非常灵活。

我觉得你可能吧数据和流程联系得太紧密了,其实你完全可以吧数据相关的独立出来做成可配置的,而流程 最好只是管理我们的流向。希望能帮助到你。
0 请登录后投票
   发表时间:2014-07-10  
并行分支,每个节点不必等到其它节点任务完成就可以产生下一个流转动作

在汇聚点中嵌入一个判断脚本...
0 请登录后投票
   发表时间:2014-07-10  
在项目经理分配任务出创建并行节点,每一条线最终在end处汇聚。然后动态创建并行节点。
0 请登录后投票
   发表时间:2014-07-10  
感谢你回复,我不明白你所指的并行分支是在流程定义的时候确定的还是在流程执行过程
项目经理根据模块的数量动态的生成的?
0 请登录后投票
   发表时间:2014-07-10  
回复:“ieanwfg201”,感谢你的回复
可能是我对activiti的理解不到位,我重新讲一下业务场景、流程。
项目经理分配开发任务、开发人员—>开发人员进行开发—>项目经理分配代码审查任务、审查人员—>代码审查人员进行审查—> 项目经理分配测试人员—>测试人员进行测试
1、假设开发模块是A、B、C、D,开发人员:d1、d2、d3、d4、d5、d6,代码审查人员:     
   c1、c2、c3、c4、c5 ,测试人员:t1、t2、t3 在流程定义的时候都是不确定的,需
   要流程动态生成
2、假设:模块A开发人员:d1、d2 审查人员:c1、c2
         模块B、C开发人员:d3 审查人员:c3、c4
         模块D开发人员:d4、d5、d6 审查人员:c5
         测试人员:t1、t2、t3,模块以及人员的分配
   都是在项目经理各个分配节点动态指定,等待所有的模块完成以后统一进行测试。
3、要求每个人员都可以接收到任务,并且各模块之间生产流程在测试之前是互不
   影响的。
4、我理解的业务是:把整个项目开发过程先按照横向切分,然后根据横向内容进行
   纵向的流程执行,最后在把横向统一了以后进行流程。
5、想过用动态多实例子流程来实现,缺点是每个动态子流程里面的任务节点之间
   互相影响。
6、再次感谢你们。有什么建议?
  

0 请登录后投票
   发表时间:2014-07-14  
我没有使用过动态多实例流程,但是如果真有这个的话,其实你完全通过如下的方法来实现各个实例的相互独立。就按照你的假设来说:
模块  开发人员      审查人员
A    d1,d2        c1,c2
B,C  d3           c3,c4
D    d4,d5,d6     c5

那么实际上对于任何一个任务来说,无论他属于哪一个模块(多个模块的你可以再次拆分成单个模块),他们实际上都是经历相同额流程,只不过是不同的模块对应的开发和测试人员不一样而已。那么基于这个流程,我们完全可以做出这样一个映射:模块-开发人员-审查人员。这样的映射完成后,对于流程图而言,在开发人员和审查人员节点上,我们完全可以通过一个公用的组或者角色代替这个节点的操作人或者指派人什么的,至于这个组或者角色实际的执行人是谁,我们可以再数据库中做一个映射,映射关系就是找到这个组以及这个模块对应的人员。这样的话,你说到的子流程的人员相互影响的问题就不存在了。不知道我理解的是否有问题。

另外,关于动态多实例问题,我没有实际操作过,所以也给不了建议,不过我非常肯定的是,这个是肯定可以做的,即便activiti没有提供相关的流程图实现,大不了你可以完全隔离开,采用暴力手段直接使用代码级别的修改数据库参数来实现。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics