別のポリシーからのポリシーの呼び出し
次のいずれかのメソッドを使用すると、ポリシー (子) を別のポリシー (親) から呼び出すことができます。
親 ポリシーから Policy.Execute メソッドを直接呼び出す
親ポリシーから Policy.Execute メソッドをラップするヘルパー .NET コンポーネントのメソッドを呼び出す
2 番目のメソッドを使用する利点は、前処理コードと後処理コードを Policy.Execute メソッドに追加できることです。 たとえば、子ポリシーで必要とされる任意のファクトを、このラッパー メソッドに作成できます。 以下のセクションでは、それぞれのメソッドの例を示します。
親ポリシーからの Policy.Execute メソッドの直接呼び出し
このセクションでは、 Policy.Execute メソッドを直接使用して親ポリシーから子ポリシーを呼び出す手順の概要について説明します。
親ポリシーへの Policy.Execute アクションの追加
次の手順では、XML ドキュメントをファクトとして子ポリシーに渡す親ポリシーに、 Policy.Execute メソッドをアクションとして追加する手順を示します。
Policy.Execute メソッドをアクションとして親ポリシーに追加するには
[ファクト エクスプローラー] ウィンドウで、[.NET クラス] タブをクリックします。
[.NET アセンブリ] を右クリックし、[参照] をクリックします。
[.NET アセンブリ] の一覧から [Microsoft.RuleEngine] を選択し、[OK] をクリックします。
[ ポリシー] を展開します。
Execute(Object facts) または Execute(Object facts, IRuleSetTrackingInterceptor trackingInterceptor) を THEN ペインにドラッグします。
[ XML スキーマ] ノードを クリックします。
Note
このサンプル シナリオでは、ファクトとして親ポリシーに送信される XML ドキュメントが、ファクトとして子ポリシーに渡されます。 代わりに、子ポリシー用のファクトを作成する .NET メソッドを呼び出すこともできます。
[ スキーマ] を右クリックし、[ 参照] をクリックします。
ファクトとして渡す XML ドキュメントのスキーマを選択し、[ 開く] をクリックします。
Schema name.xsd> を Policy.Execute メソッドの最初の引数にドラッグ<して、親ポリシーにファクトとして渡される XML ドキュメントを子ポリシーに渡します。
2 番目の引数として IRuleSetTrackingInterceptor を受け取らない Execute メソッドを使用する場合は、次の手順をスキップします。
[ .NET クラス ] タブをクリックします。
Microsoft.RuleEngine の DebugTrackingInterceptor を Policy.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 クラスの作成
ユーティリティ クラスを作成するには
.NET クラス ライブラリ プロジェクトを作成し、このプロジェクトにクラスを追加します。
次のサンプル コードに示すように、 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(); }
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 オーケストレーションの場合は、 式 図形にファクトを作成するコードを配置し、ファクトをパラメーターとして [呼び出しルール ] 図形に渡す必要がある場合があります。