Windows Workflow Foundation(5)- 活动和Workflow类型

活动介绍

Windows Workflow Foundation 包含一组默认活动,这些活动提供了有关控制流、条件、事件处理、状态管理以及与应用程序和服务通信的功能。在设计工作流时,可以使用 Windows Workflow Foundation 提供的活动,并且可以创建自己的自定义活动。

活动是工作流的基本构造块。工作流是一组以树状结构分层组织的活动。活动表示工作流中的操作。它可以是延迟之类的简单操作,也可以是由多个子活动组成的复合活动。

与工作流一样,活动可以是顺序的,这意味着其操作顺序在设计时指定。活动也可以是事件驱动的,这意味着其操作顺序是在运行时为响应外部事件而确定的。

每个活动都有一个活动执行上下文,它表示活动的执行环境。活动执行上下文类似于 HTTP 上下文:对象具有状态、一组参数以及它在给定时间点所独有的构造。某些复合活动(如 ReplicatorActivity 活动和 WhileActivity 活动)会在执行期间创建其子活动的多个实例,每个子活动都有其自己的活动执行上下文作为其运行环境。

每个活动还会在其生存期内在各种状态之间进行转换。某些转换是由工作流运行时引擎控制的,而其他转换则可由用户控制,例如将子活动从 Executing 转换为 Closed

下面是活动(Activity)的属性

属性

功能

Description

获取或设置用户定义的关于活动的描述。

Enable

获取或设置一个指明实例能否被执行和验证的值。

ExecutionResult

获取实例最后运行的结果(ActivityExecutionResult)。(有Canceled、

Compensated、Faulted、None 和Succeeded)。

ExecutionStatus

得到workflow 的状态,其为ActivityExecutionStatus 的枚举值(Canceling、Closed、Compensating、Executing、Faulting 和Initialized)之一。

Name

获取或设置活动实例的名称。

Parent

获取包含本活动的父活动。

WorkflowInstanceId

获取和该活动相关的workflow 实例的标识符。

下面是活动(Activity)的方法

方法

功能

Cancel

取消活动的执行。

Clone

返回活动的一个深拷贝。

Execute

以同步方式运行活动。

GetActivityByName

假如在一个组合活动上执行,本方法将返回组合活动中所包含的指定名称的活动。

Load

从一个流中加载一个活动的实例。

RaiseEvent

触发一个和指定的依赖属性相关的事件。

RaiseGenericEvent<T>

RaiseGenericEvent 的作用是一样的——第一个事件RaiseEvent 直接指出DependencyPropenty,而RaiseGenericEvent 则是一个泛型版本。

Save

把活动保存到流中。

下面是 Windows Workflow Foundation 基本活动库中的活动。

活动

说明

CallExternalMethodActivity

与 HandleExternalEventActivity 活动一起使用,以实现与本地服务之间的输入和输出通信。

CancellationHandlerActivity

用于包含在复合活动的所有子活动执行完毕之前取消的复合活动的清理逻辑。

CodeActivity

使您能够向工作流中添加 Visual Basic 或 C# 代码。有

CompensatableSequenceActivity

SequenceActivity 的可补偿版本。

CompensatableTransactionScopeActivity

TransactionScopeActivity 的可补偿版本。

CompensateActivity

使您能够调用代码来撤消或补偿发生错误时已由工作流执行的操作。

CompensationHandlerActivity

为已完成的 TransactionScopeActivity 活动执行补偿的一个或多个活动的包装。

ConditionedActivityGroup

根据应用于 ConditionedActivityGroup 活动本身的条件以及分别应用于每个子活动的条件来执行子活动。

DelayActivity

可用于在工作流中根据超时间隔建立延迟。

EventDrivenActivity

包装在指定事件发生时执行的一个或多个活动。

EventHandlersActivity

提供一个用于将事件与活动关联的框架。

EventHandlingScopeActivity

将其主要子活动与 EventHandlersActivity 活动并发执行。

FaultHandlerActivity

用于处理指定类型的异常。

FaultHandlersActivity

表示一个复合活动,它有一个由类型为 FaultHandlerActivity 的子活动组成的有序列表。

HandleExternalEventActivity

与 CallExternalMethodActivity 活动一起使用以实现与本地服务之间的输入和输出通信。

IfElseActivity

测试每个分支条件,在第一个条件为 true 的分支上执行活动。

IfElseBranchActivity

表示 IfElseActivity 活动的一个分支。

InvokeWebServiceActivity

使工作流能够调用 Web 服务。

InvokeWorkflowActivity

使工作流能够调用其他工作流。

ListenActivity

只包含 EventDrivenActivity 子活动的复合活动。

ParallelActivity

用于计划将两个或更多个 SequenceActivity 子活动分支同时进行处理。

PolicyActivity

用于表示一个规则集合。规则由条件和引起的操作组成。

ReceiveActivity

使用 Windows Communication Foundation (WCF) 实现服务协定操作。

ReplicatorActivity

创建单个子活动的多个实例。

SendActivity

使用 Windows Communication Foundation (WCF) 调用服务的客户端同步操作。

SequenceActivity

提供了一种简单的方法,可将多个活动链接在一起以按顺序执行。

SetStateActivity

指定到新状态的转换。

StateActivity

表示状态机工作流中的一个状态。

StateFinalizationActivity

在 StateActivity 活动中用作容器,以容纳在离开 StateActivity 活动时执行的子活动。

StateInitializationActivity

在 StateActivity 活动中用作容器,以容纳在进入 StateActivity 活动时执行的子活动。

SuspendActivity

挂起工作流的操作,以便能够在出现某种需要特别注意的错误情况时进行干预。

SynchronizationScopeActivity

在同步的域中按顺序执行所包含的活动。

TerminateActivity

使您能够在发生错误情形时立即结束工作流的操作。

ThrowActivity

使您能够捕获作为工作流过程元数据一部分引发的业务异常。

TransactionScopeActivity

提供一个用于事务和异常处理的框架。

WebServiceFaultActivity

用于对 Web 服务错误的发生进行建模。

WebServiceInputActivity

接收来自 Web 服务的数据。

WebServiceOutputActivity

对工作流发出的 Web 服务请求做出响应。

WhileActivity

使工作流能够在条件得到满足之前进行循环。

活动执行上下文(ActivityExecutionContext

ActivityExecutionContext (AEC) 是在主机应用程序调用 Start 方法时为活动创建的执行环境。在workflow 运行时把你要执行的workflow 实例入队的时候 AEC对象被创建,因此,它不是你直接要创建的对象。workflow 运行时为你创建它。

AEC 提供了一种复合活动,该复合活动具有执行 (ExecuteActivity) 或取消 (CancelActivity) 子活动的能力。它也可以通过 CloseActivity 方法来关闭自己。这些是仅有的父活动可以通过 AEC 控制的执行状态更改。所有其他活动状态都是由工作流运行时引擎控制的。

AEC 具有名为 ExecutionContextManager 的属性,使其可以生成新 AEC。这些 AEC 是父活动(如 WhileActivity 活动、ReplicatorActivity 活动或 ConditionedActivityGroup 活动)每次运行其子活动超过一次时生成的。每次迭代都使用其自己的 AEC 创建一个克隆的活动,因此子活动的这些不同实例可以独立运行(而对于 ReplicatorActivity 活动则可能并行运行)。

此外,ActivityExecutionContextManager 恢复保持的上下文和完成的上下文,其中所有活动处于 Closed Initialized 状态,并具有可选的持久性。

因为迭代的活动是模板对象的克隆,因此对它们所做的更改将不会影响模板活动,也不会保存到该活动的新迭代中。此外,也无法按工作流中定义的名称或者通过从父活动中使用 GetActivityByName 来访问迭代的活动(ReplicatorActivity 子级或者 WhileActivity ConditionedActivityGroup 中包含的活动的实际实例)。而必须通过包含事件处理程序的 sender e.Activity 参数来访问。因此,不能直接访问定义为 WhileActivity 活动的子活动的 DelayActivity 实例: this.delayActivity1;而必须通过执行事件处理程序的参数来访问:((DelayActivity)sender

注:假如你熟悉ASP.NET 编程的话,这个context 对象本质上和System.Web.HttpContext 对象的作用是一样的。其它相似的还有System.Threading.Thread.CurrentContext。所有这些Context 对象的目标都是一样的:提供一个存储位置并容 易地恢复一个当前执行实例的信息。这种情况下,它是一个执行当中的活动的一个实例。

workflow类型

通过我们已创建过workflow 应用程序,我们注意到可以创建不同类型的workflow 应用。workflow 应用程序的类型很大程度上依赖于我们选择的root 活动。尽管我们注意到在新项目对话框中仅仅只有两种workflow 类型的应用程序可供选择,但实际运用中存在三种主要的类型。当我们创建workflow 时,我们的活动以我们规定的顺序执行。

另一种从新项目对话框中看到的workflow 类型是状态机工作流。

第三种workflow 类型基于顺序工作流,但它是规则驱动的。它不是仅仅执行你指定的任务而是由Policy 活动和规则条件组成的基于规则的workflow,来执行基于你指定的业务规则workflow 任务。

下面是workflow类型

workflow 类型

适用条件

顺序工作流

workflow 任务可以自治的执行,很少由外部进行控制。主要由workflow 自身来对执行的任务进行控制。只有少量用户或没有用户来和它进行交互。它的root活动是SequentialWorkflow 活动。

状态机工作流

workflow 任务严重依赖外部来控制和指示其执行。预期有很多的用户交互(或其它外部控制)。对于基于状态的workflow,root 活动是StateMachineWorkflow活动。

基于规则的工作流

业务逻辑中包含复杂的判断条件,既不像顺序工作流也不像状态机工作流。基于规则的工作流或者有一个顺序的root 活动,或者有一个基于状态的root 活动。

顺序工作流的理想应用是去执行业务处理。假如我们需要从源中读数据,处理这些数据,发送通知,往我们的一个数据池中写入结果的话,顺序工作流或许将符合我们的需求。这并不意味着顺序工作流不适合处理依赖于用户交互的特定任务,如赞同或不同意之类的审批任务。其实这样一些的用户交互不应成为 workflow 自身的关注焦点。

假如我们需要大量的用户交互,当你的workflow 发送通知给用户或其它系统(有各种原因:通知、需要批复、选择一个选项等等)以使用户或其它系统进行响应 (它们的响应来自事件)时,状态机工作流可能是更好的选择。这些事件触发了workflow 从一种处理状态转化到另一种处理状态。

最后一种workflow 类型是基于规则的workflow。这些workflow基于业务规则判定是否进行转化,并判定转化后的目标是什么。这些workflow 通常都预置了更加复杂的剧情。

我们或许会认为所有的workflow 都能以基于规则的工作流类型来创建,但我们通常并不总是使用这种方式进行创建。因为其它的workflow 类型,如顺序工作流和状态机工作流,它们能更容易地创建和测试。要用最合适的workflow 类型来构建你的系统。通常,在许多真实案例中我们会发现我们自己使用了所有三种workflow 类型的组合。

创建顺序工作流和状态机工作流

一、顺序工作流

1、在vs 2008 集成开发环境中依次选择File->New->Project,New Project窗体中选择Workflow->Sequential Workflow Console Application

 

2、向Workflow设计器添加活动

 

二、状态机工作流

1、在vs 2008 集成开发环境中依次选择File->New->Project,New Project窗体中选择Workflow->Sequential Workflow Console Application

 

2、向Workflow设计器添加活动

 

转载于:https://www.cnblogs.com/chkff_01/archive/2008/12/29/1364529.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值