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

Rules-ExternalizedPolicy4 示例演示 ExternalizedPolicy4 活动如何使用 WF 3.5 中随附的规则引擎直接在 .NET Framework 4.6.1 Windows Workflow Foundation(WF 4.5)中执行现有的 .NET Framework 3.5 RuleSet Windows Workflow Foundation(WF 3.5)对象。 使用此活动,可以打开和执行任何现有的 WF 3.5 RuleSet。 有关作为 Windows Workflow Foundation 的一部分包含的 WF 3.5 规则引擎的详细信息,请阅读 Windows Workflow Foundation 规则引擎简介。 有关在 .NET Framework 4.6.1 中将规则迁移到 WF 的详细信息,请参阅 迁移指南

此示例中的项目

项目名称 DESCRIPTION 主文件
ExternalizedPolicy4 包含 ExternalizedPolicy4 活动及其 WF 4.5 设计器。 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.5 工作流中执行 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
}
资产 DESCRIPTION
RuleSetFilePath 执行活动时要检查的 .NET Framework 3.5 RuleSet 文件路径。
RuleSetName 要在 .rules 文件中使用的 RuleSet 的名称。
TargetObject 对其计算 Rule 中的 RuleSet 对象的对象。
ResultObject 应用规则后生成的对象(例如,针对 Input 参数应用规则,结果存储在 Result 参数中。
ValidationError 在执行之前验证 RuleSet 目标对象时 WF 3.5 规则引擎返回的验证错误列表。

ExternalizedPolicy4 活动设计器

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

Policy4 和 ExternalPolicy4

通过策略活动,可以在 WF 4.5 工作流中创建和执行 .NET Framework 3.5 RuleSet。 RuleSet 是 Policy4 活动 XAML 定义中的序列化内联。 ExternalizedPolicy4 示例展示如何使用现有的外部元素RuleSet(包含在 .rules 文件中)。

使用此示例

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

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

运行 ImperativeCodeClientSample 应用程序

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

  2. 解决方案资源管理器中,右键单击 “命令性CodeClientSample ”项目,然后选择“ 设置为启动项目”。

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

运行 DesignerClientSample 应用程序

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

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

  3. Ctrl+Shift+B 编译项目。

  4. Ctrl+F5 运行项目。