昨夜飘风
昨 夜, 风, 飘 过; 枯 树, 叶, 飞 落。

概要性地讨论一下WF工作流的基石——活动。活动是离散的、可复用的组件,它被设计来实现特定的功能。WF包括了一组标准的活动,可以在我们的工作流中起到杠杆的作用。我们自己也可以自定义一些活动,来解决特定的业务问题。

 

抛开活动的来源(标准的或自定义的),我们在设计时使用它们的经历是相同的。我们将一个活动拖放到工作流中,然后在Visual Studio的属性窗口中设置它们的属性,控制它们运行时的行为。

 

一个能够寄宿其它活动的活动(真绕口L)被称作复合活动(composite activity)。没有这种能力的活动就称为简单活动(simple activity)。有些活动还允许我们向工作流类中添加代码,比如CodeActivity,如果我们不给它设置ExecuteCode,那么编译是不会进行的。

 

标准活动(Standard Activities

让我们来看一看WF提供的标准活动。这里并不是要介绍每一种活动的详细用法,而是走马观花地进行一番概览。为了表述方便,将所有的活动分类介绍

 

l  Custom Workflow Logic

特指CodeActivity。利用它我们可以直接向工作流添加我们自己的业务逻辑。将CodeActivity添加到工作流后,我们就得到了一个处理ExecuteCode事件的句柄,并可以向其添加代码。

 

l  Flow Control

顾名思义,控制工作流中数据流向的活动。包含了一些我们非常熟悉的编程结构,比如分支和循环。同时还有诸如并行、延时、中断、挂起等活动,它们以自己的方式来控制整个流程的进行。

 

n  IfElseActivityIfElseBranchActivity

这个我们在前面的Calculator中已经看到了。利用它可以构建多选条件分支。这是一个复合活动,包含有两个或更多的IfElseBranchActivity,在运行时,只有一个确定的分支会被执行。

 

IfElseBranchActivity包含了一个我们自己定义的条件,如同前面指出的,这个条件可以是代码形式定义的,也可以是规则定义的。一旦条件被评定为“真”,那么该条分支中包含的子活动就会被执行,其它分支就被华丽的54掉;评定为“假”的时候,它的下一条分支的条件将被评定。最终的分支不需要定义条件,只要前面的分支条件都不满足,它就会被视为if-elseif-else组合中的最后一个“else”。

 

n  WhileActivity

当条件为真的时候,循环执行它的子活动。同样的,它的条件可以是代码形式也可以是规则形式。该条件是在进入子模块之前就判断的,也就是说初始条件若为false,那么它内部包含的活动不会被执行。

 

n  DelayActivity

暂时中止工作流的执行一段时间。常被用来设定一段延时,等待外部事件。

 

n  SequenceActivity

一个能够允许我们添加多个顺序执行的自活动的复合活动。可以看做是WPF中的“容器”,有些只能接受一个子活动的活动比如ReplicatorActivityWhileActivityParallelActivity,可以用这种方法来添加“多个”子活动。

 

n  ParallelActivity

允许我们计划两个或更多的子分支同时执行。

 

n  ReplicatorActivity

此活动创建并执行单个子活动的多个副本。在运行时,它可以基于数据集的对象数目来创建子活动的多个实例。有了这个东东,开发者就可以采用数据驱动的数据流(data-driven workflow),其特点是子活动实例的数量只有在运行时才能确定。从这一点上说,它很像C#中的foreach语句。

 

n  ConditionedActivityGroup

简称CAG,用来有条件地执行一系列子活动。每一个子活动都与一个WhenCondition进行关联,凡是满足WhenCondition的子活动都会被执行,而非if-else那样只能执行其一。

 

n  InvokeWorkflowActivity

用来启动第二个工作流。第二个工作流是异步执行的,所以这个活动会在新工作流完成之前返回。

 

n  SuspendActivity

停止当前工作流的执行,但并不是永久中断。常用在工作流出错但这个错误又是可以恢复的地方,工作流可以从断点重新启动。

 

n  TerminateActivity

立即停止工作流实例的执行,并且是“终结”,不能再次恢复。

 

l  Statement Management

这一类活动都是在状态机工作流中使用的。包括的活动被用来定义、初始化和完成一个状态,或是转移到另一个状态。

 

n  StateActivity

代表一个单一的状态,也是状态机工作流的基础。StateActivity通常被添加进状态机工作流的顶级,但也可以塞进另一个StateActivity里。

 

n  SetStateActivity

被用作转移状态。通过设置TargetStateName属性来指定新的状态。

 

n  StateInitializationActivity

这是一个可选的活动,包含有当首次进入到一个状态时要执行的活动。一个StateActivity里最多只能定义一个。

 

n  StateFinalizationActivity

与上面那个活动相反,它定义的是离开某个状态之前需要执行的业务。

 

l  Event Handling

这一类活动与事件句柄相关,并且需要与接收这些事件的子活动一起工作。这里提到的活动本身并不实际接收这些事件,它们只是另一些事件驱动(event-driven)活动的容器。下面提到的活动解释都比较复杂,我暂时也搞不清楚,在这里仅仅列出名称,详情还请参阅MSDN

 

n  ListenActivityEventDrivenActivity

n  EventHandlersActivityEventHandlingScopeActivity

 

l  Local Service Communication

用来在一个工作流和一个本地服务之间进行通讯。

 

n  CallExternalMethodActivity

n  HandleExternalEventActivity

 

l  Rules

一类用于联系工作流规则引擎的活动。特指PolicyActivity,可以允许我们定义一组规则,作用于工作流的字段或属性之上。

 

l  Web Services

这一类活动使得我们的工作流可以与web服务进行交互。

 

n  InvokeWebServiceActivity

n  WebServiceInputActivity

n  WebServiceOutputActivity

n  WebServiceFaultActivity

 

l  Transactions, CompensationSynchronization

这一类活动可以是我们能够定义一个包括了多个活动的工作单元。同时也包括对变量的同步访问。Compensation的功能是对已经成功执行的行动进行undo

 

n  TransactionScopeActivity

n  CompensatableTransactionScopeActivityCompensatableSequenceActivity

n  CompensateActivityCompensationHandlerActivity

n  SynchronizationScopeActivity

 

l  ExceptionsError Handling

这些活动与.NET异常协同工作。

 

n  ThrowActivity

可以作为一个工作流步骤抛出一个.NET异常。与使用C#代码throw异常的结果是一样的。

 

n  FaultHandlerActivityFaultHandlersActivity

这两个活动用来捕捉和处理工作流内部的.NET异常。后者包含了前者对象的集合,是一个复合活动。

 

n  CancellationHandlerActivity

是一个用来清除与复合活动联系的容器(抱歉我也没看懂 --

 

标准活动就介绍至此。后续的短文中会穿插介绍自定义活动的开发。

posted on 2008-02-25 17:09  昨夜飘风  阅读(1163)  评论(0编辑  收藏  举报