Workflow之Activity

——SequenceWorkflowActivity
活动是Windows Worklow的基本组成块,准确的说,顺序工作流本身就是一个活动-SequentialWorkflowActivity.SequentialWorkflowActivity类继承自SequenceActivity类, SequenceActivity类又继承自CompositeActivity类.这些超类规定了顺序工作流的行为和特征.如下面的类图:
Workflow之Activity
继承自CompositeActivity类的活动可以包含一个或者多个子活动。顺序工作流通常包含多个子活动,而且子活动也可以是CompositeActivity
继承自SequenceActivity类的活动可以向前遍历其子活动,SequenceActivity一旦执行完一个子活动就跳转至下一个子活动,当最后一个子活动执行完毕后结束。SequenceActivity没有跳转至任意活动的功能。
WhileActivity
继承自CompositeActivity,但是没有继承SequenceActivity,因此可以包含多个子活动,但是只能执行一个子活动。想要在WhileActivity中执行多个Activtiy的话,可以将这些Activity放在Sequence Activity内部,然后把Sequence Activity放在WhileActivity内部。
有一类基本活动库的Activity是基于Condition,这些Activity包括:WhileIfElseConditionedActivityGroupReplicator
这些Actovoty有一个Condition属性,Condition属性包含CodeConditionDeclarative Rule ConditionReference两个选项,它们表示两种描述条件的技术,前者需要一个返回Boolen值得方法,后者则使用规则,Declarative Rule ConditionReference,规则条件(Rule Condition)是一个被命名的表达式,这个表达式返回True或者False,而且定义在外部文件(.rules)中。对于Code Condition,在WF中,代码通过对ConditionalEventArgs参数的Results属性进行设置True或者False来控制条件。
——CodActivity
重要属性:ExecuteCode事件;
不提倡CodeActivity大量使用,而是将其封装在自定义活动中,自定义活动可以有自己的属性,而且可以重复使用。
——IfElseActivityWhileActivitySequenceActivity
重要属性:Condition
对于Condition的设置有两种情况:
1、Code Condition:用编程来实现其判断条件,在Condition的子属性里需要填写一个方法名称,在该方法种进行判断和赋值。通过对e.Result赋值为true或者false来确定时否满足该条件。
2、Declarative Rule Condition:设计器会将其以XML格式保存到一个外部的.rule文件中。可以从属性面板中启动规则条件编辑器(Rule Condition Editor),然后输入相应的表达式。举例:若工作流中有一个整型属性K,可以输入这样的表达式this.K>0
IfElseActivity
对于每个分支都有一个Condition属性,并且从左向右判断子分支的条件,并且执行第一个满足条件的分支,如果所有的分支都不满足条件,则都不会被执行,在这种情况下,如果最后一个分支没有设置条件,它将会被执行。
WhileActivity
Condition属性与IfElseActivity的设置相同。WhileActivity每次循环之前判断其条件是否满足,满足则一直执行。
WhileActivity
只能拥有一个子活动,我们可以将多个子活动放在一个SequenceActivity文件中,然后再放入WhileActivity
——SuspendActivity
重要属性:Error
挂起工作流,当工作流遇到错误需要手动干预时,使用SuspendActivity
宿主可以订阅WorkflowRuntimeWorkflowSuspended事件,并通过其事件参数(WorkflowSuspendedEventArgs类型)Error属性获取错误信息。该事件中可以使用e.WorkflowInstance.Resume()方法来使工作流恢复执行,也可以使用e.WorkflowInstance.Terminate(e.Error)来提前结束。
——TerminateActivity
重要属性:Error
终止工作流,当工作流执行到不可能继续执行,不可能恢复的情况下使用。
宿主可以订阅WorkflowRuntimeWorkflowTerminate事件,并通过其事件的参数(WorkflowTerminatedEventArgs类型)Exception属性获取错误信息。
如果想要指定引发WorkflowTerminated事件的异常类型,应该使用Throw活动.Throw活动可以使工作流捕捉到异常并继续执行,Terminate活动则总是抛出异常并终止工作流。
——ThrowActivity
重要属性:
Fault
Fault属性可以引用要抛出的异常类型.我们可以绑定Fault属性到工作流的域或其它活动的属性.
FaultType
FaultType属性来描述并约束待抛出异常的类型.如果FaultType没有被设置,Throw活动可能抛出任何类型的异常
抛出异常在其他Code中都可以做,但是ThrowActivity不仅可以抛出异常还可以在工作流模型中构造一个显式的异常块。
如果异常没有被处理并且传播到工作流之外,那么WF Runtime将捕获它,接着终止工作流并抛出WorkflowTerminated事件.Runtime会在WorkflowTerminated事件的参数中包含异常的信息.
——InvokeWorkflowActivity
重要属性:TargetWorkflow :引用想要执行的工作流类型。
Invoking
:事件、在该事件内可以编写代码初始化参数。
用途:异步的执行另一个工作流;
我们可以选择当前项目内部的工作流类型或者引用程序集的工作流类型,设置了目标工作流类型之后,属性面板会列出目标工作流类型的参数,可以将其与当前工作流的域或属性绑定。在开始第二个工作流之前,InvokeWorkflowActivity将触发Invoking事件,可以在此事件内编写代码初始化参数。
InvokeWorkflow
活动允许我们独立的执行一个工作流.举例来说,一个软件bug跟踪工作流在每次新的build到达时都可能要进行好几中不同类型的测试,而其中每一种测试都可能被设计为一个工作流。
——ParallelActivity
用途:允许多个Activity并行执行。
在工作流内部只有一个线程执行,所以ParallelActivity并没有采用多线程机制,并不是真正意义上的并行。对分支的执行需要其它Activity,或者等待相应的事件。当所有的分支都执行完毕,ParallelActivity的执行才算结束。
——DelayActivity
重要属性:TimeOutDuration:值为TimeSpan类型,表示需要等待的时间。可以在设计器中初始化这个属性,也可以以编程的方式在InitialiazeTimeoutDuration事件中更改此属性的值,如例:
InitialiaeTimeoutDuration
:事件名称,可以设置TimeoutDuration的值。
用途:初始化一个计时器并等待其到期,可以用来模拟超时。经常用在ListenActivity内部。
——ListenActivity
ParallelActivity一样包含多个分支,不同的是ListenActivity只执行一个分支,ListenActivity的分支是EventDrivenActivity。当一个分支最先执行完毕时,ListenActivity会执行相应的分支事件并取消其它分支的执行。
EventDrivenActivity
的特点是必须以事件的到达为其开始的条件(即其第一个子活动必须实现IEventActivity接口)
——EventHandlingScopeActivity
包含一个主要子活动,错误处理程序和取消处理程序。并且可以包含多个等待事件的分支,可以用右键单击查看不同的事件处理程序,在其主要子活动(默认视图显式的内容)未执行完之前会一直监听其余的事件,这一点是EventHandlingListen的主要区别。
——SynchronizationScopeActivity
——ReplicatorActivity
——FaultHandlersActivity
重要属性:FaultType,指定将要捕获的异常类型,若设置为System.Exception,则可以捕获所有的异常。
Fault
:可以将异常绑定到工作流的域或者属性中。
类似于编程中的Try...Catch...语句。
使用错误处理程序来捕捉这些异常并尝试做一些“修复工作.我们可以补偿提交的事务,或者发送Email来警告管理员并等待丢失的数据被修复,工作流中对可能发生的错误进行处理,如果工作流抛出了一个异常,而我们又不知道如何去处理,那么只能等Runtime终止工作流。
——TransactionSopeActivity
——CompensatableTransactionScopeActivity
——CompensateActivity
——ConditionedActivityGroup
——PolicyActivity
WebService相关的Activity
——InvokeWebServiceActivity
——WebServiceInputActivity
——WebServiceOutputActivity
——WebServiceFaultActivity
state相关的Activity
——StateActivity
——StateInitializationActivity
——StateFinalizationActivit
——EventDrivenActivity
——SetStateActivity
本地通讯相关的Activity
——CallExternalMethodActivity
——HandleExternalEventActivity

你可能感兴趣的:(Activity)