论坛首页 Java企业应用论坛

关于Activiti或JBPM流程的回退讨论1

浏览 15488 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-12-30  

 

需求:
         流程的回退是一个复杂的计算,特别是在中国式的流程里,现实中的流程则相对简单,如我把一个审批文件提交出去后,若由两个人(张三、李四)同时处理,若张三或李四需要把文件退回来,文件直接打回到发起人我这里,这样张三或李四手上不再存在审批文件,但对于JBPM或Activiti的流程回退则做不到这么简单。
但原则上我们要符合这种现实的要求:流程由谁提交过来,则退回给谁。

为了弄清这个关系,我们以一个稍为复杂一点Activiti流程为例。

 


以上流程包括了多种流程节点,如分支,并行节点,多实例任务,子流程。完成,我们记录其完成的每个一步,然后归纳其回退的算法实现。其中,A为多实例任务,我们在后台指定了其两个执行用户,我们启动流程,然后记录每一步执行的情况。

 

 

流程产生后,产生任务如:

 

 

 

当A的两个实例任务完成后,将会产生后续的任务,即产生B、C、E任务,在这三任务中,若回退的话,均是回退至A,并且是由A原来的执行人员来处理。由于A是多实例任务,其执行的任务个数为动态,若当时执行数为2(并且为张三、李四)两人处理,则回退后,也是回到这两个人那里处理。如下所示:

 

而另外,E回退时,也需要B、C的任务删除(在某种情况下也可能不删除),现实中相当于我把任务完成后,同时提交给三个人去处理,其中一个人回退,不能把另一个任务的工作也回退回来处理。

在B点上回退,C需要销毁,E也存在的话,也不合理,因为在A再往下执行时,又会重新产生B、C、E,因此,为了减少复杂度,需要全部删除B、C、E,回退至A。

当E往下执行时,会产生F或G任务,在这里我们设置条件让他产生F任务,如:

 


若F回退,则应该产生E任务,B、C则正常运行,继续往下执行后,将会产生I任务,再者是J任务。若在I任务回退,则应该回退至F。
同理,若B与C执行完成后,将会产生D。若我们记录任务的产生顺序,将比较容易实现任务的回退,由于jbpm4或activiti5均不记录这种操作,所以要实现回退均比较困难。

在此我们用一个有效的数据结构记录所有的任务产生的顺序,如下所示:

 

 

有了这样的一个数据结构,记录了每个任务节点的产生顺序,我们在任何一个节点上,都能有效回退至上一任务节点,并且包括自由跳转的方式,如在I节点,若我们回退至E,就把F节点从这个记录顺序中去掉,然后产生E任务出来。

这里还有一些问题尚没有得到有效解决:

1.如D任务回退时,应该产生B与C任务的还是仅需要产生其中一个,系统中是提供人工选择的方式给他还是自动产生其中一个?

2.F回退至E时,要不要也产生B、C任务?

3.任务回退时,需要找回原来的执行人

4.这个任务堆栈执行记录在什么时候往里放数据,即产生这个执行树

 

 

  • 大小: 124.4 KB
  • 大小: 123.1 KB
  • 大小: 121.9 KB
  • 大小: 69 KB
  • 大小: 71.7 KB
  • 大小: 72.7 KB
   发表时间:2012-05-09  
兄弟你做了吗?拿出来大家分享分享啊,呵呵
0 请登录后投票
   发表时间:2012-05-09  
这个已经做了,完整的代码不能拿出来分享,不过可以讲解思路,任务的追回都实现了,呵
0 请登录后投票
   发表时间:2012-05-09  
man1900 写道
这个已经做了,完整的代码不能拿出来分享,不过可以讲解思路,任务的追回都实现了,呵

不知道工作流为何物,弱弱的问下,诸如这类问题用有向图描述静态关系用栈保存执行过程能否解决?
0 请登录后投票
   发表时间:2012-06-15  
你的流程设计器是基于什么设计的?自己公司开发的,还是自己研究的?可否一起探讨下。我写一个是基于vml的不跨浏览器
0 请登录后投票
   发表时间:2012-06-16  
JBPM或Activiti 的流程图设计只适合开发人,对普通用户及其不友好,十字叉图元对用户来说,是不必要的,
还没有visio画的图直观。
0 请登录后投票
   发表时间:2012-06-19  
我觉得流程的回退应该有流程本身解决.
0 请登录后投票
   发表时间:2012-06-27  
lwlnuligongzuo 写道
我觉得流程的回退应该有流程本身解决.

想法是好的,现在可能吗。。
0 请登录后投票
   发表时间:2012-06-28  
流程引擎本身应该是要解决这些问题的,可惜做不到,所以只好扩展来实现了。
0 请登录后投票
   发表时间:2012-06-28   最后修改:2012-07-24
尔今尔后 写道
你的流程设计器是基于什么设计的?自己公司开发的,还是自己研究的?可否一起探讨下。我写一个是基于vml的不跨浏览器

基于ibm ilog elixr 开发,效果不错的
可以在线浏览:

电信:http://office.jee-soft.cn:10080/bpm3/login.jsp
网通:http://oa.jee-soft.cn:10080/bpm3/login.jsp
账号:csx
密码:1

流程管理下的流程定义--》在线流程定义功能
0 请登录后投票
论坛首页 Java企业应用版

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