.NET Framework 4 中的外部化策略活动

本主题适用于 Windows Workflow Foundation 4。

此示例演示 ExternalizedPolicy4 活动如何使用 WF 3.5 中附带的规则引擎在 .NET Framework 版本 4 Windows Workflow Foundation (WF 4) 中直接使用现有 .NET Framework 3.5 版 Windows Workflow Foundation (WF 3.5) RuleSet。通过使用此活动,可以打开并执行任何现有 WF 3.5 RuleSet。有关 WF 3.5 规则引擎的更多信息(已作为 Windows Workflow Foundation 的一部分包含),请参见 Windows Workflow Foundation 规则引擎简介(可能为英文网页)。有关将规则迁移到 .NET Framework 4 的 WF 中的更多信息,请参见迁移指南上的迁移指南。

此示例中的项目

项目名称

说明

主要文件

ExternalizedPolicy4

包含 ExternalizedPolicy4 活动及其 WF 4 设计器。

ExternalizedPolicy4.cs:活动定义。

ExternalizedPolicy4Designer.xaml:ExternalizedPolicy4 活动的自定义设计器。它使用来自 WF 3.5 规则引擎的规则编辑器 (RuleSetDialog)。

ImperativeCodeClientSample

一个示例客户端应用程序,它使用命令性 C# 代码(未使用设计器)配置和运行使用 ExternalizedPolicy4 应用程序的工作流。

ApplyDiscount.rules:带有 WF 规则定义的文件。

Order.cs:表示客户订单的类型。规则适用于此类型的对象。

Program.cs:配置和运行具有 Policy4 活动的工作流以将 ApplyDiscount.rules 中定义的规则应用于 Order 对象的实例。

App.config:带有规则文件的路径的配置文件。

DesignerClientSample

一个示例客户端应用程序,它在 WF 设计器中配置和运行使用 ExternalPolicy4 应用程序的工作流。

Sequence1.xaml:使用 Policy4 活动执行规则计算的顺序工作流。

Program.cs:运行 Sequence1.xaml 中定义的工作流的实例。

ExternalizedPolicy4 活动

ExternalizedPolicy4 活动是一个 NativeActivity,它允许在 WF 4.0 工作流中执行 WF 3.5 RuleSet 对象。下面的示例是活动的公共对象模型的简化定义。

public class ExternalizedPolicy4Activity<TResult>: CodeActivity
{
    public string RulesFilePath 
    
    public string RuleSetName         

    [RequiredArgument]
    public InArgument<T> TargetObject 

    [RequiredArgument]
    public OutArgument<T> ResultObject 

    public OutArgument<ValidationErrorCollection> ValidationErrors 
}

属性

说明

RuleSetFilePath

执行活动时要计算的 .NET Framework 3.5 RuleSet 文件的路径。

RuleSetName

要在 .rules 文件中使用的 RuleSet 的名称。

TargetObject

对其计算 RuleSet 中的 Rule 对象的对象。

ResultObject

应用规则后的结果对象(例如,对 Input 参数应用规则并将结果存储在 Result 参数中)。

ValidationError

在执行前对目标对象验证 RuleSet 时由 WF 3.5 规则引擎返回的验证错误的列表。

ExternalizedPolicy4 活动设计器

利用 ExternalizedPolicy4 设计器,可以将活动配置为使用现有 RuleSet 而不编写代码。仅设置 .rules 文件所在的路径并指定要使用的 RuleSet 名称。还可以使用此设计器修改 RuleSet。生成解决方案之后,可以在工具箱中的“Microsoft.Samples.Activities.Rules”部分找到此功能。 可以利用此设计器选择 .rules 文件和 RuleSet。单击**“编辑 RuleSet”**按钮时,将显示 WF 3.5 RuleSetDialog。此对话框是重新承载的 WF 3.5 规则编辑器,它可用于查看和编辑 ExternalizedPolicy4 活动执行的规则。

Policy4 和 ExternalPolicy4

.NET Framework 4 中的策略活动 活动允许您在 WF 4 工作流中创建和执行 .NET Framework 3.5 RuleSet。RuleSet 是 Policy4 活动 XAML 定义中的序列化内联。ExternalizedPolicy4 示例演示如何使用现有外部 RuleSet(包含在 .rules 文件中)。

使用此示例

无需进行特殊设置即可运行此示例。在 Visual Studio 2010 中打开解决方案,然后按 F5 运行应用程序。

此示例包含两个客户端应用程序,即 ImperativeCodeClientSample 和 DesignerClientSample。ImperativeCodeClientSample 客户端演示如何使用 C# 命令性代码来配置和运行 ExternalizedPolicy4 活动。DesignerClientSample 演示如何使用设计器配置和运行 ExternalizedPolicy4 活动。

运行 ImperativeCodeClientSample 应用程序

  1. 使用 Visual Studio 2010 打开 Policy4sample.sln 解决方案文件。

  2. 在**“解决方案资源管理器”中,右击“ImperativeCodeClientSample”项目,然后选择“设为启动项目”**。

  3. 若要运行项目,请按 Ctrl+F5。

运行 DesignerClientSample 应用程序

  1. 使用 Visual Studio 2010 打开 Policy4sample.sln 解决方案文件。

  2. 在**“解决方案资源管理器”中,右击“DesignerClientSample”项目,然后选择“设为启动项目”**。

  3. 按 F6 编译项目。

  4. 按 Ctrl+F5 运行项目。

Ee662962.Important(zh-cn,VS.100).gif 注意:
您的计算机上可能已安装这些示例。在继续操作之前,请先检查以下(默认)目录:

<安装驱动器>:\WF_WCF_Samples

如果此目录不存在,请转到 .NET Framework 4 的 Windows Communication Foundation (WCF) 和 Windows Workflow Foundation (WF) 示例(可能为英文网页),下载所有 Windows Communication Foundation (WCF) 和 WF 示例。此示例位于以下目录:

<安装驱动器>:\WF_WCF_Samples\WF\Scenario\ActivityLibrary\ExternalizedPolicy4