Thursday, February 5, 2009

工作流的基本概念

更多精彩请到 http://www.139ya.com

1993年工作流管理联盟的成立标志着工作流技术开始进入相对成熟的阶段。为了实现不同工作流产品之间的互操作,WFMC在工作流管理系统的相关术语、体系结构及应用编程接口(WAPI)等方面制定了一系列标准[20]。

  不同的研究者和工作流产品供应商从不同的角度给出了工作流的定义。

  工作流管理联盟给出的工作流定义是[1]:工作流是一类能够完全或者部分自动执行的经营过程,它根据一系列过程规则,文档、信息或任务能够在不同的执行者之间进行传递与执行。

   Georgakopoulos[3]给出的工作流定义是:工作流是将一组任务(Task)组织起来完成某个经营过程。在工作流定义了任务的出发顺序和触 发条件。每个任务可以由一个或多个软件系统完成,也可以由一个或一组人完成,还可以是由一个或多个人与软件系统协作完成。任务的触发顺序和触发条件用来定 义并实现任务的触发、任务的同步和信息流的传递。

  PeopleSoft公司给出的定义是:工作流是一个用来实施经营过程实践的机 制。IBM Almaden研究中心给出的工作流定义是:工作流是经营过程的一种计算机化的标识模型,定义了完成整个过程所需要的各种参数。这些参数包括对过程中每个 步骤的定义、步骤件的执行顺序、条件以及数据流的建立、每一步骤由谁负责以及每个活动所需要的应用程序。

  以上的这些工作流的定 义,包括其它的一些工作流定义基本上都是用非形式化语言对工作流所进行的描述,虽然表述方式略有不同,但是基本上都说明这样一个问题,即工作流是经营过程 的一个计算机实现,工作流管理系统则是这一实现的软件环境。使用工作流作为经营过程的实现技术首先要求工作流系统能够反映经营过程的如下几个方面的问题: 即经营过程是什么(由那些活动、任务组成,也就是结构上的定义)、怎么做(活动间的执行条件、规则以及所交互的信息,也就是控制流与信息流的定义)、由谁 来做(人或计算机应用程序,也就是组织角色的定义)、做的怎么样(通过工作流管理系统对执行过程进行监控)。

  根据以上定义和我们对工作流管理技术的理解,我们给出如下的工作流定义:

  “工作流是一种反映业务过程的计算机化的模型,它是为了在先进计算机环境支持下实现经营过程集成与经营过程自动化而建立的可由工作流管理系统执行的业务模型。”

   工作流(Workflow)的概念是为了提高工作效率而产生的,它是一种通过先进的电子、通信和网络技术,使得企业中并行任务的执行过程现形化的企业管 理技术和方法。从用户的角度来看,工作流就相当于将特定的任务送到用户面前,用户可以使用一些应用工具来存取和处理数据,并按要求执行任务,最后执行结果 传递给下一个用户;这样一步一步下去,就形成了相应的工作流程,简称为“工作流”。

  工作流概念目前尚没有一个统一的定义。WFMC给出的工作流定义是:工作流是一类能够完全或者部分自动经营的过程,它根据一系列过程规则、文档、信息或任务能够在不同的执行者之间进行传递和执行。

  下面将描述与工作流相关的一些基本概念及其相互关系,如图2.1所示。

  (1)工作流管理系统

   工作流管理系统(Workflow Management System,简写为WFMS)[4]是完成工作流的定义和管理,并按照在计算机中预先定义好的工作流逻辑推进工作流实例执行的软件系统。它的主要功能 是:存储和解释流程定义;创建和管理运行环境中的工作流实例;控制工作流的执行者和工作流应用之间的交互等。

  (2)业务流程

  业务流程(Business Process)[29]是指在功能确定的组织结构中,能够实现业务目标和策略的相互连接的流程和节点集,如投保过程、项目开发过程等。在WFMS中,一个业务流程的自动化过程被描述为流程模板。

  (3)流程模板

  简单的讲,流程模板就是一个定义了一些必要元素的流程,如节点、子流程、传输线、条件表达式、参与者、应用程序及相关数据等等。用户在创建一个业务系统流程的时候,只需要继承该业务系统或者给出一个流程的模板,并做适当的修改,即可以完成流程的设计。

   流程模板是企业根据自己的需要定义的。在进行流程定义的时候,除了需要定义流程本身的一些必要属性外,还需要利用各种组成元素来描述一个流程的具体执行 情况。组成流程模板的基本元素包括:节点、子流程、传输线、环境变量和条件表达式、参与者、应用程序以及相关数据[30]。

  (4)节点

   节点即通常所说的流程中的办理步骤,它是构成工作流过程的基本元素,节点主要描述了一个工作流程是由哪些办理步骤构成,一个流程是由若干个节点和他们之 间的连线组成。另外它还指定了处理是否被WFMS自动开始和结束,以及工作的优先级别等信息。节点定义中需要指定事件的执行者、事件完成的功能及与事件相 关的各类信息。处理事务可以是由人工手动办理,也可以是由程序自动完成。当一个节点有多个出口,或多个节点的出口连接到一个节点时,就涉及到节点的出口控 制和入口控制。

  根据执行方式的不同,节点分为手动节点和自动节点。

   手动节点:手动节点是正常事件处理节点,由用户手工进行处理来完成的节点。在定义手动节点的时候,需要指定该节点的参与者,参与者在流程定义中声明,可以是从组织机构中进行引入角色或者人员。在运行时手动节点拆分出来的工作项是手动工作项,交由参与者进行处理。

    自动节点:自动节点是不需要人工参与进行处理而由后台自动应用程序进行处理的节点。在指定自动节点的时候,不需要指定参与者,但需要指定自动应用程序,由 工作流引擎自动调度该应用程序。在运行时自动节点拆分出来的工作项是自动工作项,由引擎自动通过工作流标准接口3调用自动应用程序,不需要人参与处理。

  (5)子流程

  作为组成业务流程的最基本单元,活动是不能被进一步分解的。一旦我们的流程比较复杂,涉及的环节 比较多,那么活动的数量也将大大增加,有向图中的节点数也必然会不断膨胀。这首先影响了用户对流程中各主要环节的把握和理解。实事上,我们可以把某些关系 紧密的活动集合起来,在图上以一个节点表示,这就形成了子过程的概念。

  子过程是一类能够分解的节点类型,它的内部可以包含组成工 作流模型的所有元素类型,实质上就是一个子工作流。子过程的引入大大增强了模型的表达能力,使模型具有了层次化的概念,并支持自顶向下的建模过程。通常, 用户可以在模型的最顶层全部用子过程来表示,这样即确定了模型的总体逻辑结构,进而再在每个过程中详细地布置活动及其它模型元素,直到完成最底层的基本活 动的建模。

  (6)流程实例

  流程实例是在运行时由流程模板创建,流程实例的创建是执行一个应用流程的开始, 创建流程实例包括创建一些相关流程状态数据和工作流相关数据,如分配该实例的唯一ID号,取得第一个节点即开始节点的相关信息及激活条件等。流程实例在运 行时有初始态、运行态、激活态、挂起态、完成态和终止态等六种状态。流程实例创建时还没有满足流程启动执行的条件,处于初始态。一个流程实例的运行是通过 启动并激活流程的第一个节点而开始。

  (7)节点实例

  节点实例是在流程运行过程中由流程实例启动并执行时开 始创建的,节点实例创建时由流程实例给节点实例分配一个唯一的ID号,并将流程实例的相关数据赋予节点实例。节点实例运行完成时将其相关数据上传给流程实 例,然后该节点实例消失。启动流程时创建第一个节点实例即开始节点实例,流程结束时创建结束节点实例,开始和结束节点实例均不进行任何操作,只是修改一下 实例的状态,结束节点实例完成时将流程实例置于完成态,流程运行结束。节点实例的状态有初始态、运行态、激活态、挂起态、完成态和终止态。

  (8)工作项

   工作项是在节点实例运行时由节点来创建的。节点实例在创建工作项的时候,首先分配一个唯一的ID号给工作项,然后将节点的相关数据传给工作项。一个节点 实例可能一次创建多个工作项,但是某一时刻只能有一个工作项被激活,当一个工作项被激活时,其他工作项将被挂起,当一个工作项完成并提交给节点时,其他的 工作项将被删除。

  工作项分为两种:一种是手动节点拆分出来的,有具体的参与者的工作项,我们称为手动工作项;一种是自动节点拆分 出来的,没有具体的参与者,但是必须指定了外部应用程序,我们称为自动工作项。手动工作项被放入工作项列表,由工作流标准接口2调用,参与者手动参与执 行。自动工作项通过工作流标准接口3访问自动应用程序,由工作流引擎来自动调用执行。

  (9)应用程序

  应用 程序声明一个在本流程中需要被(服务器或客户端)调用的应用程序,该应用程序可以完成某个特定的功能和任务。在声明中需要指定应用程序调用的方法、传递的 参数、返回的结果等信息。在用户进行节点定义的时候,可能需要指明该节点调用的应用程序的标识。应用程序就是在流程在流转中被工作流引擎调用的后台应用程 序和被用户客户端调用的应用程序工具。它们必须首先在流程定义中被声明,指明程序的调用方法、名称、参数等信息,然后在进行节点定义的时候进行引用。

  如果在一个节点中,既指明了参与者,又指明了需要调用的应用程序,则系统认为该应用程序是一个客户端调用的应用程序工具,需要用户来处理;如果一个节点仅指明了需要调用的应用程序,而没有指明参与者,则系统认为该应用程序是由工作流引擎自动调度的,不需要人工干预。

  应用程序需要支持工作流标准接口Interface3,以便与引擎之间进行参数传递和返回结果。需要传递的参数和返回的结果应该是流程中已经声明的相关数据。

  应用程序的调用有两种方式:分布式组件调用和直接应用程序调用。如果是分布式组件调用方式,则需要给出组件的标准和组件名称;如果是直接应用程序调用,则需要给出应用程序名称和路径。

  以上介绍了工作流管理中所涉及到的一些基本概念。这些概念对于我们理解工作流的含义,WFMS的功能、组成、运行流程以及应用具有重要的意义。

No comments: