钱维平,王 坚
(同济大学 CIMS 研究中心,上海 201804)
Windows Workflow Foundation(WF)是关于工作流的架构,它提供了可视化的界面工具,并且支持在ASP.NET 应用程序中直接执行工作流[1]。这些优点使得开发者可以在WF 中建模并定义规则来描述系统的处理过程,从而能够有效地实现业务的自动化处理。
本文以企业日常工作管理系统为例,以ASP.NET为开发平台,通过分析工作业务处理过程中所要经历的步骤,然后在WF 工作流的设计平台下使用工作流模型模拟相关业务的处理过程,从而有效地解决了传统日常工作管理系统由于流程变化所带来的许多问题。
本系统采用的是基于MVC 的三层体系架构。它将整个系统业务的处理按照Model(模型)、View(视图)、Controller(控制器)的方式进行分离,三个核心部件处理各自的任务[2]。MVC 三层体系架构设计模式如图1 所示。
图1 MVC 三层体系架构设计模式Fig.1 MVC three-layer architecture design pattern
模型封装了系统数据库中的字段及相应的业务规则和逻辑关系,并包含了数据验证等相关的业务操作。
视图代表用户交互界面,如本系统中发布人发布工作页面等,视图页没有任何逻辑代码,用于将用户动作传递给控制器,并以可视化界面的形式将相应模型中的数据显示出来[3]。
控制器将数据发送给模型,执行模型中的操作,最后呈现合适的工作管理系统页面。
本系统需建立日常工作数据库(DailyWork)和持久化服务数据库(WorkflowPersistence)。日常工作数据库(DailyWork)用来存储和管理系统中的数据,该数据库中有总公司日常工作记录表、子公司日常工作记录表、企业信息表以及企业职员信息表。持久化服务数据库保存了未完成的工作流实例。系统数据表详见表1。
表1 系统数据表Tab.1System datasheet
工作流实例的执行按照预先定义好的规则进行,工作流实例执行时的环境由工作流运行时提供[4]。宿主应用程序承载工作流运行时类的实例,并由工作流引擎实现和管理工作流运行。
通信Service 服务实现宿主程序与工作流之间的数据交换。开发者也可以设计通信信道,并定义接口,使宿主程序与活动之间通过事件传递参数的方式进行通信并完成数据交换。
工作流管理系统[5,6]是一种人机交互的系统。未完成的工作流实例不能一直保存在内存当中,需要进行工作流持久化操作。工作流的持久化就是在持久化存储(如SQL数据库)里,保存工作流的一些状态信息,如实例Id。
WF 中的工作流类型有顺序工作流和状态机工作流。顺序工作流按照一定的顺序和过程执行各项定义的活动。状态机工作流从初始状态开始到终止状态结束由宿主应用程序触发的外部事件驱动。
日常工作管理系统业务过程涉及到提交和回退动作,且开发者无法事先知道业务的执行顺序。顺序工作流的思想会将这种业务类型的处理变得很复杂,根据状态机工作流的思想来建模却可以高效地完成业务的处理[7]:通过在业务实体之间建立若干个状态(其中必须建立一个起始状态和终止状态,分别代表工作流的开始与结束),每个状态包括多个活动用来对业务数据进行处理。在状态发生变化时,通过事件驱动实现一系列复杂的操作。
本系统业务流程为:安环处发布一项工作,责任人填写并提交工作,安环处对责任人提交的工作进行审核,若审核通过,则流程结束,若退回责任人提交的工作,则责任人需要重新提交工作直到审核通过为止。相关业务流程如图2 所示。
图2 日常工作管理业务流程Fig.2 Business process of daily work management
在Visual Studio 2010 中,使用“状态机工作流”模板新建WorkPlanWorkflows项目。在项目中新建一个名为 IDaily-WorkPlan 的 C# 接口,在接口中定义本地服务公开给工作流的事件和方法[8]。
在工作流设计界面添加“PublisherState”、“ResponsiblePersonState”、“DoneWithWorkState”等State 活动,分别对应发布人状态、责任人状态和工作流结束三个状态。然后按照业务流程向各个State 状态中添加所需要的EventDriven 活动,并且需要为个EventDriven 活动添加一个HandleExternalEvent 子活动,用来将活动与IDaily-WorkPlan 接口中的事件绑定起来,并通过各个Handle-ExternalEvent 活动的Invoked 属性创建相关的事件。最后,将添加好的状态之间的关系进行关联,如图3 所示。
图3 日常工作计划管理业务逻辑图Fig.3 Business logic of daily work management
当发布人发布一条工作时,PublisherPublishEvent 事件指向ResponsiblePersonState 状态,责任人提交工作后,PersonSubmitEvent 事件指向PublisherState 状态,若发布人对工作审核通过,即PublisherPassEvent 事件,则转向DoneWithWorkState 状态,代表工作流结束。若对工作进行退回操作,即PublisherRetreatedEvent 事件,则再次返回到ResponsiblePersonState 状态。
完成了工作流持久化数据库的配置及状态机工作流的实现后,需要实现MVC 设计模式下的ASP.NET Web宿主应用程序。
首先,需要在模型中封装工作计划(WorkPlan)类的属性,并实现对日常工作数据库中数据的添加、查询、更新等操作方法。其次,在控制器中实现工作流运行时初始化,然后通过工作流类型启动工作流实例。
安环处对应的页面有“添加工作”、“审核工作”等多个页面。责任人对应有“填写工作”,“编辑工作”“提交工作”等页面。其中“添加工作”页面中的“发布”按钮的Click 事件处理程序包含了启动工作流实例的代码。责任人“填写工作”页面的“提交”按钮的Click 事件会触发工作流的HandleExternal 类型的活动,未完成的工作流实例被重新加载后安环处就可以执行审核通过和退回的操作。责任人填写工作页面如图4 所示。
图4 责任人填写工作页面Fig.4 Page for the responsible to fill out a job
目前该系统在企业使用,可以解决流程变化和软件维护所带来的很多问题。
本文首先分析了WF 基本工作原理及模型,然后以企业日常工作管理系统为例,并建立状态机工作流模型,实现了完整的工作流管理系统。MVC 设计模式将模型、视图、控制器分离,使得软件层次分明,真正意义上实现了工作流系统的灵活性和重用率。
[1]Dharma Shukla,Bob Schmidt;周健(译).WF 本质论/(美)[M].北京:机械工业出版社,2007.
[2]林舒萍,等.设计模式的应用研究[J].计算机工程与设计,2005,11.
[3]张丽君,齐建卓,吴宏波.基于MVC 模式的Struts 框架在Web 系统开发中的应用[J].内蒙古大学学报,2005,1.
[4]Bruce Bukovics;柴晓伟(译).WF 高级程序设计/(美)[M].北京:人民邮电出版社,2009.
[5]业宁,张爱珍,董逸生.一种可视化OA 工作流设计工具[J].计算机应用,2003,5.
[6]Holling Sworth D.WorkFlow Manamgement Coalition Specifieation:Terminology&Glossary.Doeument Number WFMC-TC-1011,Brussels,1996.
[7]陈谊,侯堃,新吉乐,等.基于XML 和关系数据库的可视化工作流系统[J].系统仿真学报,2012,1.
[8]杨琦. 工作流技术在高校教务管理系统中的应用与研究[J].IT 技术论坛,2008,16.