WF 4.0 beta1活动概览(1):Procedural

相比于WF 3.5,WF 4.0 beta1提供了大量开箱即用的活动,我们可以使用这些活动来创作工作流或者创建自定义活动。本文将会对这些活动做一个简单快速的概览,并介绍它们的关键特性。

活动是工作流程序的工作单元。在WF 4.0中,活动由签名和正文组成。签名是活动的公共参数的术语化定义,这些公共参数定义了活动的输入和输出数据流。而正文则是指活动的执行逻辑,此逻辑可以用其他活动声明性地表示,也可以通过代码来表示。

下面按照WF 4.0 beta1在Visual Studio 2010工具栏中的分类来简单地介绍一下这些内置活动。

Procedural

程序性活动提供了一种模拟顺序流控制的机制,我们已经在使用标准编程语言(比如C#、VB)的过程中对这种流控制非常熟悉了。程序性活动包含了可以用来表示顺序行为的基本构造块,覆盖的方面包括流控制、对CLR对象的方法调用、集合维护以及错误处理。它还涉及了一些高端场景,比如并行活动、事务管理、补偿、取消以及持久性。下表包含了Procedural分类中的所有活动。描述中的粗体字表示最重要的参数。

活动 描述 设计器外观
集合管理
AddToCollection<T> 向Collection中添加 Item。  
RemoveFromCollection<T> 将Item 从Collection中移除。
ClearCollection<T> 清空Collection,将其中存储的所有子项都移除。
ExistsInCollection 验证中Collection是否存在Item 。如果子项存在,活动的Result 参数就会被赋值为True。
流控制
If If活动会根据一个Boolean类型的表达式来执行一个子活动。

如果Boolean 表达式-Condition 计算为 True (并且配置了Then活动),就会计划执行Then”活动。如果表达式计算为False(并且设置了Else活动),就会计算Else活动。

DoWhile 重复执行其 Body 直到 Condition 计算为 True。Body至少会执行一次。  
ForEach / ForEach<T> ForEach活动包含一个Values 列表以及一个Body。在运行时,该列表会进行被循环,并且Body会为列表中的每一个值都执行一次。
Pick Pick活动在WF中提供了基于事件的流控制模型。 Pick唯一有效的子活动是PickBranches。

在Pick开始执行时,其Branches 的所有Trigger活动都会被计划执行。当第一个Trigger完成了其计划执行的相应Action活动之后,所有其他Trigger活动就都会被取消。

PickBranch PickBranch表示Pick活动的一个分支。它由Trigger 和Action组成。PickBranch 只能被添加到Pick活动中。
Sequence Sequence活动允许一个或多个 Activities按照顺序执行。
Switch<T> Switch活动和c#的switch 语句很像。它包含一个Expression 和一组Cases (每个case都有一个键和一个活动)。当表达式计算完后,Switch活动就会查找匹配表达式结果的 Case,如果找到,就执行与该Case相关联的活动。
While 当Boolean类型Condition 的计算为True时,While 活动就执行其 Body。
并行执行
Parallel Parallel活动允许它的子活动并行执行。它会在开始执行时计划其Branches 集合中的每一个WorkflowElement的执行。当所有Branches都完成或其CompletionCondition 属性计算为True时,它就会完成执行。  
ParallelForEach /  ParallelForEach<T> ParallelForEach 活动会遍历其Values集合并为该集合中的每一个元素都执行一个 Activity,它的执行方式和ForEach很像。主要的区别是嵌入的语句是以并行模式执行的。

就像Parallel活动那样,ParallelForEach也有一个 CompletionCondition,所以 ParallelForEach 活动可以提前完成,条件是CompletionCondition返回True。 CompletionCondition会在每次迭代完成后进行计算。

错误处理
TryCatch TryCatch 活动类似于c#中的try..catch 结构:所有位于Try块中的的活动都会被执行,如果发生了异常,就会计划执行最为匹配的Catch 块(如果没有发现匹配的Catch,工作流就会被中断)。所有Catch块都位于一个名为Catches的集合中。

TryCatch活动还有一个Finally 块,它会在Try(以及可能执行的Catch)之后执行。

关于未被处理的异常的提示:

TryCatch 提供了工作流级别的异常处理机制。当抛出未被处理的异常时,工作流就会被中断,因此Finally块也就不会被执行。此行为也和c#中的Try..Catch结构保持一致。

Catch<T> 表示用于 TryCatch活动中的一个Catch。如果Try元素中抛出了一个异常,TryCatch就会尝试根据抛出异常的类型来寻找一个与之匹配的 Catch 元素。

Catch<T>只能用于TryCatch活动中。

Throw Throw 活动会在工作流中抛出一个异常。Throw 活动包含一个Exception 属性,该属性包含了将会在执行时抛出的异常。
实用工具
Assign Assign活动会将其Value 参数的值赋值给其To 参数。

这两个参数的类型必须是兼容的。这种兼容性会在运行期间进行验证。

Delay Delay活动,顾名思义,会将当前工作流的执行阻止一段时间,这段时间是由用户通过其Duration参数指定的。延时过期后,工作流就会继续执行。Delay的延时应该被设置为一个TimeSpan值。
InvokeMethod / InvokeMethod<T> InvokeMethod 是一个允许我们调用一个现有的CLR方法和静态方法的活动。想要调用一个方法,我们所需要做的就是提供方法的所有者信息(静态方法为TargetType ,实例方法为TargetObject )、 MethodName以及该方法的Parameters。

InvokeMethod支持下面几种方法调用场景:

公共的实例方法和静态方法

通过值或引用传递的参数

对参数数组的支持

对泛型参数的支持

异步方法调用

WriteLine 将文本输出到配置好的输出控制台中。

输出到System.Console的背后:

WriteLine 有一个TextWriter 参数,它可以配置为不同的输出。例如,我们可以将TextWriter属性配置为发送文本到ASP.NET 页面。如果没有设置TextWriter ,就会选用其默认值-System Console。

高级(取消、补偿、事务以及持久性)
CancellationScope CancellationScope 活动包含两个主要部分,Body 和 CancelHandler。Body包括正常执行的活动。如果活动被取消,就会执行CancelHandler。
CompensatableActivity CompensableActivity用来定义一个可能长期运行的活动,同时还会伴随着 Compensation 和 Confirmation 逻辑。

Compensation 允许用户指定执行纠正操作的活动,该活动将会在Body 成功完成之后执行。

Compensate Compensate用来显式地调用CompensableActivity的补偿处理程序。
Confirm Confirm用来显式地调用CompensableActivity的确认处理程序。
Persist 持久化工作流实例。会根据执行中的WorkflowInstancethe (此活动不包含任何参数)的配置来完成工作流的持久性。
TransactionScopeActivity TransactionScopeActivity 提供了初始化新事务、构建事务处理环境(一个工作流执行属性)以及在TransactionScope活动的Body 完成之后调用事务的完成操作。

TransactionScopeActivity 支持“要求”语义。如果已经有一个环境事务在使用中,否则就创建一个新的事务。

嵌套的事务范围

TransactionScopeActivity 可以嵌套于另一个TransactionScopeActivity中。一个嵌套于另一个TransactionScopeActivity 中的TransactionScopeActivity 将会使用现有的事务。

本文到此暂时告一段落,下一篇文章我们接着来概览WF 4.0 beta1提供的其他几类活动:Flowchart、Messaging、PowerShell和Migration。

本文翻译自:http://blogs.msdn.com/endpoint/archive/2009/05/29/a-tour-on-the-wf4-activity-palette.aspx

时间: 2024-09-11 08:10:28

WF 4.0 beta1活动概览(1):Procedural的相关文章

开源社区电子商务系统ECMall 2.0 beta1 版正式发布

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 国内领先的电子商务解决方案服务商ShopEx,今日发布旗下开源社区电子商务软件ECMall 2.0 beta1版本,该版本是EC团队加入ShopEx之后开发又一全新版本. ECMall 2.0 beta1版针对之前用户反馈的相关问题进行了相应的修正与改进,新版本中重新设计了底层结构,大大提高了扩展性;重新设计了MVC中的M层,大大简化了数据存

Silverlight 2.0 beta1 堆栈

在网上看到的一张非常详细的描述Silverlight 2.0 beta1堆栈的图: 原图所在地址:http://pages.infinit.net/ctech/20080305-0415.html 欢迎大家关注微信号opendotnet,微信公众号名称:dotNET跨平台.扫下面的二维码或者收藏下面的二维码关注吧(长按下面的二维码图片.并选择识别图中的二维码)

百度杀毒1.0 Beta1发布 限制名额下载体验

第1页http://www.aliyun.com/zixun/aggregation/12670.html">百度杀毒1.0 Beta1发布 限制名额下载体验 [天极软件频道消息]2013年2月,百度面向泰国市场推出英文版百度杀毒软件2013(Baidu Antivirus 2013),近日,中文版百度百度杀毒1.0 Beta1发布,目前提供有名额限制的下载体验. 据悉,百度杀毒是百度与卡巴斯基合作出品的全新杀毒软件,采用卡巴斯基反病毒引擎,集合了百度云查杀引擎,软件永久免费. 百度杀毒目

OpenNode 6.0 beta1发布 服务器的虚拟化工具

OpenNode是一个服务器的虚拟化工具,提供了一个易于使用(基于CentOS/RHEL)裸机的ISO安装程序,支持OpenVZ基于容器和同一个主机的KVMhttp://www.aliyun.com/zixun/aggregation/13883.html">虚拟化技术.OpenNode ISO安装程序可以建立一个最小的CentOS 5服务器系统,具有以下特点:RHEL 2.6.18内核修改.以支持OpenVZ和KVM虚拟化技术.OpenVZ和KVM虚拟机管理程序.libvirt管理界面支

phpMyAdmin 4.4.0 beta1 发布,MySQL 管理工具

phpMyAdmin 4.4.0 beta1 发布,此版本包括大量的 bug 修复. 值得关注的新特性: Rename configuration directive from $cfg['NavigationTreeDisableDatabaseExpansion']to $cfg['NavigationTreeEnableExpansion'] -- if used, please update your config.inc.php Move the SQL scripts to crea

EJB3.0新规范概览及其未来发展

规范 引言 期待已久的EJB3.0规范在最近发布了它的初稿.在本文中将对新的规范进行一个概要性的介绍,包括新增的元数据支持,EJBQL的修改,实体Bean模型访问bean上下文的新方法和运行时环境等等.作者还讨论了EJB在未来要作出的调整以及EJB3.0与其他开发规范之间的关系. 开始 无论如何由于EJB的复杂性使之在J2EE架构中的表现一直不是很好.EJB大概是J2EE架构中唯一一个没有兑现其能够简单开发并提高生产力的组建. EJB3.0规范正尝试在这方面作出努力以减轻其开发的复杂性.EJB3

WF 4.0 基础篇(十四) Delay与WF4中的线程

本节主要介绍WF的实例是单线程运行的,Delay并不是Thread.Sleep,Parallel是单线程运行的,WorkflowApplication与WorkflowInvoker 在调用流程上的区别,InvokeMethod 调用异步方法 本文例子下载: http://files.cnblogs.com/foundation/DelayAndThreadWorkflow.rar 本文例子说明 WF的实例是单线程运行的 在WF3.x与WF4.0中,工作流实例都是单线程执行的 很多时候,[Par

WF 4.0基础篇(四) 顺序容器Sequence与CodeActivity

本节主要介绍如何在WF4.0的流程中添加多个Activity,以及如何自定义Activity 本文例子下载: http://files.cnblogs.com/foundation/SequenceSample.rar http://files.cnblogs.com/foundation/CodeActivitySample.rar 顺序容器Sequence 与CodeActivity 顺序容器Sequence 类名 System.Activities.Statements.Sequence

C#中的泛型 (From dotNet SDK 2.0 Beta1)

泛型(generic)是C#语言2.0和通用语言运行时(CLR)的一个新特性.泛型为.NET框架引入了类型参数(type parameters)的概念.类型参数使得设计类和方法时,不必确定一个或多个具体参数,其的具体参数可延迟到客户代码中声明.实现.这意味着使用泛型的类型参数T,写一个类MyList<T>,客户代码可以这样调用:MyList<int>, MyList<string>或 MyList<MyClass>.这避免了运行时类型转换或装箱操作的代价和风