近两年随着电子商务环境不断演进(例如阿里巴巴的B2B电子商务平台),从原来支持企业内部单系统的业务流程、到企业内部应用、服务的集成,再进一步向企业与合作伙伴之间业务交互,工作流正扮演着越来越重要的角色。
到底什么是工作流呢,笔者拿一个图来说明,如下图所示:
图1 工作流管理系统结构图
图1是工作流管理系统的一个基本组成结构,由流程建模工具、外部应用接口、任务管理工具、流程监控工具、组织建模工具、界面定义工具(电子表单工具)和内部核心引擎组成。
2、 工作流相关规范
Ø WFMC工作流管理联盟
工作流管理联盟在1993 年成立之后,颁布了一系列工作流管理系统相关标准和技术规范,包括工作流术语表[4]、工作流参考模型[5]、工作流管理系统各部分间协作的五个接口规格[6-9]、工作流产品的互操作性标准[10]等。其中接口一早期的标准为WPDL(Workflow Process Definition Language),后来这一接口的规范变更为XPDL(XML Process Definition Language)。XPDL是至今工作流领域最为重要的一个标准,目前大多数工作流引擎是依据该标准设计开发的。
Ø BPMI业务流程管理促进会
BPMI(Business Process Management Initiative,业务流程管理促进会)一直在积极推动BPM的标准化。它的目标是使各种类型以及不同行业的公司都可以跨越Internet、透过防火墙开发与操作涉及多个业务伙伴和应用的业务流程,通过建立流程设计、部署、执行、管理和优化的相关标准来促进BPM的发展。BPMI.org制定了许多开放标准,如业务流程建模语言(BPML-Business Process Modeling Language)[12]、业务流程查询语言(BPQL-Business Process Query Language)、业务流程建模标注(BPMN-Business Process Modeling Notation)[13]等。BPMI和WfMC在 2002 年 6 月 26 日 宣布将合作制定业务流程和工作流标准,即采用BPML来描述工作流过程,同时采用XPDL所定义的工作流模型。
Ø BPEL业务流程执行语言
2002 年8月9日 ,Microsoft、 BEA、 IBM、 SAP & Siebel联合提交发布了BPEL规范。 2003年4月BPEL规范提交给了OASIS(Organization for the Advancement of Structured Information Standards,结构化信息标准促进组织)更名为WSBPEL(Web Services Business Process Execution Language)规范[16], Sun Microsystems和甲骨文公司也相继加入了OASIS组织。此规范描述如何处理输入的消息,它不是一个关于业务流程规格化定义的规范。简单的说,可以将它看作XML形式的编程语言,提供将WSDL-Services组合成控制流的能力。此规范实际上BPM的规范,关于Workflow和BPM的区别笔者会在后续的文章中讲到。
除了上述三个主要的规范以外还有,OMG、WSCI、WSFL等规范,在此就不在赘述。
3、 工作流参考模型及解析
图2 WFMC工作流参考模型
图2是工作流管理联盟提出的工作流管理系统参考模型,包括5个接口和1个核心引擎,其中各个接口的具体含义如下:
Ø 接口1:工作流定义接口,为用户提供一种可视化的,可以对实际业务进行建模的工具,并生成业务过程的可被计算机处理的形式化描述。此接口的规范有WPDL、XPDL、BPEL(BPM定义规范)大多数的工作流产品都实现了此接口。
Ø 接口2:工作流客户应用接口,它给用户提供一种手段,以处理流程运行过程中需要人工干预的任务(实际上就是工作项workitem)。工作流管理系统负责维护这个工作项列表。
Ø 接口3:工作流调用应用接口,工作流引擎调用外部业务应用的规范,例如在流程执行的过程中去调用业务系统提供的接口处理业务数据等。此接口各个工作流产品实现的不尽相同,它和具体的工作流产品的实现语言和架构相关,例如本公司工作流产品就可以支持对javabean的调用,对webservice的调用(通过webservice技术可以调用任何异构的,不同语言实现的业务应用),对xml bean的事件调用,对spring bean的调用等。
Ø 接口4:工作流引擎协作接口,是不同的工作流引擎之间进行协作的接口规范,此接口WFMC定义的不是很详细,不同厂商的工作流引擎直接进行协作也存在大量的困难,因此实现此接口规范的工作流引擎产品也极少。
Ø 接口5:管理监控接口,其功能是对工作流管理系统中所有实例的状态进行监控与管理,如组织机构管理、实例监控管理、统计分析管理、资源控制等。
工作流引擎:它是工作流管理系统的核心,工作流引擎对使用工作流模型描述的过程进行初始化、调度和监控过程中每个活动的执行,在需要人工介入的场合完成计算机应用软件与操作人员的交互。另外它的另外一个重要的功能是完成与应用软件及操作人员的交互。
4、 工作流引擎内部对象
图3 工作流引擎实例关系图
图3是工作流引擎的内部实例对象关系图,一个流程实例(InstProcess)由一个流程实例变量(InstProcessVariable)、1…*个活动实例(InstActivity)、1…*个转移实例(InstTransition)组成,而一个活动实例包括一个活动实例变量(InstActivityVariable)和1…*个工作项实例(Workitem)组成。
5、 工作流之控制模式
工作流控制模式是由[W.M.P. van der Aalst]、A.H.M. ter Hofstede、Bartosz Kiepuszewski、A. P. Barros等人于2000年提出的一个概念。他们一共总结了21种工作流模式。包括:顺序(sequence)、并行分裂(Parallel Split))、同步(Synchronization)、排它选择(Exclusive Choice) 、简单合并(Simple Merge) 、多路选择(Multiple Choice)、多路合并(Multiple Merge)、路径鉴别器(Discriminator)、M中选N合并(N-out-of-M Join)、同步合并(Synchronising Join)、任意循环(Arbitrary Cycles)、绝对终止(Implicit Termination)、多实例(设计时已知实例数目)、多实例(运行时才知实例数目)、多实例(无预知)、多实例(要求同步的多实例)、延期选择(Deferred Choice)、交叉路由(Interleaved Routing)、里程碑(Milestone)、取消任务(Cancel Activity)、取消流程(Cancel Case)。以上就是著名的工作流21种模式。详细的参考资料参见:http://www.workflowpatterns.com/patterns/control/index.php
6、 工作流之资源模式
工作流资源包括参与实体资源、外部应用资源
参与者实体模式,包括直接分配(Direct Allocation)、基于角色/组分配(Role-Based/Group-Based Allocation)、基于岗位分配(Position-Based Allocation)、延期分配/动态分配(Deferred Allocation/Dynamic Allocation)、基于规则分配(Rule-Based Allocation)、基于能力的分配(Capability-Based Allocation)、基于组织关系分配(Organisational Allocation)、基于历史分配(History-Based Allocation)、轮转法分配(Round Robin Allocation)、竞争分配(Competitive Allocation)、委派(Delegation)、跳跃(Skip)、重做(Redo)
直接分配模式:在工作流设计期,直接为某个活动节点指定具体的用户为参与者;
基于角色/组分配模式:在工作流设计期,直接为某个活动节点指定某个角色或组为参与者;
基于岗位分配模式:在工作流设计期,为某个活动分配一个具体的岗位;
延期/动态分配模式:在运行期动态的分配某个参与实体给某个活动节点;
基于规则的分配模式:在设计期或运行期,根据某个具体的规则来决定某个活动节点的参与者,此规则可以由规则引擎(例如DRools)来运算,也可以由xpath来查询,或者有某个具体的运算逻辑(在活动节点调用业务应用,例如javabean来实现);
基于能力的分配模式:要求某个活动的参与者实体必须具备特定的条件;
基于组织关系分配:基于当前参与者的职位以及与其它组织资源的关系(例如请假流程中,程序员请假会自动路由给项目经理,项目经理请假会路由给部门经理,然后依次给根据行政关系自动分配参与者);
基于历史分配模式:当前活动节点的参与者为前续某个已经执行过的活动节点的参与者,此模式在电子政务的审批流程中经常会用到,例如某个工作项由秘书办理后发给领导,然后又从领导处返回个秘书;
轮转法分配模式:在运行期按照轮转法进行分配,轮转法大家应该在负载均衡的解决方案中经常看到;
竞争分配模式:活动节点的参与者有多个人,多个人共同竞争此活动,某个人竟得此活动后,其他的参与者不能再竞争;
另外还有委派、跳跃、重做等模式,上面给出了最常用的参与者模式。
对于资源模式参见:http://www.workflowpatterns.com/patterns/resource/index.php
通过上面4和5的分析,我们可以给出工作流流程的概念:工作流流程就是由多个活动节点(Activity) 通过工作流控制模式(例如顺序、并行分裂、排它选择、多路选择、多路合并等)连接起来形成一个有序且连续的流程。而引擎为每个活动节点按照各种参与者实体 模式(例如直接分配,基于角色、组、岗位的分配,基于组织关系的分配模式等)分配具体的参与者。为了使读者能对流程一个直观的认识,笔者给出一个典型的流 程图,如下所示: