次の方法で共有


別のポリシーからのポリシーの呼び出し

次のいずれかのメソッドを使用すると、ポリシー (子) を別のポリシー (親) から呼び出すことができます。

  • ポリシーから Policy.Execute メソッドを直接呼び出す

  • 親ポリシーから Policy.Execute メソッドをラップするヘルパー .NET コンポーネントのメソッドを呼び出す

    2 番目のメソッドを使用する利点は、前処理コードと後処理コードを Policy.Execute メソッドに追加できることです。 たとえば、子ポリシーで必要とされる任意のファクトを、このラッパー メソッドに作成できます。 以下のセクションでは、それぞれのメソッドの例を示します。

親ポリシーからの Policy.Execute メソッドの直接呼び出し

このセクションでは、 Policy.Execute メソッドを直接使用して親ポリシーから子ポリシーを呼び出す手順の概要について説明します。

親ポリシーへの Policy.Execute アクションの追加

次の手順では、XML ドキュメントをファクトとして子ポリシーに渡す親ポリシーに、 Policy.Execute メソッドをアクションとして追加する手順を示します。

Policy.Execute メソッドをアクションとして親ポリシーに追加するには
  1. [ファクト エクスプローラー] ウィンドウで、[.NET クラス] タブをクリックします。

  2. [.NET アセンブリ] を右クリックし、[参照] をクリックします。

  3. [.NET アセンブリ] の一覧から [Microsoft.RuleEngine] を選択し、[OK] をクリックします

  4. [ ポリシー] を展開します

  5. Execute(Object facts) または Execute(Object facts, IRuleSetTrackingInterceptor trackingInterceptor) を THEN ペインにドラッグします。

  6. [ XML スキーマ] ノードを クリックします。

    Note

    このサンプル シナリオでは、ファクトとして親ポリシーに送信される XML ドキュメントが、ファクトとして子ポリシーに渡されます。 代わりに、子ポリシー用のファクトを作成する .NET メソッドを呼び出すこともできます。

  7. [ スキーマ] を右クリックし、[ 参照] をクリックします。

  8. ファクトとして渡す XML ドキュメントのスキーマを選択し、[ 開く] をクリックします。

  9. Schema name.xsd> を Policy.Execute メソッドの最初の引数にドラッグ<して、親ポリシーにファクトとして渡される XML ドキュメントを子ポリシーに渡します。

  10. 2 番目の引数として IRuleSetTrackingInterceptor を受け取らない Execute メソッドを使用する場合は、次の手順をスキップします。

  11. [ .NET クラス ] タブをクリックします。

  12. Microsoft.RuleEngineDebugTrackingInterceptorPolicy.Execute メソッドの 2 番目の引数にドラッグします。

    Note

    このアクションを実行する場合、クライアントは DebugTrackingInterceptor クラスのインスタンスをファクトとして親ポリシーに渡す必要があります。これにより、インスタンスがファクトとして子ポリシーに渡されます。 代わりに、インスタンスが自動的に作成されるように 、DebugTrackingInterceptor クラスのコンストラクターをドラッグできます。

親ポリシーを呼び出すクライアント アプリケーションの変更

親ポリシーを呼び出すクライアントは、子ポリシー名をパラメーターとして持つ Policy クラスのインスタンスを作成し、そのインスタンスを他のファクトと共に親ポリシーにファクトとして渡します。 このアクションを説明するサンプル コードを次に示します。

DebugTrackingInterceptor dti = new DebugTrackingInterceptor("PolicyTracking.txt");  
Policy policy = new Policy("ParentPolicy");  
object[] facts = new object[3];  
facts[0] = txd;  
facts[1] = new Policy("ChildPolicy");  
facts[2] = new DebugTrackingInterceptor("PolicyTracking2.txt");  
policy.Execute(facts, dti);  
policy.Dispose();  

クライアントが BizTalk オーケストレーションの場合は、 図形にファクトを作成するコードを配置し、ファクトをパラメーターとして [呼び出しルール ] 図形に渡す必要がある場合があります。

親ポリシーからの .NET ラッパー メソッドの呼び出し

このセクションでは、親ポリシーから Policy.Execute メソッドの呼び出しをラップする .NET メソッドを呼び出す手順の概要について説明します。

ユーティリティ .NET クラスの作成

ユーティリティ クラスを作成するには
  1. .NET クラス ライブラリ プロジェクトを作成し、このプロジェクトにクラスを追加します。

  2. 次のサンプル コードに示すように、 Policy.Execute メソッドを呼び出して、パラメーターとして渡される名前のポリシーを呼び出す静的メソッドを追加します。

    public static void Execute(string policyName, TypedXmlDocument txd)  
    {  
        DebugTrackingInterceptor dti = new   DebugTrackingInterceptor("PolicyTracking.txt");  
        Policy policy = new Policy("ParentPolicy");  
        object[] facts = new object[3];  
        facts[0] = txd;  
        facts[1] = new Policy("ChildPolicy");  
        facts[2] = new DebugTrackingInterceptor("PolicyTracking2.txt");  
        policy.Execute(facts, dti);  
        policy.Dispose();  
    }   
    
  3. StaticSupport レジストリ キーが 1 または 2 に設定されていることを確認します。 レジストリ キーの詳細については、「 クラスの静的メンバーの呼び出し」を参照してください。

    Note

    静的メソッドの代わりにインスタンス メソッドを使用することもできます。 インスタンス メソッドを使用する場合、クライアントは、ヘルパー .NET クラスのインスタンスをファクトとして親ポリシーに渡す必要があります。

クライアント アプリケーションの変更

クライアントが親ポリシーを呼び出し、親ポリシーが、子ポリシーを呼び出すヘルパー メソッドを呼び出します。 クライアントのサンプル コードを次に示します。

facts[0] = txd;  
facts[1] = new PolicyExecutor(txd);  
//call the first or parent policy  
Policy policy = new Policy(policyName);  
DebugTrackingInterceptor dti = new DebugTrackingInterceptor("PolicyTracking.txt");  
policy.Execute(facts, dti);  
policy.Dispose();  

Note

メソッドがインスタンス メソッドの場合、クライアントは、ヘルパー .NET クラスのインスタンスを作成し、ファクトとして親ポリシーに渡す必要があります。

Note

クライアントが BizTalk オーケストレーションの場合は、 図形にファクトを作成するコードを配置し、ファクトをパラメーターとして [呼び出しルール ] 図形に渡す必要がある場合があります。