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

学习完本章,你将掌握:

1.了解对于创建一个功能齐全的自定义工作流活动来说哪些组件是必须的

2.创建基本的自定义工作流活动

3.在基本的自定义工作流活动中应用验证规则

4.把基本的自定义工作流活动集成到Microsoft Visual Studio的工作流视图设计器和工具箱中

WF并不可能涵盖到你可能在你的工作流中想要实现的各个方方面面。即使WF对于开发社区来说仍是非常新的技术,但目前已经可以获得许多免费发布的自定义活动,可以肯定商业级的活动最终也会跟进。

在这章中,你将通过创建一个新的工作流活动来了解WF的个中奥妙,这个活动从远程FTP服务器中检索文件。你将看到在创建你自己的活动时哪些东西是必需的,以及其中哪些部分挺不错。你也将更深入地了解活动是怎样和工作流运行时交互的。

备注:只在一章中对自定义活动开发的每一个细节进行探讨是不可能,这儿简化了太多的细节。不过好消息是,对于得到一个完整功能的活动来说是容易的,这不用知道每一个细节。

关于活动的更多知识

在第四章(活动及工作流类型介绍)中,我们初步了解了一下活动并讨论了像ActivityExecutionContext之类一些话题,ActivityExecutionContext用来容纳一些和正执行的活动相关的一些信息,工作流运行时需要不时对这些信息进行访问。我们这里将对WF活动进行更深入一些的了解。

活动的虚拟方法

在创建自定义活动时首先需要了解的是基类为你提供了哪些虚拟的方法和属性。表13-1显示了活动中被普遍使用的可重写的一些方法。(这里没有虚拟属性。)

表13-1Activity中被普遍使用的可重写的虚拟方法

方法 功能
Cancel 在工作流被取消时被调用。
Compensate 这个方法实际上并不来自于Activity基类,它实际上需要由ICompensatableActivity接口提供,许多活动都从该接口派生。因此,不管出于什么目的和意图,都把它当作Activity的方法。你将实现这个方法以便对失败的事务进行补偿。
Execute 被用来执行活动要去完成的对应的工作。
HandleFault 在活动内部代码抛出一个未经处理的异常时被调用。注意一旦该方法被调用将没有办法重启该活动。
Initialize 在活动被初始化时被调用。
OnActivityExecutionContextLoad 在活动完成了它的工作流程后被调用。当前执行上下文(current execution context)正在转移到另一个活动。
Uninitialize 在活动要被反初始化时被调用。

在你的活动已经被加载到工作流运行时中但在执行之前的时候,假如你需要进行一些特定的处理工作,一个极好的位置是在Initializze方法中做这些事情。你或许也会在Uninitialize方法中执行一些相似的处理工作之外的事情。

OnActivityExecutionContextLoad和OnActivityExecutionContextUnload方法分别表示活动正加载到工作流运行时中和活动正从工作流运行时中移走。在OnActivityExecutionContextLoad被调用之前以及OnActivityExecutionContextUnload被调用之后,从WF的角度来看,该活动是处于卸载状态中。它或许是被序列化到一个队列中、保存进一个数据库中或者甚至是在磁盘上等待被加载。但在这些方法(OnActivityExecutionContextLoad和OnActivityExecutionContextUnload方法)被调用之前或之后它并不存在于工作流运行时之中。

Cancel、HandleFault和Compensate都在显而易见的条件(指取消、失败和补偿条件)激发的时候被调用。尽管Compensate真正用在执行你的事务补偿的地方(看看第15章:工作流和事务),但它们主要的用途都是去执行一些你想去执行的额外的工作(例如日志)。牢记这些方法被调用的时候都太晚了,因为到你的活动被要求对失败进行补偿的时候,你不能对事务进行恢复;你也不能撤销一个未经处理的异常或者终止一个取消(cancle)的请求。所有你能做的是去执行一些清理或者其它处理的请求,就Compensate来说,实际上是为失败的事务提供补偿功能。

Execute是最有可能被重写的Activity的虚拟方法,这只不过是因为这个方法需要你重写以去执行活动应当要去执行的工作。

活动组件

尽管毫无疑问你需要亲自去写自定义活动代码,完整开发的WF活动都带有一些额外的支持和工作流无关的行为的代码,但通常在工作流可视化设计器中都为开发者提供了更丰富的开发体验。例如,你可能想要提供一个验证器对象以便对不适当的活动配置进行检查并返回错误信息;或者你可能需要提供一个ToolboxItem或者ToolboxBitmap以便更好地和Visual Studio工具箱集成。不管你是否相信,通过使用一个专门的设计器类来修改活动的主题,你实际上能够调整你的活动放到工作流视图设计器中的呈现样式。在本章中的示例实现了所有这些东西以对它们的功能和效果进行演示。

时间: 2025-01-01 20:30:28

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

WF从入门到精通(第二章):workflow运行时

学习完本章后,你将掌握: 1.在你的应用程序中使用workflow 2.理解"WorkflowRuntime"对象的的基本功能 3.知道如何启动和停止workflow运行时 4.能够使用各种workflow运行时的相关事件 当你在WF环境中执行任务时,需要一些东西来监管执行的过程,这个东西就是命名为"WorkflowRuntime"的对象.WorkflowRuntime启动一个独立的工作流任务.在你的任务执行过程中,WorkflowRuntime也会针对不同的情况响

WF从入门到精通(第一章):WF简介

学习完本章,你将掌握: 1.了解工作流的概念和理论 2.把WF和BizTalk与WCF做比较 3.开始使用WF进行编程 4.知道怎样使用Visual Studio工作流支持.以下是一小段进行邮政编码验证的代码 string USCode = @"^(\d{5}$)|(\d{5}$\-\d{4}$)"; string CanadianCode = @"[ABCEGHJKLMNPRSTVXY]\D[A-Z]\d[A-Z]\d"; public static bool V

WF从入门到精通(第九章):逻辑流活动

学习完本章,你将掌握: 1.学会怎样使用IfElse活动来执行条件表达式 2.学会怎样使用While活动来执行循环 3.理解Replicator活动是怎样来模拟for循环的,以及它的使用方法. 我们已经看到过怎样执行工作流内部和外部的代码,已经知道怎样处理异常,暂停进程,在事情脱离控制时终止我们的工作流.但无疑对于任何一个计算机系统的主要组成部分来说,都应具有根据运行时的条件做出判断以执行不同的任务的能力.在本章,我们将演示要求我们应付if/else场景及基本的循环的一些工作流活动. 条件及条件

WF从入门到精通

WF从入门到精通(第十九章):把工作流发布为Web服务 WF从入门到精通(第十八章):在你的工作流中调用Web服务 WF从入门到精通(第十七章):关联及本地主机通信(下) WF从入门到精通(第十七章):关联及本地主机通信(上) WF从入门到精通(第十六章):声明式工作流 WF从入门到精通(第十五章):工作流和事务 WF从入门到精通(第十四章):基于状态的工作流 WF从入门到精通(第十二章):策略和规则 WF从入门到精通(第十三章):打造自定义活动(二) WF从入门到精通(第十三章):打造自定义活

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

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

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

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

WF从入门到精通(第十二章):策略和规则

1.知道在工作流处理过程中怎样进行策略和规则的处理 2.理解前向链接以及这是如何影响到基于规则的工作流处理过程的 3.为工作流处理过程创建规则 4.结合Policy活动来使用规则 我敢肯定,我们中的大多数人编写面向过程的代码(imperative code)都很轻松自在.过程式代码指通过编程来实现业务处理过程的C#代码,例如,读取一个数据库表,增加这个表中某些列的值,然后把它们统统都写到另一个数据库的表中. 但在本章,我们将深入规则,规则是对工作流的执行进行控制的一种机制,但它被看作是声明性的(

WF从入门到精通(第七章):基本活动的操作

学习完本章,你将掌握: 1.知道怎样使用Sequence活动 2.知道怎样使用Code活动 3.知道在工作流中怎样抛出异常并对其进行处理 4.知道如何在代码中暂停和终止你的工作流实例 在本章,我们将正式引入前面已经看到过的一组活动:Sequence活动和Code活动.但我相信,适当的错误处理对于精心设计和运行良好的软件是至关重要的,所以我们将会研究如何使用工作流中的活动抛出异常.捕获异常.甚至暂停和终止你的工作流.我们就从Sequence活动开始吧. 使用顺序活动对象 实际上,说我们已见过Seq

《PADS 9.5电路设计与仿真从入门到精通》——第一章 绪论 1.1 PCB的基本概念及设计工具

第一章 绪论 PADS 9.5电路设计与仿真从入门到精通 本章主要介绍PADS的基本概念及特点,包括PCB设计的一般原则.基本步骤.标准规范等.着重介绍了美国Mentor Graphics公司的PCB设计软件:PADS 9.5,包括了PADS 9.5的发展过程以及它的新特点.PADS 9.5是一款非常优秀的PCB设计软件,它具有完整强大的PCB绘制工具,界面和操作十分简洁,希望用户好好学习本书,以便更加方便地使用PADS 9.5软件. 1.1 PCB的基本概念及设计工具 PADS 9.5电路设计