浅谈工作流技术与.NET中的工作流
2019-06-03汤劼,施俊
汤 劼, 施 俊
(1.江海职业技术学院, 江苏 扬州 225000; 2.扬州职业大学, 江苏 扬州 225009)
在当今这个信息技术飞速发展的时代,各类企业为了提高生产力,节约成本,都迫切需要一个基于流程化管理的系统,以实现企业内外资源的整合。其中,以工作流技术为核心的管理系统可以实现业务流程的自动管理,提高实际生产过程中的灵活性,该系统已在计算机、电力、金融、物流等行业得到应用。
1 工作流技术概述
1.1 工作流技术的定义
在日常工作中,工作流(WF)这三个字一般不为人们所知。简单地说,一个典型的工作流定义了必要的步骤,步骤可以是有序的,也可以是无序的。举例来说,某公司一个生产订单的生产过程,其流程如图1所示。
图1 订单生产过程
在这个例子中,流程的每个步骤是必需且有序的,到最终生产完成并通知客户提货之前,任何一个步骤的失败都将导致整个流程中断。这个工作流比较简单,路径非常单一,而复杂的工作流中会涉及到更多的分支。大多数程序中,涉及的过程处理或多或少都可以看做是广义上的工作流。关于工作流,各国的研究者和机构给出了不同的定义。
目前,一般将工作流定义为:通过定义一系列的过程规则、文档、信息或任务,不同的执行者可以执行或者传递[1]。或者,工作流也可解释为可以产生某种结果的一系列任务,即文档或项目的自动转移可以根据业务流程相关联的任务顺序进行操作。 而工作流本身只是一个事务流程,它由事务逻辑所决定。一般来说一系列状态和条件决定了流程的定义。工作流是业务流程的全部或部分自动化过程,在流程中,一个参与者与另一个参与者,会按照预设的原则处理相关任务、信息和文档。工作流技术的几个环节的定义见表1。
表1 工作流技术的环节定义
1.2 工作流技术的发展
工作流技术起源于办公自动化(OA)领域和生产自动化。一些企业为适应自身发展就建立了适用于该企业的可商品化的表单传递应用系统,这可以被认为是工作流系统的雏形。20世纪80年代期间,FileNet与ViewStar等公司首先开发了相应工作流产品,把工作流产品推向了市场;20世纪90年代,随着计算机的普及程度进一步提高和因特网不断延伸,工作流技术的研究和开发走向了蓬勃发展的新阶段,研究人员的研究层次更深、领域更广。进入21世纪以后,随着Web网页应用技术的广泛使用,许多企业逐渐推广Web程序进行业务部署,推出了相应Web版的工作流产品,市场上工作流产品极其丰富。2000年前后,工作流技术在国内逐渐发展起来,政府将软件产业作为重要支柱产业,鼓励发展电子政务和办公自动化系统。
安全性是工作流系统的一个关键性的问题,涉及很多方面的内容,包括完整性、可用性、保密性、授权、身份认证、匿名访问、授权、职责分割[2]。随着工作流技术的不断应用,对工作流授权的研究正日益受到领域专家的重视。
2 工作流管理系统
2.1 工作流管理系统的定义
工作流管理系统WFMS离不开计算机,是一个完整的商务过程的工具集合。工作流管理系统是一个计算机软件系统,它按照在计算机中预先定义好的工作流逻辑来推进工作流实例的执行[3-4]。或者说工作流管理系统是支持企业经营过程并监控其执行过程的一种计算机软件系统。
2.2 工作流管理系统的功能
虽然不同领域的工作流管理系统的应用范围有所不同,但它们还是具有许多共同的特征。一般来说工作流管理系统是将相关人员、组织、资源设备和信息源组合成整体。所以,工作流管理系统一般包含三种基本功能,一是建立阶段功能,即建立工作流程和相关活动的定义与建模;二是运行阶段人机交互功能,即客户可对计算机各种工具在应用中加以控制,实现人机交互[5];三是运行阶段控制功能,也可称为操作的控制阶段,它是执行工作流,并完成每一个流程的活动排序以及进行功能的调度。
与工作流管理系统相关的几个基木概念,见表2。
表2 工作流管理系统基本概念
2.3 工作流管理系统的应用领域
工作流技术发展到今天已越来越成熟,在诸多领域都有应用,例如在文档管理、电子邮件与目录服务、群件、基于事务的应用、项目计划支撑软件等方面都有所涉及[6]。
2.4 工作流管理系统的分类
基于工作流过程本身的特点和系统的应用领域的不同,对工作流产品的分类方式也不相同。根据所实现的业务过程,可以把工作流管理系统分为四种类型,分别是管理型工作流、设定型工作流、协作型工作流和生产型工作流[7]。
比如一个大学生上完大学里所有课程并通过考试,就可以申请相应的学位,这就是一个典型的管理型工作流;设定型工作流则与管理型工作流类似,由参与的用户所决定,一般用于处理一些特殊情况;协作型工作流则是参与者协作的次数较多,某一个步骤可能要反复执行才能得到结果,甚至返回上一阶段;生产型工作流是与业务组织的功能直接相关的工作流,一般应用于复杂环境,整个过程中涉及的人员和组织都比较多。
3 .NET中的工作流技术
3.1 软件中的工作流技术
在实际中,很多软件都有工作流的思想包含在其中。软件中的工作流就是用一系列抽象出来的活动来描述现实世界中的一个流程。活动则可以理解成子流程,是这一过程中的一个步骤。 目前,大多数软件对工作流的处理方式并没有开放,缺乏共通性。不同软件定义的工作流无法被复用和扩展,这对软件的快速更新显然是极为不利的。微软的WF就是将创建一个工作流所需要的各个焊接抽象出来,供开发者使用。WF并不关心开发者要处理什么具体事务,只要处理的事务带有流程的性质,就可以应用WF。WF有两种工作模式分别是面向人与面向系统,两种工作模式将努力放到一个工作流之中。
3.2 .NET Framework中的工作流技术
在.NET Framework中工作流是作为一套类库来使用,它封装了一些基本的流程节点组件和流程组件,并支持工作流概念里的顺序工作流和状态机工作流。而顺序工作流和状态机工作流是WF的两种形式。通常情况下,如果一个流程重点关注的是顺序,而较少涉及对象状态的变化,那么多用顺序流;如果流程非常依赖于对象的状态,而对象的状态在整个流程中会发生多次变化,那么基于状态的工作流将是更好的选择。
在.NET 3.5中一个重要的组成部分是工作流基础框架,这是微软公司推出的一个通用的工作流平台。严格来说,这不是一个非常完善的工作流开发框架,但是作为平台来说,它是一个非常优秀的产品。工作流常常涉及的政务、办公等领域,它也可以应用到任何拥有流程概念的事务处理当中。工作流基础框架为工作流程序提供了运行环境,简化了工作流程序的开发。不过,工作流基础框架不只提供了这些功能,还把很多工作流程序可能会用到的相关功能都打包放到了这个框架之中。
其实,任何开发人员都编写过工作流程序,只要程序根据外部输入的数据和条件来判断处理数据然后再返回结果,都可以算是工作流程序。在没有通用的工作流框架之前,开发人员不得不自己编写所有相关的代码,在业务流程中,充满着if-else或switch语句,不仅让代码难以编写和维护,也让业务逻辑显得复杂。同时,对业务逻辑最了解的人员往往不是开发人员,而是软件使用者。这些软件的直接使用者不能编写代码,也不能修改代码,因此就会常常出现开发人员编写的程序不能满足软件使用者的需求或者编写完毕的流程不能被很容易地修改,工作流基础框架以及其他一些工作流平台就是为了解决这些问题而出现的。丰富的图形界面设计器被内嵌于工作流基础框架之中,如需创建的ASP.NET Web Forms、Windows Forms或者WPF应用,它都可以集成。工作流平台的出现不仅简化了开发过程,也使得熟悉的人员可以迅速定义规则,程序员则可以专心于系统的开发工作。
3.3 Workflow Foundation中的工作流引擎
工作流基础框架中的工作流引擎是工作流执行的驱动器,他的职责是执行组成工作流的活动,为工作流提供并执行调度管理、状态管理和条件管理等任务,它可以把状态信息存储起来,这意味着WF工作流执行不需要从开始到结束,可以暂时离线,也可以长时间等待活动的执行。图2所示为WF执行引擎的组成结构[8]。
(1)Hosting Proces是指工作流引擎所在的进程。由于工作流没有一个多进程的并发结构,它的引擎只能运行在某一个进程当中。Hosting Process可以为WF提供一些底层的地址。与WCF服务一样,WF也可以运行在多种宿主环境中,如.NET程序(包括Winform、控制台)、ASP.NET、Windows后台服务和SharePoint服务器。由于各个宿主环境有较大的差异,WF的服务层有多个Hosting Process类分别负责对不同的运行环境提供支持。
(2)工作流引擎是WF运行时层,它管理着工作流的整个生命周期,并对任务调度、规则引擎和追踪服务负责。
图2 工作流基础框架架构
(3)工作流模型层为工作流程序提供模型支持,开发人员的主要职责是按照需求定义工作流模型和编写Activity代码。
(4)工作流宿主就是工作流的管理者,称为对象,这是由工作流在工作时的状态所决定的。
在.NET中,工作流模型按其工作方式可以分为顺序型和状态机,这两种工作流模型没有严格的区分,并不是说顺序型的工作流不能执行状态机工作流的任务,只是效率不够罢了。顺序型工作流意味着连续执行。如果任务的分支较少,且基本会按照定义的状态进行转换,那么应该使用顺序型工作流,如图3所示。状态机工作流则是不一样的情况,比如说一个任务有很多的可能性(状态)或是分支,那么状态机工作流是更好的选择,如图4所示。
图3 顺序型工作流 图4 状态机工作流
4 结语
在信息技术飞速发展的今天,各个领域都加快了自动化与半自动化的进程。工作流技术的出现,有效解决了软件设计与管理中的自动化与半自动化问题。目前在软件开发中,开发者越来越多地会将工作流技术引入其中,让软件开发和管理的过程变成为一个可以自动流转的过程,这个过程和OA的运转过程类似,管理者只需做软件开发过程模型搭建等工作,从根本上减轻管理者的负担,大大提高了工作效率。