WF从入门到精通(第四章):活动及workflow类型介绍2010-06-03 cnblogs GuoYong.Che学习完本章,你将掌握:1.workflow活动是怎样形成的2.顺序工作流和状态机工作流之间的区别3.创建一个顺序工作流4.创建一个状态机工作流活动是WF中workflow处理的基本单位,假如你再把一个业务处理过程(或workflow任务)进行分解,你会发现它由更小、更细的任务组成。假如需设计这样一个大的任务,它需把信息送到一系列的数据处理系统进行处理,那么子任务或许就包括这样一些事情:从数据库读取数据,使用这些数据生成一个文件,通过使用FTP或XML Web service把文件传到一个远程服务器上,标记信息已经被处理(如通过写入数据库并进入审计步骤),等等。这些子任务都聚焦到一个特定的任务上:读数据库、上传文件、进行审计。换句话说,它们是活动。当你创建workflow时,你会把这些单独的活动捆在一起,并让活动从一个转到另一个。一些活动可作为其它活动的容器。一些活动执行一个单一任务,这我们已谈过。基于容器的活动用来容纳其它活动,在前一章中我们谈及的root活动就是这种活动。root活动既可是一个顺序活动也可是一个状态机活动,本章中我们将对这些活动的类型进行说明。活动怎样知道在本步骤完成后下一步将做什么呢?本章将主要把焦点放在这上面上。或许活动会以你创建一个root活动时指定的顺序执行,或者可能是仅在一个特定的事件发生后才去执行一个指定的活动。为了让我们更好地理解活动,我们首先要去看看WF Activity对象,然后看看活动是怎样链接在一起的。活动介绍:基本的工作单位WF为你提供了一个Activity对象。Activity实现了一个看起来很简单的基类。它不会做许多智能任务,但它可进行workflow的相互交互(这可不简单)。活动对象由“Activity”派生,提供出了强悍的功能。你可自如地创建你自己的活动,这个话题将在第13章(自定义活动)进行介绍。事实上,本书的第二部分都是在介绍活动(第7章至第13章)。表4-1列出了许多我们通常感兴趣的Activity的属性,表4-2列出了你会经常用到的方法。在第13章,你还会看到更多的和自定义活动相关的方法和属性。表4-1 活动(Activity)的属性
属性 | 功能 |
Description | 获取或设置用户定义的关于活动的描述。 |
Enable | 获取或设置一个指明实例能否被执行和验证的值。 |
ExecutionResult | 获取实例最后运行的结果(ActivityExecutionResult)。(有Canceled、Compensated、Faulted、None和Succeeded)。 |
ExecutionStatus | 得到workflow的状态,其为ActivityExecutionStatus的枚举值(Canceling、Closed、Compensating、Executing、Faulting和Initialized)之一。 |
Name | 获取或设置活动实例的名称。 |
Parent | 获取包含本活动的父活动。 |
WorkflowInstanceId | 获取和该活动相关的workflow实例的标识符。 |
表4-2 活动(Activity)的方法
属性 | 功能 |
Cancel | 取消活动的执行。 |
Clone | 返回活动的一个深拷贝。 |
Execute | 以同步方式运行活动。 |
GetActivityByName | 假如在一个组合活动上执行,本方法将返回组合活动中所包含的指定名称的活动。 |
Load | 从一个流中加载一个活动的实例。 |
RaiseEvent | 触发一个和指定的依赖属性相关的事件。 |
RaiseGenericEvent<T> | 触发和所引用的依赖属性相关的事件。RaiseEvent和RaiseGenericEvent的作用是一样的——第一个事件RaiseEvent直接指出DependencyPropenty,而RaiseGenericEvent则是一个泛型版本。 |
Save | 把活动保存到流中。 |
活动的方法通常都具有虚拟和受保护的属性。目的是你可去覆盖它们,使其提供一个符合你自己的活动所需要的实现。目前为止,最关键的方法是Execute。当workflow运行时调用这个方法时,你的活动便开始执行了。活动可被分为两个大类:组合活动和基本活动。组合活动包含其它活动。一个极好的例子是我们目前为止贯穿书中的Sequential活动(译者注:它是基于顺序工作流中所有活动的载体,在创建一个顺序工作流时Visual Studio就已为我们创建好了,可在视图设计器中看到)。目前为止所有的程序实例执行workflow实例的方式都是Sequential活动,它包含其它活动,如它自身、Delay活动和Code活动。基本活动,就像我刚谈到的Delay活动和Code活动,它们是一个基于单一任务的活动,我在本章早些时候谈过它。最终,你需要基本活动去实际承载特定的任务。组合活动或许可指挥任务和数据的流动,但基本活动能做更多。