WF4.0 基础篇 (一)开始使用WF
来源:https://www.cnblogs.com/caosenianhuan/p/WF.html
最近公司要重新上线一套新的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的人却还不是很多.
大纲
一、工作流简介
二、工作流的参考模型
三、工作流管理系统
四、工作流管理系统架构
五、工作流目前的现状
六、第一个工作流实例
工作流简介
工作流的英文单词是workflow,犹如大多数计算机领域的术语一样,也是个合成词,是英文单词work和英文单词flow的组合。Work翻译为任务、工作等,flow则 翻译为流程、流动等。Flow反映的是一种事物的动态属性或变化过程,例如水的流动被称为水流,空气的流动被称为气流,还有物料流、资金流等,在抽象领域还有信息流、控制流等,因此,使用任务、活动以及活动之间的变化过程表示业务流程就被称为工作流。
工作流尚没有一个统一的、明确的定义,不同的组织和研究人员对工作流给出了各自的定义:
- 定义1:工作流是一类能够完全或者部分自动执行的经营过程,它根据一系列过程规则,文档、信息或任务能够在不同的执行者之间进行传递与执行。
- 定义2:工作流是将一组任务组织起来完成某个经营过程。在工作流中定义了任务的触发顺序和触发条件。每个任务可以由一个或多个软件系统完成,也可以由一个或一组人完成,还可以是由一个或多个人与软件系统协作完成。任务的触发顺序和触发条件用来定义并实现任务的触发、任务的同步和信息流(数据流)的传递。
- 定义3:工作流是一个用来实施经营过程实践的机制。
- 定义4:工作流是经营过程的一种计算机化的表示模型,定义了完成整个过程所需要的各种参数。这些参数包括对过程中每一个步骤的定义、步骤间的执行顺序、条件以及数据流的建立、每一步骤由谁负责以及每个活动所需要的应用程序。
以上这些工作流的定义,虽然在表述方式上有所不同,但是基本上说明了这样一个问题,即工作流是经营过程的一个计算机实现。使用工作流作为经营过程的实现技术首先要求工作流系统能够反映经营过程的如下几个方面问题:
- 1. 经营过程是什么,即由哪些活动、任务组成,也就是结构上的定义;
- 2. 怎么做,即活动间的执行条件、规则以及所交互的信息,也就是控制流与信息流的定义;
- 3. 由谁来做,即人或者计算机应用程序,也就是组织角色的定义;
- 4. 做得怎样,即通过工作流管理系统对执行过程进行监控。
工作流参考模型
WFMC在工作流的相关规范和标准方面做出的主要贡献之一就是提出了一个工作流参考模型(Workflow Reference Model)。工作流参考模型来源于对普通工作流程序结构的分析,确定结构中的接口,这些接口可以使不同产品在不同的结构层次上协同工作。所有工作流系统都包含一系列的公共组件,组件间采用一套被定义好的方法进行协作;不同的产品在这些公共的组件中,会表现出不同的处理能力。为了实现不同工作流产品间的协同工作,需要在这些组件间制定一套标准的接口和数据交换格式。通过实现这些标准接口,可以达到产品间的协同工作。
我们先来看看下图,看看WFMC的参考模型:
下面我们来挨个解释下每个接口的具体作用吧:
1、接口1:
在建模或定义工具与运行时期工作流管理软件间的接口。
2、接口2:
该接口,提供客户端应用程序与工作流引擎之间的通信API 。
3、接口3:
该接口是工作流引擎与其他应用程序之间通信的API。
4、接口4:
通过工作流与工作流之间的通信API,是实现分布式工作流管理系统的核心API。
5、接口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处于提出并初始发展阶段,而数据库管理系统已经非常的成熟并产品化。
My WorkFlow Trip
下面我们开始进入WF的开发之旅吧,好像废话的篇幅比较多,希望大家不要不喜欢看呵呵,下面我们就来开始开发吧来完成我们的WF开发之旅的第一个程序demo。
1、新建一个状态机工作流或者顺序工作流控制台应用程序:
2、输入项目名称后:
3、设计WorkFlow中的相关状态节点。主设计页面如下:
4、新建State节点,在左侧的工具栏中找到如下节点,然后拖拽到设计器中:
选择State节点,拖拽到设计器中,出现如下效果图:
5、设计状态流程中的起始状态节点以及完成状态节点,毕竟工作流的状态必须有开始和结束的,对于状态机来说是必须的。
6、当我们添加了State之后,我们现在来设置状态的跳转及路程。拖拽一个新的节点到设计器中:
选中该节点后,打开属性编辑对话框。
7、设置该状态节点的跳转及其他行为等:
8、依照上图中的顺序,给第一个初始化开始状态也添加同样的事件,来完成跳转。后台的代码如下:
9、运行后的效果如下:
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
创建WF4.0项目
1.打开VS2010 ,[File] -> [New] -> [Project]
2.在出现的[New Project]对话框的[Installed Templates]树上选[Workflow],在出现的模板列表框中选[Workflow Console Application]项
在[Name]框中输入[helloWorkflow],点击[OK]进入WF4.0项目的设计界面
创建一个"hello wxwinter"屏幕的输出的工作流
按[F5]运行程,会看到如下结果
程序结构说明
本例子包括两部分,用于描述流程结构的一个XAML文件与调用流程的宿主程序
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" 所定义的类名
代码方式创建WF4.0工作流
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]运行程,会看到如下结果
WF4.0 基础篇 (一)开始使用WF的更多相关文章
- 【转】WF4.0 (基础篇)
转自:http://www.cnblogs.com/foundation/category/215023.html 作者:WXWinter —— 兰竹菊梅★春夏秋冬☆ —— wxwinter@16 ...
- WF4.0 基础篇 (十八) Flowchar
本节主要介绍WF4 中 Flowchart的使用 本文例子下载: http://files.cnblogs.com/foundation/FlowcharSample.rar 本文例子说明 Flowc ...
- (六)SpringBoot2.0基础篇- Redis整合(JedisCluster集群连接)
一.环境 Redis:4.0.9 SpringBoot:2.0.1 Redis安装:Linux(Redhat)安装Redis 二.SpringBoot整合Redis 1.项目基本搭建: 我们基于(五) ...
- iOS开发swift语法0基础篇—————(swift技术交流群:361513739)
iOS开发之swift语法0基础篇:点击打开链接 swift技术交流QQ群361513739
- 25个增强iOS应用程序性能的提示和技巧(0基础篇)
在开发iOS应用程序时,让程序具有良好的性能是非常关键的. 这也是用户所期望的,假设你的程序执行迟钝或缓慢,会招致用户的差评.然而因为iOS设备的局限性,有时候要想获得良好的性能,是非常困难的. 在开 ...
- (二)SpringBoot2.0基础篇- 静态资源的访问及Thymeleaf模板引擎的使用
一.描述 在应用系统开发的过程中,不可避免的需要使用静态资源(浏览器看的懂,他可以有变量,例:HTML页面,css样式文件,文本,属性文件,图片等): 并且SpringBoot内置了Thymeleaf ...
- 在Eclipse中使用JUnit4进行单元測试(0基础篇)
本文绝大部分内容引自这篇文章: http://www.devx.com/Java/Article/31983/0/page/1 我们在编写大型程序的时候,须要写成千上万个方法或函数,这些函数的功能可能 ...
- PHP訪问MySql数据库 0基础篇
在站点后台,常常要与数据库打交道.本文介绍怎样使用XAMPP来管理MySql数据库及怎样用PHP来訪问MySql数据库. 一.使用XAMPP来管理MySql数据库 首先使用XAMPP打开MySql的管 ...
- (一)SpringBoot2.0基础篇- 介绍及HelloWorld初体验
1.SpringBoot介绍: 根据官方SpringBoot文档描述,BUILD ANYTHING WITH SPRING BOOT (用SPRING BOOT构建任何东西,很牛X呀!),下面是官方文 ...
随机推荐
- 快速切题 sgu117. Counting 分解质因数
117. Counting time limit per test: 0.25 sec. memory limit per test: 4096 KB Find amount of numbers f ...
- CLIENT_0004:Unable to find valid Kerberos ticket cache (kinit)
背景 今天在使用JavaAPI来连接sqoop1.99.7的时候,遇到了个错误. 错误信息如下: 0 [main] WARN org.apache.hadoop.util.NativeCodeLoad ...
- L1-015 跟奥巴马一起画方块
美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统.2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正 ...
- DevExpress v18.1新版亮点——WinForms篇(五)
用户界面套包DevExpress v18.1日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress WinForms v18.1 的新功能,快来下载试用新版本! ...
- python打包成.exe
pyuic5 mainwindow.ui -o test.py pip install pyinstaller pyinstaller -F -w ***.py https://blog.csdn.n ...
- Linux 之 tar和nc传文件
前提: 将 172.16.88.1 上的 test 文件夹传送到 172.16.88.2 上 接收方 ---- 172.16.88.2 $ nc -l > test.tar 9876 为端口号 ...
- 解决python3读写中文txt时UnicodeDecodeError : 'ascii' codec can't decode byte 0xc4 in position 5595: ordinal not in range(128) on line 0的问题
今天使用python3读写含有中文的txt时突然报了如下错误,系统是MAC OS,iDE是pycharm: UnicodeDecodeError : 'ascii' codec can't decod ...
- SVN 将主干的代码合并到分支上
来源:http://blog.csdn.net/u012701023/article/details/50978154 问题:开发有了项目主干,再次基础上起了一个分支,开发新的功能:因为业务需要,在上 ...
- PHP CURL HTTPS内存泄露问题
还原场景:通过一直运行脚本,向微信用户发送模板消息,发现运行了一段时间,内存就爆了,然后立马看了一下代码,发现跟其他的消息逻辑一模一样,唯一不一样的就是请求了微信的接口:然后继续开始找问题,发现当时使 ...
- 视觉惯性里程计Visual–Inertial Odometry(VIO)概述
周围很多朋友开始做vio了,之前在知乎上也和胖爷讨论过这个问题,本文主要来自于知乎的讨论. 来自https://www.zhihu.com/question/53571648/answer/13772 ...