ipointer

给我最爱的宝宝
随笔 - 47, 文章 - 0, 评论 - 230, 引用 - 1
数据加载中……

高级工作流模式深入业务场景分析(1)——多路合并

开篇之作

(1) 描述

两条或更多的分支合并到单一的一条后续路径中,每一条使能进入分支都激活后续路径的一次执行线程。虽然多条分支在图形上是合并的,但是这个多路合并并不对这些分支激活的后续线程进行任何的同步。

(2) 抽象模型描述

多路合并的Flash动画

clip_image002

上图中,B和C是多路选择后的分支,这样的分支可以超过两个,假设还有E、F……,这样的分支在多路选择处不进行同步,每一个分支都会激活一次D的执行,即D(B)、D(C)、D(E)……,并且这些D的线程互不干扰。

(3) 业务场景举例

clip_image004

报销流程,假设分为三部分:住宿费、交通费、飞机票特殊报销。可能出现的情况有:住宿费+交通费;住宿费+交通费+飞机票特殊报销;交通费;交通费+飞机票特殊报销……

流程开始,首先填写报销申请(勾选报销的内容,三种费用中选择),之后流程根据勾选的内容激活后续的填写不同报销单的分支,最后每一张报销单都需要经过审批。

如果流程引擎没有实现多路合并我们可以变相的实现上面的功能。如下图:

clip_image006

但上述的实现有以下的不足:

a、 重复工作量,审批分明是同一个活动,非要分多个来画;

b、 无法进行统计,若要对审批这一活动的时间、数量等信息进行统计分析,那么分成了多个活动后就难于进行统计。

c、 资源的分配,假设审批是由一个岗位来负责,且任务压力应该在这个岗位上负载均衡,那么分成了多个活动后这个资源的分配也无从着手。

(4) 含义引申

多路合并的后续路径,是一些相同行为的执行线程,这就类似于另外一种模式——多实例模式。这些线程终有一个需要同步的时候,在业务场景中,这个同步就非常的复杂,如后续步骤为制证,这种业务可以分为以下情况,我们一一举例说明:

a、 强制一对一:一个审批后的单据生成一个财务凭证,那么这些多实例的线程暂时不同步,留到后续步骤。这种管理方式是比较常见的。

clip_image008

b、 强制多对一:同一个报销申请产生的报销单据,需要生成在一个财务凭证上。因此在制证前就需要同步。这种管理方式是比较常见的。

clip_image010

c、 任意多对多:在本场景中,这个不太可能发生,但在一般的物流业务中却非常常见。假设飞机票的审批比较严格,拖得时间比较长,另外两个报销单早批了,那么先将这两个生成同一个财务凭证。这种任意性的规则,一般都是通过人来判断的。

clip_image012

posted on 2008-03-24 16:59 栖息的熊 阅读(1750) 评论(25)  编辑 收藏

评论

#1楼    回复  引用  查看    

期待博主下文,能否结合wf做些实例
2008-03-24 17:26 | 生鱼片      

#2楼 [楼主]   回复  引用  查看    

@生鱼片
我们开发组原则上是一周讨论一次,以上都是工作流开发组和业务组进行头脑风暴之后的总结。
微软的WF我不是很熟,但以我现在对微软WF的认识,它好像是做不了任何的一个高级工作流模式。
2008-03-24 17:36 | 栖息的熊      

#3楼    回复  引用  查看    

很好得描述
2008-03-24 17:40 | Tony Zhou      

#4楼 [楼主]   回复  引用  查看    

@Tony Zhou
谢谢,之前看胡长城总结的工作流模式,大多是翻译的内容,业务场景举例很少,特别是这个多路合并,基本没有讲清楚。
2008-03-24 17:44 | 栖息的熊      

#5楼    回复  引用  查看    

@栖息的熊
我现在用lotus做workflow,而且我们的流程比较复杂,我现在自己刚刚看WF,对它也不是很了解,所以想听听博主的讲解,不知道你们是用什么开发的,什么样的才算是高级工作流呢 ?
2008-03-24 17:53 | 生鱼片      

#6楼 [楼主]   回复  引用  查看    

@生鱼片
能接触到lotus真是好呀。
我们不是做项目的,是做开发平台的,工作流引擎是自己开发的,整个产品类似于K2、UAP、EAS、极致和思维加速吧。
我现在讲的是工作流模式,说到模式也就是业界总结的工作流规律。高级工作流模式是相对简单工作流模式(串行、并行、同步、排他选择和简单合并)来说的,工作流本身不存在什么高级不高级的,呵呵。
2008-03-24 18:02 | 栖息的熊      

#7楼    回复  引用  查看    

@栖息的熊
不同意使用高级,复杂更为合适。
何况你这个也只是activity分枝,压根就谈不上复杂。还有条件分枝。m*n才算是复杂工作流。
2008-03-24 18:34 | nfa2dfa      

#8楼 [楼主]   回复  引用  查看    

@nfa2dfa
这个不是我说了算的,而是有业界的约定俗成,你可以参看http://www.workflowpatterns.com/,这个老外的网站非常的牛。
这位兄弟估计也没有细看我的文章,如果只是条件分支,我也不息的来扯了。
2008-03-24 18:47 | 栖息的熊      

#9楼    回复  引用  查看    

@栖息的熊
看来是的。http://www.workflowpatterns.com/也挺有意思
狡辩一句:"业界的约定俗成"恐怕未必。
我意思是活动分枝和条件分支同时存在。
2008-03-24 19:21 | nfa2dfa      

#10楼    回复  引用  查看    

@栖息的熊
WF 要实现博主这些东西是可行的,不过WF毕竟不是一个工作流解决方案
WF只提供工作流最最基本的东西所以如果拿WF 和现成的工作流解决方案比就有些过分了

所以有些园只里很多人要WF 的完整应用的列子现在几乎也没几个
包括ms自己也没放出什么太好的;

因为WF 这东西想做一个像样点的东西前面的铺垫需要的太多了;毕竟它提供的东西太基础不过了。

比如楼主这种,估计做成死的也得好几天。
2008-03-24 19:31 | 曲滨*銘龘鶽      

#11楼    回复  引用  查看    

期待后文~~
2008-03-24 19:44 | 勇仔      

#12楼    回复  引用  查看    

这么巧?我们team也在开发工作流引擎

楼主说的这些是复杂或是高级我有点不认同,像条件选择,并行任务都是最基本的功能,在企业内部的会签就是典型的应用。少了这个这么说的上是工作流呢。

2008-03-24 19:58 | Shinn      

#13楼 [楼主]   回复  引用  查看    

@Shinn
1、这位兄弟不要太见怪,正如我上面的回复,这里的“高级”并不是只这种模式有多么的高深,而只是一种划分,在常见的20种工作流模式中,“多路合并”的分类就是属于高级流转模式,这点上我并不是为了有个“噱头”的标题。
2、根据工作流产品所面向的行业不同,在设计时采用的结构就有所不同,我们面向的主要是物流、生产这样的流程,流程的规范性较好,我们采用的结构对于实现这个流程就比较自然;而对于OA的流程我们也是支持的,实现的方式就比较变扭,这个可以参见 http://search.sipo.gov.cn/sipo/zljs/hyjs-yx-new.jsp?recid=CN200710015728.1&leixin=fmzl&title=一种在办公自动化中基于规则约束的自适应流程方法&ipc=G06Q10/00(2006.01)I ,我们也不是采用这种模式来实现的。
3、还有这位兄弟说会签是这种场景,我们也做过不少OA的项目,并不认为会签是这种“多路合并”的模式,请这位兄弟开篇博文,我本人也非常的期待兄弟的精彩大作。
2008-03-24 21:10 | 栖息的熊      

#14楼 [楼主]   回复  引用  查看    

@曲滨*銘龘鶽
1、同意兄弟的评论,本人虽然对WF没有很深入的了解,但对Biztalk却相对的熟一些,了解微软做事的风格,他永远是只能做最通用的东西,说白了就是拿个图形化的工具来写程序,因此没有不能实现的,不过就是过程繁杂。拿一个类似WF这样的产品来提供给直接客户或者是我们的实施,对他们的要求就太高了。因此真正工作流产品必须实现各种模式来抽取常见的业务场景,简化定制的过程,提高定制的效率。
2、如果兄弟对WF很熟,希望能与兄弟多多交流。微软逼着我们在WF的基础上封装我们的产品,我们也迫于高层的压力,必须这么做。我们也想成为第二个K2,但K2是ISV的待遇,我们只是战略合作伙伴,我们得到的技术支持远远还达不到产品化的程度,所以在痛苦的挣扎中。
2008-03-24 21:23 | 栖息的熊      

#15楼    回复  引用  查看    

首先向楼主道歉,因为我在仅看了图片而没有看内容就匆忙回复了

并错误的将图示看成了并行节点。楼主说的这种情况确实较少见。我们这里也是在中途遇到才解决的。当时的情况是一个list中有多条记录待审核,可以选择性先审批一部分,或驳回一部分。

惭愧,刚看到楼主有回才细看了一下楼主文章。实在抱歉。。。。



2008-03-24 21:56 | Shinn      

#16楼    回复  引用  查看    

@栖息的熊
今天还在调一个复杂的流程,一般涉及到财务的,需要从分公司签到总公司的都比较麻烦,在加上有些人身兼多职的,不过觉得lotus对这方面支持的比较好,有句话说lotus的精髓就是做传签流程系统的开发,不过现在看wf,不知道它好在哪里。
2008-03-24 22:14 | 生鱼片      

#17楼 [楼主]   回复  引用  查看    

@Shinn
兄弟言重了,多多交流。我看兄弟的博客是空的,什么时候也写写,也让我们学习学习。
2008-03-25 08:48 | 栖息的熊      

#18楼 [楼主]   回复  引用  查看    

@生鱼片
1、lotus有没有可以用来学习的版本,部署的话麻不麻烦,我们也想尽可能多看各家的产品,开拓我们的思路。
2、WF正如前面一位兄弟所说,是编程框架,与工作流产品来相比是有失公允的。它之所以放在.Net Framework中,就是这个道理。但是经过一定的封装,应该可以达到一般工作流产品的程度,而且用发展的眼光看,微软会持续的发展这个引擎,所以基于这个引擎上封装的工作流产品的生命力就有很大的保障。
2008-03-25 08:56 | 栖息的熊      

#19楼    回复  引用  查看    

@栖息的熊
1.ibm的官方网站下个试用版就可以的,部署baidu可以找到,不过光有domino还不行,还有工作流产品。
2.wf确实只是提供了底层的流程引擎,但是因为lotus是基于文档型的数据库,而且天生对workflow支持的就好,wf我了解的太少,不知道优势在哪里。
2008-03-25 09:14 | 生鱼片      

#20楼    回复  引用  查看    

http://www.cnblogs.com/kellynic/archive/2008/03/25/1121753.html

看下这个吧
2008-03-25 19:40 | nicye      

#21楼    回复  引用  查看    

@栖息的熊
开发完了通知我啊,如果不错我让采购一套。
2008-03-25 21:48 | 曲滨*銘龘鶽      

#22楼 [楼主]   回复  引用  查看    

@曲滨*銘龘鶽
我们第三个版本已经发了,http://www2.ccw.com.cn/07/0717/a/0717a05_5.html,现在5.0也开发完了(中国人忌讳4,所以直接跳过,这个版本工作流变化不大,还说不上一个BPM产品,主要是框架和自定义单据的变化)。最近一个阶段是6.0的需求阶段,准备做一个真正意义上的BPM产品。如果要采购记得俺的关系哟,介绍人是可以提成的,哈哈。
2008-03-25 23:15 | 栖息的熊      

#23楼    回复  引用  查看    

同感!~我现在是做生产这方面的...和lz主的流程差不多!~弄得痛苦的死了.开始的需求没做好.现在项目一再加时!~...痛苦死啦 不过没想到我写的这个居然算高级工作流!~到现在为止我一直想知道工作流是啥玩意!~一直让我头痛!~
2008-03-26 01:11 | 小武舞      

#24楼 [楼主]   回复  引用  查看    

@小武舞
做项目的话,我觉得用微软的WF就挺不错的,在那个上面实现,估计你在细节上就可以省不少心。
2008-03-26 08:43 | 栖息的熊      

#25楼    回复  引用  查看    

--引用--------------------------------------------------
栖息的熊: @小武舞
做项目的话,我觉得用微软的WF就挺不错的,在那个上面实现,估计你在细节上就可以省不少心。
--------------------------------------------------------
呵呵.我项目开始时..WF还没出!~...我的业务流程,设计到流程的反扣行为!~!~
2008-03-26 11:45 | 小武舞      

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
 
另存  打印