工作流系统及技术研究工作系统介绍及设计概念工作流的基本概念WfMC定义:工作流是一类能够完全或者部分自动执行的经营过程,它根据一系列过程规则,文档信息或任务能够在不同的执行者之间传递与执行。工作流是一种反映业务流程的计算机化的模型,实现经营过程集成与经营过程自动化而建立的可由工作流管理系统执行的业务模型基本元素:任务,任务之间的关系工作流的基本特征1:工作流是面向业务过程的技术,这与传统的面向功能的管理技术不同。2:工作流反映了业务过程的自动化,描述的是可由计算机系统支持运行的业务过程。3:工作流根据业务规则将系统中的各种资源相互关联,并协调完成整个业务过程。工作流系统的概念WfMC定义:它是一个软件系统,完成工作流的定义和管理,并按照在计算机中预先定义好的工作流逻辑推进工作流实例的执行。指运行在一个或多个工作流引擎的软件上用于定义、实现和管理工作流运行的一套软件,人机交互,推进工作流实例的执行,并监控其工作状态。工作流管理系统可称为企业的业务操作系统。工作流系统的组成由流程建模工具、外部应用接口、任务管理工具、流程监控工具、组织建模工具、界面定义工具(电子表单工具)和内部核心引擎组成.工作流参考模型及解析上图是工作流管理联盟提出的工作流管理系统参考模型,包括5个接口和1个核心引擎,其中各个接口的具体含义如下:接口1:工作流定义接口,为用户提供一种可视化的,可以对实际业务进行建模的工具,并生成业务过程的可被计算机处理的形式化描述。此接口的规范有WPDL、XPDL、BPEL(BPM定义规范)大多数的工作流产品都实现了此接口。我们这里采用jpbm的流程描述:jpdl,实际上jpbm也支持规范的定义语言bpmn.这里用flex实现流程自定义。接口2:工作流客户应用接口,它给用户提供一种手段,以处理流程运行过程中需要人工干预的任务(实际上就是工作项workitem)。工作流管理系统负责维护这个工作项列表。接口3:工作流调用应用接口,工作流引擎调用外部业务应用的规范,例如在流程执行的过程中去调用业务系统提供的接口处理业务数据等。此接口各个工作流产品实现的不尽相同,它和具体的工作流产品的实现语言和架构相关,系统最好支持对javabean和webservice的调用.对springbean的调用等。接口4:工作流引擎协作接口,是不同的工作流引擎之间进行协作的接口规范,此接口WFMC定义的不是很详细,不同厂商的工作流引擎直接进行协作也存在大量的困难,因此实现此接口规范的工作流引擎产品也极少。接口5:管理监控接口,其功能是对工作流管理系统中所有实例的状态进行监控与管理,如组织机构管理、实例监控管理、统计分析管理、资源控制等。工作流引擎:它是工作流管理系统的核心,工作流引擎对使用工作流模型描述的过程进行初始化、调度和监控过程中每个活动的执行,在需要人工介入的场合完成计算机应用软件与操作人员的交互。另外它的另外一个重要的功能是完成与应用软件及操作人员的交互。工作流之控制模式工作流控制模式是由[W.M.P.vanderAalst]、A.H.M.terHofstede、BartoszKiepuszewski、A.P.Barros等人于2000年提出的一个概念。他们一共总结了21种工作流模式。包括:顺序(sequence)、并行分裂(ParallelSplit))、同步(Synchronization)、排它选择(ExclusiveChoice)、简单合并(SimpleMerge)、多路选择(MultipleChoice)、多路合并(MultipleMerge)、路径鉴别器(Discriminator)、M中选N合并(N-out-of-MJoin)、同步合并(SynchronisingJoin)、任意循环(ArbitraryCycles)、绝对终止(ImplicitTermination)、多实例(设计时已知实例数目)、多实例(运行时才知实例数目)、多实例(无预知)、多实例(要求同步的多实例)、延期选择(DeferredChoice)、交叉路由(InterleavedRouting)、里程碑(Milestone)、取消任务(CancelActivity)、取消流程(CancelCase)。以上就是著名的工作流21种模式1.顺序描述:工作流中的各个活动在同一个进程中按顺序依次执行。案例:“用户付款”后才能进行“发送货物”。Jbpm使用transition实现顺序。2.并行分裂描述:工作流中从一个线程中的一个点拆分为在多个线程中平行执行的多个活动。这些平行的活动之间没有关联,执行没有顺序关系。案例:“用户付款”后激活了“发送货物”以及“通知用户”的执行。Jbpm通过以下两种方式支持并行1:通过fork节点,把一条分支分为多条同时并行的分支2:在相同的任务节点里定义并发任务。3.同步描述:在流程中的某个点,多个并行的子流程或者活动,合并成一个流程。流程必须等待所有的分支都执行完以后,才能激活后续活动,这就是“同步”之意。模式3一般与模式2配合使用。案例:“发送货物”以及“通知用户”两个并行活动执行完毕后,激活“存档”活动。如图:Jbpm通过以下方式支持同步1:多条并行分支通过join节点汇合成一条分支(joinnode)2:如果tasknode节点的任务是同步执行的,那这个节点就是同步任务。4.排他选择描述:当一个活动完成以后,可以有多个分支进行选择,但是只能选择其中的一个分支,即多选一。案例:“下完订单”后,可以选择“银行卡付款”或者“邮局汇款”,只要选择一种方式即可。如图:根据路径表达式进行判断,选择运行路径。Jbpm通过Decision实现排他选择5.简单合并描述:有两个或多个可选择的分支,在某一点处合并成一个分支,但并不是同步合并(与模式2的区别)。与模式4也有点相似,都是“多选一”,但模式4是分散,而模式5是合并。一般采用“先进先出”原则,但是后续活动只产生一次(如果后续活动执行多次产生多实例,就是模式8)。模式5一般与模式4配合使用。案例:无论在何种方式的“付款”之后,进行“发送货物”。Jbpm通过任务节点进行简单合并的6.多路选择描述:当一个活动完成以后,有多个分支进行选择,可以选择其中的一个或者多个分支,即“多选多”(模式4选择是“多选一”模式)。选择的多个分支可能存在并行执行的情况。模式6可以认为是模式4的扩展。案例“发起会签”之后,可以多种选则会签方式,但至少要选择一种。aJpbm没有直接实现多路选择的功能.7.同步合并描述:在流程中的某个聚合点,多个分支路径合并成一个路径。在聚合点,流程会等待所有的分支到来,才能激活后续的活动。这个模式可以选择分支路径,如果只选择一个分支,实现的功能类似于模式5简单聚合模式;如果选择两个及以上的分支,实现的功能类似于模式3同步模式。模式7可以认为是模式5的扩展。模式7一般与模式6配合使用。案例:要等待所有需要会签的活动都结束才进入“会签结束”,忽略不需要会签的活动。Jbpm不支持同步合并8.多路合并描述:在流程中多个分支(可能是模式6多重选择的一个或多个分支;也可能是模式2并行中的多个分支),在合并时每个分支执行完都会激活后面的活动。与模式5简单合并的区别在于:简单合并的分支只有一个可执行并且后续活动只激活一次;而多路合并是多个分支可执行,后续活动激活多次。有的工作流引擎不支持。案例:报销过程中假如分为住宿费、交通费、飞机票特殊报销,每种类型都需要进行审批。如果飞机票的审批比较严格,拖得较久,可能就需要其他的费用先审批通过进入下一环节。Jbpm可以利用task节点实现。9.鉴别器描述:在流程中的某个聚合点,等待所有的分支(可能是并行分支,也可能是多重选择分支)中的第一个分支执行到达后,就立刻激活后续活动。案例:M个“会签”活动中只要一个会签完成就立即进入“会签结束”。Jbpm不支持10.M中N鉴别模式描述:在流程中的某个聚合点,等待所有的M个分支(可能是并行分支,也可能是多多选分支)中的前N个分支执行到达后,就立刻激活后续活动。与模式9的区别在于模式10有N路同步的概念。案例:M个“会签”活动中只要N个会签完成就立即进入“会签结束”。11.任意循环描述:工作流中的一个点可以让一个或多个活动反复的执行。案例:“修改提交”后进入“经理审批”,但未通过,又回到“修改提交”。Jbpm支持12.隐式终止(ImplicitTermination)描述:在一个流程中,如果没有活动可执行了那么流程就会终止。换句话说,在工作流中没有active状态的活动了,而且也没有活动会被激活,这就是隐式终止。(前提:工作流不能处于死锁状态)。有的工作流引擎不支持。案例:“主管审批”通过后进入“经理审批”,未通过则无下一个活动。Jbpm支持13.非同步的多实例(MultipleInstancesWithoutSynchronization)描述:在流程中,一个活动可以激活多个实例,也就是说可以把一个活动分发成几个控制线程。每个控制线程之间都是相互独立的,并不需要同步它们。案例:在网上订购书籍,以书为单位,每一本都会独立产生一个购书实例,并且每个实例之间不需要同步数据。Jbpm支持。可能通过循环产生任务实例工作流之资源模式工作流资源包括参与实体资源、外部应用资源参与者。实体模式,包括直接分配(DirectAllocation)、基于角色/组分配(Role-Based/Group-BasedAllocation)、基于岗位分配(Position-BasedAllocation)、延期分配/动态分配(DeferredAllocation/DynamicAllocation)、基于规则分配(Rule-BasedAllocation)、基于能力的分配(Capability-BasedAllocation)、基于组织关系分配(OrganisationalAllocation)、基于历史分配(History-BasedAllocation)、轮转法分配(RoundRobinAllocation)、竞争分配(CompetitiveAllocation)、委派(Delegation)、跳跃(Skip)、重做(Redo)直接分配模式:在工作流设计期,直接为某个活动节点指定具体的用户为参与者;基于角色/组分配模式:在工作流设计期,直接为某个活动节点指定某个角色或组为参与者;基于岗位分配模式:在工作流设计期,为某个活动分配一个具体的岗位;延期/动态分配模式:在运行期动态的分配某个参与实体给某个活动节点;基于规则的分配模式:在设计期或运行期,根据某个具体的规则来决定某个活动节点的参与者,此规则可以由规则引擎(例如DRools)来运算,也可以由xpath来查询,或者有某个具体的运算逻辑(在活动节点调用业务应用,例如javabean来实现);基于能力的分配模式:要求某个活动的参与者实体必须具备特定的条件;基于组织关系分配:基于当前参与者的职位以及与其它组织资源的关系(例如请假流程中,程序员请假会自动路由给项目经理,项目经理请假会路由给部门经理,然后依次给根据行政关系自动分配参与者);基于历史分配模式:当前活动节点的参与者为前续某个已经执行过的活动节点的参与者,此模式在电子政务的审批流程中经常会用到,例如某个工作项由秘书办理后发给领导,然后又从领导处返回个秘书;轮转法分配模式:在运行期按照轮转法进行分配,轮转法大家应该在负载均衡的解决方案中经常看到;竞争分配模式:活动节点的参与者有多个人,多个人共同竞争此活动,某个人竟得此活动后,其他的参与者不能再竞争;另外还有委派、跳跃、重做等模式,上面给出了最常用的参与者模式工作流时间管理现在我们来看工作流的时间管理,其实讲到工作流时间管理,可能熟悉工作流的人就会想到,为某个活动节点(任务节点)设定一个时间期限,到达期限后可以执行一些特定的动作(例如超时处理,发送通知等),可能还会有人想到对流程实例和活动实例进行统计,报表。其实这些都不是工作流时间管理的本