次の方法で共有


.NET Framework 4.5 の外部化されたポリシー アクティビティ

Rules-ExternalizedPolicy4 サンプルでは、ExternalizedPolicy4 アクティビティによって既存の .NET Framework 3.5 Windows Workflow Foundation (WF 3.5) の RuleSet オブジェクトを、WF 3.5 に付属しているルール エンジンを使用して .NET Framework 4.6.1 Windows Workflow Foundation (WF 4.5) で直接実行できるようにする方法を示します。 このアクティビティを使用すると、既存の WF 3.5 RuleSet を開いて実行できます。 Windows Workflow Foundation の一部として含まれる WF 3.5 ルール エンジンの詳細については、「Windows Workflow Foundation ルール エンジンの概要」を参照してください。 .NET Framework 4.6.1 の WF へのルールの移行について詳しくは、「移行ガイダンス」をご覧ください。

このサンプルのプロジェクト

プロジェクト名 説明 メイン ファイル
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 アクティビティは、WF 4.5 のワークフロー内で WF 3.5 NativeActivity オブジェクトを実行できるようにする 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 RuleRuleSet オブジェクトを評価する対象のオブジェクトです。
ResultObject ルールが適用された後の結果として得られるオブジェクトです (たとえば、ルールが Input 引数に対して適用され、結果が Result 引数に格納されます)。
ValidationError 実行前に対象オブジェクトに対して RuleSet を検証するときに、WF 3.5 ルール エンジンから返される検証エラーのリストです。

ExternalizedPolicy4 アクティビティ デザイナー

ExternalizedPolicy4 デザイナーを使用すると、コードを記述せずに、既存の RuleSet を使用するようにアクティビティを構成できます。 .rules ファイルのパスを設定し、使用する RuleSet の名前を指定するだけです。 また、RuleSet を変更することもできます。 ソリューションをビルドすると、Microsoft.Samples.Activities.Rules セクションのツールボックス内からこのデザイナーを使用できるようになります。 このデザイナーでは、.rules ファイルと RuleSet を選択できます。 [Edit RuleSet](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 の 2 つのクライアント アプリケーションがあります。 ImperativeCodeClientSample クライアントは、C# 命令型コードを使用して ExternalizedPolicy4 アクティビティを構成および実行する方法を示します。 DesignerClientSample は、デザイナーを使用して ExternalizedPolicy4 アクティビティを構成および実行する方法を示します。

ImperativeCodeClientSample アプリケーションを実行する

  1. Visual Studio を使用して、Policy4sample.sln ソリューション ファイルを開きます。

  2. ソリューション エクスプローラーで、ImperativeCodeClientSampleプロジェクトを右クリックし、 [スタートアップ プロジェクトに設定] をクリックします。

  3. プロジェクトを実行するには、Ctrl キーを押しながら F5 キーを押します。

DesignerClientSample アプリケーションを実行する

  1. Visual Studio を使用して、Policy4sample.sln ソリューション ファイルを開きます。

  2. ソリューション エクスプローラーで、DesignerClientSample プロジェクトを右クリックし、 [スタートアップ プロジェクトに設定] をクリックします。

  3. Ctrl キーと Shift キーを押しながら B キーを押して、プロジェクトをコンパイルします。

  4. Ctrl キーを押しながら F5 キーを押してプロジェクトを実行します。