动态工作流的设计

最近在做动态工作流的东西,感觉有不少心得体会,拿出来和大家交流一下。

我们做动态工作流,主要是为了支持OA的加签、会签和动态的跳转。

1概述

(1)会签对应着动态的增加参与者:

 

如上图中,活动A本来有参与者001,但是001觉得他一个人来做这个审批不完全够,因此,他可能要求002也加入到审批活动A中。

 


(2)加签对应着动态增加节点


在活动A时,流程管理者或活动A的参与者觉得审批的内容特殊或重大,必须让某些人来了解并审批,所以需要动态的增加一个活动。目前,我们只是实现了中间的一种加签的方式。

 

 

 




(3)活动动态跳转


跳转的应用场景主要有:回退和跳过一些活动。

比如:下面活动的领导,可能觉得上面办事人所做的工作不合适,需要重做,就会要求流程回退到上面的节点;可能某参与者出差无法审批,需要跳过这一层的审批,也需要动态的跳转。

 

 

2设计思路

动态流程只是在特殊情况下运行的,所以不能把它直接加入到流程定义中(如果经常需要增加某个节点,就不是每次都动态增加,而应该重新设计新的流程模版了)。基于这个考虑,必须把流程定义和动态流程定义分开存储,而在runtime时做动态的merge。

我们可以理解以往获取流程定义的时候,我们只需要提供流程定义的id就可以了,而加入了动态流程定义之后,我们就必须提供流程定义的id和流程实例的id(因为动态流程是对应于特定的流程实例的)。这样我们就可以在返回流程定义的时候做一些手脚了,如果特定的流程实例没有相关的动态流程定义,我们直接返回原始的流程定义,而发现了动态流程定,则需要做merge。这里的做法是获取原流程的副本,按照动态流程的类型,做必要的合并,返回合并后的流程定义。这样就完全可以屏蔽动态流程对工作流引擎的影响。

还有一个没有解决的问题,什么时候不再加载动态流程。这个问题再跳转的时候最为明显,我们让流程回退的时候,如果每次查找流程定义的时候都会加载动态流程,那么流程就会进入死循环(不断的进入下个节点之后再回退)。为了解决这个问题,在定义动态流程的时候必须定义最大执行次数和已执行的次数,每次转移在转移或活动结束的时候,更新已执行的次数,当达到最大执行次数的时候,就不再加载动态流程。

当然还有很多细节问题,在这就不多说了,希望对同行们有一些帮助。

http://ipointer.cnblogs.com/archive/2006/03/22/355700.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值