来源:https://www.cnblogs.com/caosenianhuan/p/WF.htmlhtml
最近公司要从新上线一套新的CRM系统,要重整老系统里的业务流模块,团队讨论已微软的workflow做为技术基础。本人以前没有涉及过相关的知识,目前项目还没开始,前期来系统的的学习和了解下WF为后期开发打下些技术基础。该篇为开题片,作一些简单那的介绍和入门。数据库
从WinFX到NET3.x再到NET4.0 ,WPF,WCF,WF 始终是放在一块儿的,WPF(silverlight)用于程序UI的展示,WCF用于程序通讯,WF用于程序的逻辑控制,这种思想在微软提出WinFX到如今的NET3.x再到NET4.0都是十分明确的. WPF(silverlight)与WCF如今已被你们熟知,并已普遍使用.但关注WF的人却还不是不少。安全
WorkFlow是最近比较流行的一门技术,其实WF起源于20世纪70年代中期的办公化自动领域,自1993年8月,WFMC(工做流管理联盟)成立,1994年制定了一系列的关于工做流的标准。进入21世纪工做流被愈来愈多的学者关注,该项技术愈加走向成熟。固然我也是必须跟上时代的步伐,因此也加入工做流的大军,但愿可以跟上前人的脚步。架构
WF的全称是Windows Workflow Foundation ,分布式
最先接触WF是在2004年的时候,那时微软推出了一个CTP版的开发包,WinFX.工具
在WinFX中提供了三个内容: Avalon, Indigo, WinOE当时这三方面的内容我都有涉及学习
与微软不少的技术同样,WinFX在Bata2后就没有后续了.然而幸运的是个人此次长达一年的技术投入并无浪费,WinFX在2006年以Net 3.0 的方式正式发布了(其实就算WinFX没有下文,我也没有什么遗憾,在学习WinFX的日子里,我理解了不少全新的设计思想)测试
在NET 3.0 中,操作系统
Avalon成为了Windows Presentation Foundation 简称为WPF架构设计
Indigo成为了 Windows Communication Foundation 简称为WCF
WinOE 成为了 Windows Workflow Foundation 简称为WWF
后来, 微软基于WPF推出了WFP/E, WFP/E就是silverlight的前身.
WPF,WCF,WWF从一开始就是绑在一块儿的,为何WWF如今叫WF,少了一个"W",那是由于WWF与另外一个缩写重名了 World Wild Fund for Nature"世界天然基金会"
世界天然基金会
那么WF究竟是什么,在这里我先不作具体介绍,但WF绝对不是传统"工做流"层面的东西.
从WinFX到NET3.x再到NET4.0 ,WPF,WCF,WF 始终是放在一块儿的,
WPF(silverlight)用于程序UI的展示,WCF用于程序通讯,WF用于程序的逻辑控制,这种思想在微软提出WinFX到如今的NET3.x再到NET4.0都是十分明确的.
WPF(silverlight)与WCF如今已被你们熟知,并已普遍使用.但关注WF的人却还不是不少.
1、工做流简介
2、工做流的参考模型
3、工做流管理系统
4、工做流管理系统架构
5、工做流目前的现状
6、第一个工做流实例
工做流的英文单词是workflow,犹如大多数计算机领域的术语同样,也是个合成词,是英文单词work和英文单词flow的组合。Work翻译为任务、工做等,flow则 翻译为流程、流动等。Flow反映的是一种事物的动态属性或变化过程,例如水的流动被称为水流,空气的流动被称为气流,还有物料流、资金流等,在抽象领域还有信息流、控制流等,所以,使用任务、活动以及活动之间的变化过程表示业务流程就被称为工做流。
工做流尚没有一个统一的、明确的定义,不一样的组织和研究人员对工做流给出了各自的定义:
- 定义1:工做流是一类可以彻底或者部分自动执行的经营过程,它根据一系列过程规则,文档、信息或任务可以在不一样的执行者之间进行传递与执行。
- 定义2:工做流是将一组任务组织起来完成某个经营过程。在工做流中定义了任务的触发顺序和触发条件。每一个任务能够由一个或多个软件系统完成,也能够由一个或一组人完成,还能够是由一个或多我的与软件系统协做完成。任务的触发顺序和触发条件用来定义并实现任务的触发、任务的同步和信息流(数据流)的传递。
- 定义3:工做流是一个用来实施经营过程实践的机制。
- 定义4:工做流是经营过程的一种计算机化的表示模型,定义了完成整个过程所须要的各类参数。这些参数包括对过程当中每个步骤的定义、步骤间的执行顺序、条件以及数据流的创建、每一步骤由谁负责以及每一个活动所须要的应用程序。
以上这些工做流的定义,虽然在表述方式上有所不一样,可是基本上说明了这样一个问题,即工做流是经营过程的一个计算机实现。使用工做流做为经营过程的实现技术首先要求工做流系统可以反映经营过程的以下几个方面问题:
- 1. 经营过程是什么,即由哪些活动、任务组成,也就是结构上的定义;
- 2. 怎么作,即活动间的执行条件、规则以及所交互的信息,也就是控制流与信息流的定义;
- 3. 由谁来作,即人或者计算机应用程序,也就是组织角色的定义;
- 4. 作得怎样,即经过工做流管理系统对执行过程进行监控。
WFMC在工做流的相关规范和标准方面作出的主要贡献之一就是提出了一个工做流参考模型(Workflow Reference Model)。工做流参考模型来源于对普通工做流程序结构的分析,肯定结构中的接口,这些接口可使不一样产品在不一样的结构层次上协同工做。全部工做流系统都包含一系列的公共组件,组件间采用一套被定义好的方法进行协做;不一样的产品在这些公共的组件中,会表现出不一样的处理能力。为了实现不一样工做流产品间的协同工做,须要在这些组件间制定一套标准的接口和数据交换格式。经过实现这些标准接口,能够达到产品间的协同工做。
咱们先来看看下图,看看WFMC的参考模型:
下面咱们来挨个解释下每一个接口的具体做用吧:
一、接口1:
在建模或定义工具与运行时期工做流管理软件间的接口。
二、接口2:
该接口,提供客户端应用程序与工做流引擎之间的通讯API 。
三、接口3:
该接口是工做流引擎与其余应用程序之间通讯的API。
四、接口4:
经过工做流与工做流之间的通讯API,是实现分布式工做流管理系统的核心API。
五、接口5:
该工具提供了对工做流引擎的当前状态及运行在该引擎下的实例的监管和管理的接口。
咱们再来看看上面相关工具的做用吧:
流程定义工具 :
就是提供一种方便的使用的,而且可以被计算机识别的过程定义,目前咱们使用较普遍的是经过图形化的工具来完成WF的过程定义。最后输出一个XPDL文件。XPDL(XML Process Definition Language)是由Workflow Management Coalition所提出的一个标准化规格,使用XML文件让不一样的工做流程软件可以交换商业流程定义。
管理监控工具:
对工做流在整个组织内的流程状况进行监控,并提供一系列管理功能,实现安全性、过程控制、受权等操做。典型的功能范围包括用户管理、角色管理、监控管理、资源管理、过程监控管理。具体如:过程模型的实例化,启动、挂起、恢复、终止过程实例;管理正在执行的过程实例等。
工做流执行服务:
由一个或多个工做流引擎组成,提供过程实例的执行,为活动进行导航,与外界资源交互完成各项活动,维护控制数据和相关数据等功能。
下图是工做流服务的整个流程:
工做流管理系统——Workflow Management System(简称WFMS),在工做流定义基础上,具备以下定义。
定义1:工做流管理系统是一个软件系统,它完成工做流的定义和管理,并按照在计算机中预先定义好的工做流逻辑推动工做流实例的执行。
定义2:工做流管理系统是支持企业经营过程高效执行并监控其执行过程的计算机软件系统。
根据工做流管理系统的定义,一个工做流管理系统应该提供以下的功能:
1. 定义、实现和管理工做流的运行;
2. 与工做流执行者,即人或应用系统,进行交互;
3. 推动工做流实例的执行;
4.监控工做流的运行状态。
须要指出的是,工做流管理系统不是企业的业务系统。在很大程度上,工做流管理系统为企业的业务系统运行提供了一个软件支撑环境,很是相似于在单个计算机上的操做系统。只不过工做流管理系统支撑的范围比较大、环境比较复杂而以,因此也有人称工做流管理系统是业务操做系统。
WFMC提出的工做流管理系统产品架构。这个架构给出了抽象的工做流管理系统的功能组成部件和接口,它可以知足工做流管理系统和产品应该具备的主要功能,可为实现工做流产品之间的互操做提供公共的基础。从图中能够看出,工做流管理系统主要由三部分组成:
上图也是WFMC提出的工做流管理系统的架构设计图。咱们这里来解释下几个重要组件的做用吧:
软件构件:完成工做流管理系统不一样组成部分功能的实现,包括过程建模工具,工做流引擎,任务表管理器和用户界面;
系统控制数据:工做流管理系统中的一个或多个软件构件使用的数据,包括过程定义,组织/角色模型数据,工做流控制数据,工做流相关数据,任务表;
应用与应用数据:对于工做流管理系统来讲,它们不是工做流管理系统的组成部分,而是属于外部系统和数据,它们被工做流管理系统调用来完成整个或部分工做流管理的功能,如被工做流管理系统调用的外部应用以及这些应用操做的数据。
咱们先来看看目前不少的自动化办公的流程:
经过上面的图片,可能看不太清楚,我也没有重新画一张清晰的,因此你们先凑合着看下,而后后面我再补上,上面能够看到不一样角色的人,负责在工做流中的状态及行为是不一样的。上面中强调说明了工做职责的分配性问题。
工做流的概念起源于生产组织和办公自动化领域,提出的目的是经过将工做分解成定义良好的任务、角色,按照必定的规则和过程来执行这些任务并对它们进行监控,达到提升工做效率、下降生产成本、提升企业生产经营管理水平和企业竞争力的目标。
众多的企业应用系统按照功能从大的范围来划分,无非两种,一种是以公文流转、平常办公为主体的办公自动化系统,另外一种则是以企业经营过程的业务流程为主要辅助对象的具体业务系统。不管是办公自动化系统仍是具体业务系统,都是为企业提供软件服务的,都是本着服务于企业需求为目标的,然而,现实世界中的各个企业的经营过程是无时无刻不在变化和调整中的,以便适应瞬息万变的市场。这种变动带给信息化系统软件的最大的问题在于企业经营过程的调整每每使得原有的信息化系统软件要推倒从新设计开发,使开发成本很是的高,寻找到一种可以相对灵活的架构和管理方式以使得信息化系统可以快速的适应企业经营过程的变动成为了为企业构造信息化系统的软件设计人员的头等课题。工做流及工做流管理系统之因此能为企业信息化系统所使用究其缘由也在于此。虽然工做流技术已经开始在企业应用中拥有了一片天空,然而,同已经应用于企业的其余技术相比,工做流技术仍然处于其技术发展的初期。
下图显示了,工做流与RDBMS系统之间的发展曲线对比图:
固然从上图中,咱们看到WF处于提出并初始发展阶段,而数据库管理系统已经很是的成熟并产品化。
下面咱们开始进入WF的开发之旅吧,好像废话的篇幅比较多,但愿你们不要不喜欢看呵呵,下面咱们就来开始开发吧来完成咱们的WF开发之旅的第一个程序demo。
一、新建一个状态机工做流或者顺序工做流控制台应用程序:
二、输入项目名称后:
三、设计WorkFlow中的相关状态节点。主设计页面以下:
四、新建State节点,在左侧的工具栏中找到以下节点,而后拖拽到设计器中:
五、设计状态流程中的起始状态节点以及完成状态节点,毕竟工做流的状态必须有开始和结束的,对于状态机来讲是必须的。
六、当咱们添加了State以后,咱们如今来设置状态的跳转及路程。拖拽一个新的节点到设计器中:
七、设置该状态节点的跳转及其余行为等:
八、依照上图中的顺序,给第一个初始化开始状态也添加一样的事件,来完成跳转。后台的代码以下:
九、运行后的效果以下:
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.打开VS2010 ,[File] -> [New] -> [Project]
2.在出现的[New Project]对话框的[Installed Templates]树上选[Workflow],在出现的模板列表框中选[Workflow Console Application]项
在[Name]框中输入[helloWorkflow],点击[OK]进入WF4.0项目的设计界面
按[F5]运行程,会看到以下结果
本例子包括两部分,用于描述流程结构的一个XAML文件与调用流程的宿主程序
WF4.0 的流程结构描述文件是一个XML格式的文件,其格式以下
(关于WF4.0的XAML文件格式,会在之后的文章中作具体介绍,在这里作一个基本说明)
<Activity x:Class="helloWorkflow.Workflow1" .... > <WriteLine Text="hello wxwinter " .... /> </Activity> |
WF4.0的流程是由一组[活动]组成的,当流程运行时,流程内的[活动]按必定的规则依次执行
其中<Activity> </Activity> 是这个流程的根[活动]
<WriteLine /> 是WF4.0 的一个自带的一个[活动],其功能就是在屏幕打印[Text属性]的内容
x:Class="helloWorkflow.Workflow1" 则是将XOML文件编译成NET类时所对应的类名
在使用[Workflow Console Application]模板建立时,会自动建立一个用于测试流程的控制台宿主程序,内容以下
class Program { static void Main(string[] args) { WorkflowInvoker.Invoke(new Workflow1()); } } |
其中,[ WorkflowInvoker]是一个用于调用工做流的功能类,可使用该类的[Invoke 静态方法]调用流程.在本例中[Invoke(new Workflow1())]所使用的类就是XOML文件中 x:Class="helloWorkflow.Workflow1" 所定义的类名
class Program { static void Main(string[] args) { WorkflowInvoker.Invoke(codeCreateWorkflow()); }
// 代码方式建立WF4.0工做流 static Activity codeCreateWorkflow() { WriteLine writeLineActivity = new WriteLine() { Text = "hello wxwinter" };
Sequence wxwinterWorkflow = new Sequence();
wxwinterWorkflow.Activities.Add(writeLineActivity);
return wxwinterWorkflow; } } |
按[F5]运行程,会看到以下结果