首页 > 范文大全 > 正文

基于WF状态机工作流的研究与应用

开篇:润墨网以专业的文秘视角,为您筛选了一篇基于WF状态机工作流的研究与应用范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:为了满足工作流管理系统的灵活性与可扩展性的要求,针对工作流设计复杂等问题,该文介绍了Windows Workflow Foundation的特点,重点讨论了其工作原理及模型,同时以陕西省高等学校学生资助信息管理系统的开发为背景,在VS2005环境下,设计出基于wf状态机工作流的贫困生认定模块,并详细介绍设计框架及实现。

关键词:Workflow Foundation;状态机工作流;活动

中图分类号:TP311文献标识码:A 文章编号:1009-3044(2008)35-2263-03

The Research and Application Based on Statemachine Workflow of WF

FENG Qian, DONG Li-li

(Information & Control Engineering college of Xi'an University of Architecture and Technology, Xi'an 710055, China)

Abstract: To meet the requirement of flexibility and maintenability of the Workflow Management System, and aiming at the complexity of designing workflow, this paper introduces the Characteristics of Windows Workflow Foundation and discusses the working principle and models emphatically. In the environment of VS2005, as the background for the development of "Information Management System for Students' Sponsorship of Shaanxi Collage", designed the module of poor-students approval, and introduce the design framework and process of realization.

Key words: workflow foundation; state machine workflow; activity

1 引言

工作流技术作为近十年来的一个研究热点,一直受到人们普遍的关注。工作流的概念起源于生产组织和办公自动化领域,它是针对日常工作中具有固定程序的活动而提出的一个概念,其目的是通过将工作分解成定义良好的任务、角色,按照一定的规则和过程来执行这些任务并对它们进行监控,达到提高办事效率、降低生产成本、提高企业生产经营管理水平和企业竞争力的目标。

Windows Workflow Foundation(WF)是微软推出的关于工作流的研发架构,是为微软产品及相关应用程序提供的通用工作流设计平台和开发工具。它将复杂的工作流理论进行封装,帮助软件开发人员在Windows平台上快速构建工作流应用程序、引擎和自定义活动。它提供了工作流定义的图形化界面,为开发基于工作流的应用程序提供了框架和工具,并且已经在Visual Studio2008中进行了集成。WF在构建工作流程时具有很强的优势。

1) WF提供了一套高度抽象和可视化的商业处理模型,这套模型可以非常容易地使用和被理解,无论使用它的是开发人员或是商业领域专家。

2)WF可以非常容易地改变与之相关的商业处理规则,并且不必重新编译。

3) WF编程模型可以使开发人员建立一套可测试的内核集合,并且可以在多个程序中使用它们[1]。

2 WF基本工作原理及其工作流模型

2.1 WF的基本工作原理

Windows Workflow Foundation其实是一个专门控制工作流的程序,它为开发工作流提供了框架、模型、工作流引擎、.NET 托管 API、运行库服务以及与 Microsoft Visual Studio 2008 集成的可视化设计器和调试器,可使用 WF 来生成并执行同时跨越客户端和服务器端的,可在所有类型的 .NET 应用程序内部执行的工作流[2]。

WF的核心是一组Activities活动,通常在宿主程序中被创建。它们通过工作流引擎来运行工作流程,管理工作流的状态,通过运行时服务与工作流进行通信。宿主程序可以是任何类型的程序,在开发工作流项目时,首先在宿主程序中创建工作流引擎,然后在引擎中加载各种所需的服务,最后通过引擎启动指定的工作流并生成工作流的实例,宿主程序结构模型如图1所示。

宿主程序与工作流之间进行数据交换是通过通信Service服务,另外也可自行设计通信信道,定义一些接口,使宿主程序与WF中一些特殊的Activiy活动采用事件传递参数的形式进行通信,来交换数据;同时还可以通过外部事件以及持久化等方式实现通信。当一个工作流实例运行时,可以伴随其运行许多服务,这些服务均采用可插式调用,即这些服务是为了满足不同的工作流运行实例的需求,从而伴随实例运行的。

工作流持久化服务的加载(PersistenceService)是将工作流实例从工作流引擎中移出,存入持久性介质,以及从介质中将实例载入工作流引擎中,SqlWorkflowPersistenceService类是使用SQL数据库对工作流状态进行持久化的服务,实例使用Unload方式通过加载到引擎中的SqlWorkflowPersistenceService服务,完成实例的内存移出与保存到数据库的操作,引擎使用GetWorkflow方法,可通过SqlWorkflowPersistenceService服务将存于数据库中的实例加载并返回,实例使用load方法,可触发引擎的WorkflowLoaded事件。

跟踪工作流及其接点状态是工作流平台的核心功能,WF提供的Tracking服务用以跟踪工作流的执行状态,工作流执行过程中会有各种状态的改变,Tracking能将这些状态改变信息记录到数据库并提供查询端口。另外在封装类中还实现了对自定义服务的加载,同时负责工作流引擎的启动,并保证工作流引擎的唯一性。

在开发工作流系统时,WF使程序语义更具声明性且准确性增强,方便用户为接近实际进程的应用程序建模,并将 Windows Workflow 嵌入运行时服务器。进程越复杂,为其设计和实现的流程就越简单,进程动态更改越容易,用户需要编写和维护的代码数量就越少。WF运行时为工作流程序提供了托管执行环境,还为程序提供了持续时间、可靠性、挂起/恢复、事务以及补偿特征。

2.2 WF的工作流模型

Windows Workflow Foundation 对执行模型进行了活动自动控制方面的虚拟化,以便编写出可以捕捉各种控制流模式的复合活动,其范围包括多种连接与合并、状态机、图形、序列、交叉存取和非本地退出等。总之,它能够通过“高保真”的复合活动对存在于现实世界中的控制流模式进行建模。然而,Windows Workflow Foundation 提供了针对以下两种模式的内置活动:顺序工作流和状态机工作流。

顺序工作流(sequential workflow)是为执行由一系列预定义的步骤组成的任务而设计的,其体系结构模拟基于过程的应用程序,如图2。顺序工作流有明确的开始和结束点,从始至终,一步接一步,沿着一条可能的线路执行。顺序模式是一种典型的结构化模式,适用于总是重复的、可预测的操作[3]。

图2顺序类型工作流示意图图3状态机类型工作流示意图

状态机工作流是为事件驱动的工作场景设计的,它可以被表示为一组状态,也可将其看做一组结点,且任意时刻只有一个结点处于激活状态,每个状态可以包括多种活动,并由事件进行触发。它需要分别定义一个初始状态和一个完成状态,且按照所定义的转换过程逐个状态地执行,直至到达结束状态,其流程示意见图3。

状态机工作流允许回溯,能够重新分配被拒绝的请求。在通常情况下我们可以在逻辑设计中设置 Reassigned 状态,但这并不是一种高效的设计方式。而状态机工作流中重新分配的请求与新分配请求的处理方法相同,因此无需在 Rejected 状态之外再单独创建一个分支来处理重新分配的请求,从而将工作流转换回原来的状态,这样便能够在工作流中更好地重用处理资源[5]。

WF基本活动库中状态机相关的活动:

EventDrivenActivity依赖于外部事件开始执行的状态。

SetStateActivity转换到指定的新状态。

StateActivity表示状态机中的某个状态;可能包含其他State活动。

StateInitializationActivity在进入某个状态时执行;可能包含其他活动。

StateFinalizationActivity在离开 StateActivity 活动时执行其所包含的活动。

在程序控制权传递到某个状态活动并开始执行时,该状态活动将检查是否存在 StateInitialization 活动,如果存在,则执行该活动。同样地,某个状态活动在将控制权传递给另一个状态时,会检查是否存在 StateFinalization 活动,若存在,则执行。

3 基于WF构建状态机工作流

3.1 功能描述以及项目架构分析

在陕西省高等学校学生资助信息管理系统中,学校认定贫困生的流程为:学生首先向院系提交申请表,若不符合要求则院系不予认定,若符合申请要求则通过院系认定,并由院系提交至学校处,进而通过学校认定后才可拨款。在特殊情况下,学校可将已认定的学生取消其贫困生资格,院系也具有此权限,但已经通过学校认定的贫困生院系将无法取消其资格。同时每个学生只能看到自己的申请表。

本项目采用分布式架构,如图4所示,在项目中创建一个状态机工作流StateMachineWF、一个Windows应用程序StuApplication,工作流与应用程序之间的接口项目WFInterface和中间层代码BLLandDAL。

首先在中间层项目BLLandDAL下创建一个文件来对贫困生认定的业务逻辑进行封装,而工作流本身就是业务逻辑的最佳体现,因此工作流也是业务逻辑层的一部分。在BLLandDAL项目中定义工作流的实体类,按照业务需求将申请表中的各属性逐一进行定义。由于该实体类是作为数据的载体,因此需要将其序列化,同时该实体类在工作流中将作为参数进行传递,必须继承工作流的ExternalDataArgs抽象类。因为状态机工作流都需要人为干预,所以它应具备对应的接口程序以便与HandleExternalEvent活动进行绑定。在认定流程中,用户都是通过点击前台界面的按钮来触发相应的工作流活动,因此在该项目中将点击操作进行抽象,并在接口项目中定义一个统一的click事件,将该事件的参数类型设置为ApprovalInfo实体类,进行参数传递。代码如下所示:

namespace ImyInterface

{

[ExternalDataExchange]

Public interface Iprojiect

{

Event EventHandle< ApprovalInfo> click;

}

}

3.2 构建WF状态机工作流及应用程序

在visual studio 2005中,创建一个状态机模型的工作流,在其设计界面中添加四个State活动,分别对应学生、院系、学校和工作流结束的操作状态,分别命名为“StuState”、“DepState”、“SchState”、“Over”,如图5所示。根据贫困生认定业务逻辑的定义,将StuState活动设置为该工作流的起始状态,将Over活动设置为该工作流的终止状态,并按照业务流程分别向各State状态中添加相应数量的EventDriven活动,同时将状态间的关系进行关联。

当学生提交贫困生申请后,StuSubmitEvent事件将指向DepState状态;在院系对该生通过认定后,DepApprovalEvent事件进而指向SchState状态;如果学院取消认定,则由DepCancelEvent事件退回到StuState状态;当最终学校认定通过,SchApprovalEvent事件将指向Over结束状态;若学校取消认定,SchCancelEvent事件即退回到DepState活动。

EventDriven活动属于事件类型的容器,在它内部至少应该包含一个事件类型的活动。在本项目中为每个EventDriven活动添加一个HandleExternalEvent子活动,该活动将分别与接口项目中的事件进行绑定,并通过各个HandleExternalEvent活动的Invoked属性创建相关的事件,最后在该事件中实现每个操作的业务逻辑,代码如下所示。

Namespace StateMachineWF

{

Public sealed partial class Approval:StateMachineWorkflowActivity

Public StuWorkflow ()

{

InitializeComponent();

}

//学生提交贫困生申请

Private void StuInvoked(object sender,ExternalDataEventArgs e)

{

ExpenseBLL bll=new ExpenseBLL();

ExpInfo.ExpStatus=“等待院系认定”;

Bll.Create Approval (ExpInfo);

}

……

}

在应用程序中,院系认定与学校认定界面的认定按钮触发工作流中HandleExternalEvent类型的活动,该按钮需要将保存在数据库中被持续化的工作流实例重新加载回工作流运行时容器RunTime中,然后按照工作流的流程继续执行后续的认定操作。其代码如下所示:

Public event EventHandle< ApprovalInfo > Send;

Private void DepApproval_Click(object sender,EventArgs e)

{

//将被持续化的工作流实例加载回Runtime容器

Guid g=new Guid(this. Approval_id.Text);

Workflowruntime.GetWorkflow(g);

//触发工作流中相应的活动

Send(null,newApprovalInfo(g,this.Stu_name.Text,DateTime.Now.ToString(),this.Stu_card.Text));

……

}

4 总结

通过以上对Workflow Foundation基本工作原理及模型的分析,针对贫困生认定业务的特点,结合对工作流管理系统的开放性标准,在传统的关系数据库(SQLserve:2005)基础上,提出基于分布式结构的工作流系统框图,设计出基于WF状态机工作流的陕西省高等学校学生资助信息管理系统的贫困生认定模块,真正实现信息产生与传递逻辑的分离,增强认定工作流系统的灵活性和可扩展性,提高认定或审批工作流系统软件的重用率。

参考文献:

[1] 张瑾.WWF开发指南[M].北京:机械工业出版社,2008.

[2] Dharma Shukla,Bob Schmidt.WF本质论[M].北京: 机械工业出版社,2007.

[3] 刘元剑.基于.NET的工程管理信息系统研究[J].计算技术与自动化,2006,25(2):88-90.

[4] 金戈.关于WF的一些思考[J].程序员,2008(5):10,121-122.

[5] 杨琦.工作流技术在高校教务管理系统中的应用与研究[J].IT技术论坛,2008(16):89.