WF4.0 基础篇 (一)开始使用WF——上篇

  最近公司要重新上线一套新的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、运行后的效果如下:

时间: 2024-11-11 04:10:33

WF4.0 基础篇 (一)开始使用WF——上篇的相关文章

WF4.0 基础篇 (一) 开始使用WF——下篇

创建WF4.0项目 1.打开VS2010 ,[File] -> [New] -> [Project] 2.在出现的[New Project]对话框的[Installed Templates]树上选[Workflow],在出现的模板列表框中选[Workflow Console Application]项 在[Name]框中输入[helloWorkflow],点击[OK]进入WF4.0项目的设计界面 创建一个"hello wxwinter"屏幕的输出的工作流 按[F5]运行程,

在Eclipse中使用JUnit4进行单元測试(0基础篇)

本文绝大部分内容引自这篇文章: http://www.devx.com/Java/Article/31983/0/page/1 我们在编写大型程序的时候,须要写成千上万个方法或函数,这些函数的功能可能非常强大,但我们在程序中仅仅用到该函数的一小部分功能,而且经过调试能够确定,这一小部分功能是正确的.可是,我们同一时候应该确保每个函数都全然正确,由于假设我们今后假设对程序进行扩展,用到了某个函数的其它功能,而这个功能有bug的话,那绝对是一件非常郁闷的事情.所以说,每编写完一个函数之后,都应该对这

25个增强iOS应用程序性能的提示和技巧(0基础篇)

在开发iOS应用程序时,让程序具有良好的性能是非常关键的.这也是用户所期望的,假设你的程序运行迟钝或缓慢.会招致用户的差评.然而由于iOS设备的局限性,有时候要想获得良好的性能.是非常困难的.在开发过程中,有很多事项须要记住.而且关于性能影响非常easy就忘记. 本文收集了25个关于能够提升程序性能的提示和技巧,把性能优化技巧分为3个不同的等级:0基础.中级和高级 0基础 在开发过程中,以下这些0基础技巧须要时刻注意: 1.使用ARC进行内存管理 2.在适当的情况下使用reuseIdentifi

kinect2.0 基础篇第一篇 用C#在Visual Studio上编写关闭彩色图像的三色通道的某个通道

网上基于kinect2.0 用C#语言编写的小程序太少了 下面的链接上C#语言的一些基础开发,对于什么都不会的最好手把手敲一遍 http://blog.csdn.net/app_12062011/article/details/52665048 使用kinect2.0  要求环境如下: 系统win8以上 Usb接口3.0 Direct11 以上 1.新建一个WPF应用程序,首先肯定要添加应用  Microsoft.Kinect 2.在WPF 在Grid中 添加一个控件 <Image x:Name

kinect2.0 基础篇第3篇 用C#在Visual Studio上编写把深度图像转换成彩色图像

本示例实现的功能有:有两个Radiobutton控件  选一个,点击启动按钮, 第一个是将深度图像转换成彩色图像 第二个是将深度图像做一些简单处理(例如太暗的调白一点) 涉及到一点遥感图像处理知识,将深度数据值转换为色调和饱和度 遥感图像处理那块不懂,有兴趣的自己可以研究研究,代码的基于kinect1的教程,慢慢尝试出来的,虽然功能实现了,但是原理还不是很懂 <Window x:Class="EnhancedDepthWPF.MainWindow" xmlns="htt

mongo3.0基础篇

1:安装 http://note.youdao.com/share/?id=33cc240a3ea3d488def99651ca89b6fa&type=note 2:创建用户 http://note.youdao.com/share/?id=2128db3e982a0db0a0543cee36da708a&type=note 3:CRUD(C) http://note.youdao.com/share/?id=59459f31f18b81df577a2060e18c79ae&typ

linux系统命令解析(0基础篇)

经常使用命令 ctrl+W+T    当进入gvim文档编辑界面后,假设是C文件,能够列出当前文件里的全部函数. Shift+*    当进入gvim文档编辑页面,能够搜索当前keyword. echo $?    查看上一个命令的返回值(脚本的返回值).

Git学习0基础篇(下)

server上的 Git - 协议 Git能够使用四种基本的协议传输资料:本地协议(Local).HTTP 协议.SSH(Secure Shell) 协议以及 Git 协议.眼下使用最普及的是 SSH 协议和 HTTP 协议. 本地协议 本地协议的长处是简单,缺点是不方便从多个位置訪问. 克隆一个本地版本号库,能够运行例如以下命令: $ git clone /opt/git/project.git 或 $ git clone file:///opt/git/project.git HTTP 协议

ArcGIS Runtime for Android开发教程V2.0(3)基础篇---Hello World Map

原文地址: ArcGIS Runtime for Android开发教程V2.0(3)基础篇---Hello World Map - ArcGIS_Mobile的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/arcgis_mobile/article/details/8124005 通过上面章节,我们已经了解如何配置一个ArcGIS Runtime for Android开发环境,下面我们将介绍如何使用Eclipse创建一个ArcGIS移动项目Hello W