次の方法で共有


メッセージを動的に変換する式の使用方法

式を使用して、オーケストレーション内のメッセージを動的に変換できます。 XLANG は、メッセージの構築図形内の Message Assignment 図形内から呼び出すことができる変換メソッドを公開します。 これは、 Transform 図形を使用するときに呼び出されるメソッドと同じですが、オーケストレーション内で指定したマップを使用してメッセージをプログラムで変換できます。 これは、種類に関係なくメッセージ処理を行う場合に便利です。 たとえば、あるビジネス プロセスで、受け取った受信メッセージで指定されているパラメーターに基づいて一連のマップの中から受信メッセージの変換用のマップを選択する必要がある場合、式図形内で変換メソッドを使用すると、ビジネス プロセス全体を維持したままこれを実現することができます。

メッセージの変換

次のサンプル コードを使用して、 メッセージ割り当て 図形のメッセージをプログラムで変換できます。

MyMapType = typeof(MyMapName);  
transform(MyOutputMsg) = MyMapType(MyInputMsg);  

この例では、MyMapType はオーケストレーションで System.Type 型の変数として宣言されています。 MyMapName は、BizTalk プロジェクトで作成済みのマップの名前です。 別の BizTalk アセンブリにあるマップを参照する場合は、そのアセンブリを BizTalk プロジェクト内で参照する必要があります。 MyInputMsg は変換元のメッセージ、MyOutputMsg は変換先のメッセージです。 変換元メッセージの複数指定が可能なマップの場合は、次のサンプル コードを使用してメッセージを変換できます。

MyMapType = typeof(MyMapName);  
transform(MyOutputMsg) = MyMapType(MyInputMsg1, MyInputMsg2);  

Note

変換元メッセージが複数ある場合、それらのメッセージは、マップで指定されている入力メッセージ部分の番号の順に式に配置する必要があります。

重要

式図形内のメッセージを動的に変換する場合は、コンパイル済みのマップをキャッシュするためのキャッシュをユーザー コード内に記述し、そのキャッシュを式図形で使用してメッセージ変換の実行前にマップを取得することをお勧めします。 マップをキャッシュしないと、共通言語ランタイム (CLR) のメモリ使用量が大幅に増加する可能性があります。 動的マッピングを行うには .NET ランタイムでコード アクセス チェックを実行する必要があるため、変換ごとに .NET Evidence objec (.NET の Evidence オブジェクト) が Large Object Heap (ラージ オブジェクト ヒープ) に配置されることになり、オーケストレーションが完了するまで破棄されません。 したがって、このような種類の変換が同時に多数発生すると、メモリ使用量が大幅に増加する可能性があり、ひいてはメモリ不足の例外が発生する可能性もあります。

参照

オーケストレーション図形
BizTalk マッパーでのマップの作成