WF从入门到精通(第十六章):声明式工作流

学习完本章,你将掌握:

1.理解过程式(imperative)工作流模型和声明式(declarative)工作流模型之间的主要区别

2.创建声明式工作流

3.使用XAML XML词汇来创建工作流

4.调入基于XAML的工作流并执行

许多开发者或许并不知道WF既能用基于过程化的定义来执行工作流(使用工作流视图设计器)也能用基于声明式的定义来执行工作流(工作流使用XML来进行定义)。

每一种风格都有优点。当你使用我们贯穿本书已使用过的技术来创建你的工作流应用程序的时候,工作流模型实际上是被编译进了一个可执行的程序集中。其优点是加载、执行工作流的速度快。

但这种风格也缺乏灵活性。尽管有为WF加入动态能力的办法(这不包括在本书中),但通常你的工作流仍然要由你去编译它们。假如你的业务处理逻辑变化了的话,除非你为工作流中的判定使用了声明性规则(在第12章“策略和规则”中讨论过),否则的话你将不得不修改你的工作流定义,重新进行编译和部署,此外还伴随着去执行所有相关的测试和验证工作。

但是,工作流运行时有能力接受几乎任何形式的工作流定义。你以前还不得不去写一些代码来把你提供的工作流定义转化成工作流运行时能够执行的模型。事实上,这些正是WF处理基于XML的工作流定义所要做的事。

正如你可能期望的,把你的工作流记录进一个XML格式的文件中,这能让你很容易地修改和重新部署。这就不用在Microsoft Visual Studio中重新编译你的工作流,你可简单地使用任何XML编辑器(甚至是Windows中的“Notepad”记事本程序)来修改基于XML的工作流定义并把它创建的工作流模型提供给工作流运行时。你甚至能有两全其美的办法:通过使用WF的工作流编译器来编译你的XML工作流定义。我们将在本章探讨这些内容。

声明式工作流——XML标记

首先,.NET 3.0中的声明式应用程序(它包括WPF)的定义有着悠久的历史。WPF开始提供声明式编程的能力,它既可完全地进行声明化也可进行部分声明。你可完全地使用像XML应用程序标记语言或者XAML(读作“zammel”)中的XML标记词汇来封装你的应用程序。或者,通过使用特殊的基于XAML的结构,你能把你应用程序的某部分编译进程序集中并通过XAML来把它调入执行。你甚至能写下C#代码并把它嵌入到你的XAML定义中,或者把你的C#代码放进代码后置文件中,以便稍后执行它。

备注:你不能找到比Charles Petzold的最新著作:“应用程序 = 代码 + 标记”(“Application = Code + Markup”,2006年微软印刷)更好的在XAML和WPF方面的专著了。假如你对XAML论题的详细细节感兴趣的话,强烈建议你重新看看本书的第19章。

做下面的这个实验其实只是为了好玩。在你的系统中创建一个新的文本文件,把它命名为Button.xaml。把列表16-1中的代码输入到该文件中并进行保存,然后双击该文件。因为你必须安装.NET 3.0组件才能创建工作流应用程序,因此其实你也已经完成了对.xaml类型文件的注册工作。Windows知道把XAML文件加载到你的Web浏览器并显示它。尽管它仅仅只有一个按钮,但这是一个完整的WPF应用程序,虽然它很简单。图16-1显示了使用Window XP中的IE 7.0来展示该按钮的输出效果。

<?xml version="1.0"?><Button xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Margin="36" Foreground="Blue" FontSize="36pt">    Hello,World!</Button>

列表16-1展示一个按钮的基于XAML的应用程序示例


图16-1正在运行的基于XAML的按钮

WF团队也把这些理念一起融入到了WF中。虽然WF的XML遵循XAML命名空间的约定,但包含和WF相关的XML的文件名通常都使用.xoml文件扩展名来进行命名。这种做法能让自动化工具把该文件解释为一个工作流文件而不是一个外观(presentation)文件。事实上,我们将在本章中使用的一个工具,它叫工作流编译器(wfc.exe),在创建基于XAML的工作流时它要求使用.xoml类型的文件。

尽管列表16-1不是对工作流的声明,但要仔细看看你看到的XML。注意该XML元素的名称和.NET WPF类中支持的名称是相同的,在本例子中它是Button。还值得一提的是该按钮的属性将由XAML文件进行解释,它们是:FontSize,Margin和Foreground。通过改变这些属性或者添加其它属性,我们能非常容易地修改该按钮的特性。

基于工作流的XAML文件也有同样的特点。XML元素的名称代表了像CodeActivity或者IfElseActivity之类的活动类型。和你可能期望的一样,每一个元素能够包含它们的属性以及它们的值。至于工作流的结构,组合活动将会有子XML元素,而基本活动则没有。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索xml
, 文件
, xaml
, 应用程序
, 工作流
, #工作流
基于
,以便于您获取更多的相关知识。

时间: 2024-09-19 08:20:38

WF从入门到精通(第十六章):声明式工作流的相关文章

WF从入门到精通(第六章):加载和卸载实例

学习完本章,你将掌握: 1.理解工作流实例为什么要卸载和重新加载及其时机 2.理解工作流实例为什么要持久化及其时机 3.搭建SQL Server 2005,使其为WF和工作流持久化提供支持 4.使用SqlWorkflowPersistenceService服务 5.在你的工作流代码中进行实例的加载和卸载 6.使持久化服务能自动地加载工作流实例及卸载空闲中的工作流实例 假如你花点时间真正考虑该怎样使用WF和工作流在你的应用程序中进行处理的话,你或许想像的许多解决方案中都包含那些需长时间运行的处理过

WF从入门到精通(第三章):workflow实例

学习完本章,你将掌握: 1.使用不带参数和带参数二种方式初始化一个workflow实例 2.测定你运行中的workflow实例的状况 3.停止workflow实例 4.确定你的workflow空闲或终止的原因 一个workflow实例由一个或多个活动组成.(我们将在第七章开始介绍各种活动:"Basic Activity Operations.")"primary activity"或者"root activity"被称作"workflo

Scala入门到精通——第十六节 泛型与注解

本节主要内容 泛型(Generic Type)简介 注解(Annotation)简介 注解常用场景 1. 泛型(Generic Type)简介 泛型用于指定方法或类可以接受任意类型参数,参数在实际使用时才被确定,泛型可以有效地增强程序的适用性,使用泛型可以使得类或方法具有更强的通用性.泛型的典型应用场景是集合及集合中的方法参数,可以说同java一样,scala中泛型无处不在,具体可以查看scala的api 1 泛型类 //单个泛型参数的使用情况 class Person[T](var name:

Scala入门到精通——第二十六节 Scala并发编程基础

作者:摇摆少年梦 视频地址:http://www.xuetuwuyou.com/course/12 本节主要内容 Scala并发编程简介 Scala Actor并发编程模型 react模型 Actor的几种状态 Actor深入使用解析 1. Scala并发编程简介 2003 年,Herb Sutter 在他的文章 "The Free Lunch Is Over" 中揭露了行业中最不可告人的一个小秘密,他明确论证了处理器在速度上的发展已经走到了尽头,并且将由全新的单芯片上的并行 &quo

WF从入门到精通(第十七章):关联及本地主机通信(上)

学习完本章,你将掌握: 1.了解工作流关联(correlation)以及在什么地方必须去使用它.它为什么是重要的 2.使用工作流关联参数(correlation parameters) 3.生成并使用相关的本地通信服务 贯穿本书你看过的应用程序普遍都是基于单一相同架构的,通过WF的支持在工作流实例中执行任务.这些都是在应用程序和它的工作流实例间进行一对一的通信.假如你和一个工作流实例进行通信,你这样做保证了无论以任何方式在应用程序和工作流之间传送数据都不会被混淆.一个应用程序对应一个工作流. 但

WF从入门到精通(第十三章):打造自定义活动(一)

学习完本章,你将掌握: 1.了解对于创建一个功能齐全的自定义工作流活动来说哪些组件是必须的 2.创建基本的自定义工作流活动 3.在基本的自定义工作流活动中应用验证规则 4.把基本的自定义工作流活动集成到Microsoft Visual Studio的工作流视图设计器和工具箱中 WF并不可能涵盖到你可能在你的工作流中想要实现的各个方方面面.即使WF对于开发社区来说仍是非常新的技术,但目前已经可以获得许多免费发布的自定义活动,可以肯定商业级的活动最终也会跟进. 在这章中,你将通过创建一个新的工作流活

WF从入门到精通(第十一章):并行活动

学习完本章,你将掌握: 1.理解在工作流环境中Parallel活动是怎样执行的,并且懂得如何使用它们 2.并行执行路径中的同步数据存取和临界代码区 3.使用ConditionedActivityGroup活动去执行根据条件表达式判断执行路径的并行活动 在本书中截止目前为止,我们仅仅处理过顺序业务流程.如活动A执行后转到活动B的执行等等.我们还没看到过并行执行路径和由此通常伴随而来的错综复杂的情况.在本章中,我们将看看并行活动的处理过程,以及看看怎样对横跨并行执行路径的共享信息进行同步存取. 使用

WF从入门到精通(第五章):workflow跟踪

学习完本章,你将掌握: 1.workflow的可选服务 2.创建一个事件跟踪数据库 3.激活事件跟踪服务 4.创建一个自定义跟踪 5.查看你的workflow的跟踪信息 目前为止,我们看过workflow的一些基本对象.我们通过活动创建workflow任务,它们在执行时由WorkflowInstance对象进行管理.workflow实例由WorkflowRuntime编入队列并进行控制.但WF不只是为我们提供了这些对象,它也为我们提供了一些服务来和这些对象一起协同工作. 可插拔(可选)服务 工作

WF从入门到精通(第四章):活动及workflow类型介绍

学习完本章,你将掌握: 1.workflow活动是怎样形成的 2.顺序工作流和状态机工作流之间的区别 3.创建一个顺序工作流 4.创建一个状态机工作流 活动是WF中workflow处理的基本单位,假如你再把一个业务处理过程(或workflow任务)进行分解,你会发现它由更小.更细的任务组成.假如需设计这样一个大的任务,它需把信息送到一系列的数据处理系统进行处理,那么子任务或许就包括这样一些事情:从数据库读取数据,使用这些数据生成一个文件,通过使用FTP或XML Web service把文件传到一

WF从入门到精通(第十三章):打造自定义活动(二)

FtpGetFileActivity类 using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Net; using System.ComponentModel; using System.ComponentModel.Design; using System.Workflow.ComponentModel; using System.Workflow.Com