ステップ 7 (社内): オーケストレーションの作成
ビジネス シナリオによると、BizTalk Serverが Service Bus キューから販売注文メッセージを受信した後、メッセージで注文された数量が 100 を超えるかどうかをチェックする必要があります。 数量が 100 を超える場合、メッセージは SalesOrder テーブルに挿入されます。 そうでない場合は、共有ファイルの場所にメッセージが送信されます。 Northwind はオーケストレーションを作成することによってこのビジネス ロジックを実現します。 このトピックでは、オーケストレーションの作成方法を、手順を追って説明します。
BizTalk Server プロジェクトにオーケストレーションを追加するには
既に作成したBizTalk Serverで、プロジェクトを右クリックし、[追加] をポイントして、[新しい項目] をクリックします。
[ 新しい項目 ] ダイアログ ボックスで、[ BizTalk オーケストレーション] を選択し、マップ名を として
OrderProcessing.odx
入力し、[ 追加] をクリックします。
オーケストレーションのメッセージの作成
先に生成したスキーマは、オーケストレーションのメッセージに求められる "型" を記述します。 メッセージは通常、対応するスキーマによって定義された型の変数です。 ここで、オーケストレーションのメッセージを作成し、先に生成したスキーマにリンクする必要があります。 以下の 3 つのメッセージを作成してください。
メッセージ名 | 対応するスキーマ |
---|---|
Message1_SO_Inbound | このメッセージは ECommerceSalesOrder.xsd スキーマのインスタンスです。 |
Message2_SO_Inbound | このメッセージは、 Message1_SO_Inboundのコピーです。 ベスト プラクティスとして、メッセージのコピーを作成し、元のメッセージを残したまま、新しいメッセージを修正してください。 詳細については、「BizTalk Server メッセージ」を参照してください。 |
Message1_SO_Outbound | このメッセージは、 TableOperations.dbo.SalesOrder (Insert) スキーマのインスタンスです。 |
メッセージを作成するには
BizTalk プロジェクトがまだ開いていない場合は、オーケストレーション ビュー ウィンドウを開きます。 これを行うには、[ 表示] をクリックし、[ その他のウィンドウ] をポイントして、[ オーケストレーション ビュー] をクリックします。
[オーケストレーション ビュー] で、[ メッセージ] を右クリックし、[ 新しいメッセージ] をクリックします。
新しく作成したメッセージを右クリックし、[ プロパティ ウィンドウ] を選択します。
Message_1の [プロパティ] ウィンドウで、次の操作を行います。
プロパティ名 実行するアクション 識別子 「 Message1_SO_Inbound
」と入力しますメッセージ型 ドロップダウン リストから [ スキーマ] を展開し、[ OrderProcessingDemo.ECommerceSalesOrder] を選択します。 OrderProcessingDemo は BizTalk プロジェクトの名前です。 ECommerceSalesOrder は、Service Bus キューから受信した販売注文メッセージのスキーマです。 手順を繰り返し、以下の情報を使ってメッセージを作成します。
メッセージ名 アクションの実行 Message2_SO_Inbound - 識別子を に設定する Message2_SO_Inbound
- メッセージの種類を OrderProcessingDemo.ECommerceSalesOrder に設定するMessage1_SO_Outbound - 識別子を に設定する Message1_SO_Outound
- メッセージの種類を OrderProcessingDemo.TableOperation_dbo_SalesOrder.Insert に設定する
オーケストレーションへの図形の追加
オーケストレーション図形は、BizTalk Server アプリケーションのフローを定義します。 このセクションでは、オーケストレーションに必要な図形を追加します。
オーケストレーションに図形を追加するには
まず、 Receive 図形を追加する必要があります。 この図形は、Service Bus キューから送信される販売注文メッセージを受け取ります。 受信図形に以下のプロパティを設定します。
[アクティブ化] を True に設定します。
[メッセージ] を [Message1_SO_Inbound] に設定します。
[名前] を ReceiveOrder に設定します。
先に述べたように、オーケストレーションで受信した元の販売注文メッセージのコピーを作成する必要があります。
ReceiveOrder 図形の下にメッセージの構築図形をドラッグ アンド ドロップします。 この図形を使用してMessage2_SO_Inbound型のメッセージを作成するため、 Messages Constructed プロパティを Message2_SO_Inbound に設定します。
[メッセージの作成] 図形内に [メッセージの割り当て] 図形を追加します。 図形をダブルクリックして式エディターを開き、以下を追加します。
Message2_SO_Inbound = Message1_SO_Inbound; //copy the message Message2_SO_Inbound(*) = Message1_SO_Inbound(*); //copy the context properties on the message
[OK] をクリックします。
ビジネス シナリオに従って、注文項目の数量に応じて別の宛先にメッセージを送信しなければならない場合があります。 このため、受信する販売注文メッセージから、数量の値を抽出する必要があります。
受信メッセージ (ECommerceSalesOrder.xsd) の Quantity 要素には、順序付けられた数量の値が含まれています。 オーケストレーションの式でその要素を使用できるよう、プロパティを昇格させる必要があります。 プロパティを昇格するには、 ECommerceSalesOrder.xsd スキーマを開き、[ 数量] を右クリックし、[ 昇格] をポイントして、[ クイック プロモーション] をクリックします。
数量の値を格納するための変数を作成します。 変数を作成するには、 オーケストレーション ビューで [ 変数] を右クリックし、[ 新しい変数] をクリックします。 変数に以下のプロパティを設定します。
プロパティ名 値 識別子 「 quantityOrdered
」と入力します型 [ Int32] を選択します。 Quantity 要素の値を quantityOrdered 変数に割り当てる必要があります。 [メッセージの構築] 図形の後に式エディターをドラッグ アンド ドロップします。 エディターを開き、以下の式を入力します。
quantityOrdered = Message2_SO_Inbound.Quantity;
[OK] をクリックします。
注文数量を抽出したら、次に、メッセージ フローがたどる 2 つの異なるパスを配置するための判断ブロックを作成する必要があります。 "決定" 図形を追加して、オーケストレーションにデシジョン ブロックを作成します。
[式エディター] 図形の後に [決定] 図形をドラッグ アンド ドロップします。
Rule_1図形を選択し、[プロパティ] ウィンドウで次を指定します。
プロパティ名 値 識別子 「 Yes
」と入力します。 メモ: もう 1 つのルートは、既定では Else という名前です。Expression 「 quantityOrdered > 100
」と入力します。これで、2 つのルートが利用可能になりました。 quantityOrdered 変数の値が 100 より大きい場合、メッセージは Yes ルートを受け取ります。 それ以外の場合は、 Else ルートが使用されます。 ここで、各ルート内で実行するアクションを定義する必要があります。
ビジネス シナリオに従って、注文数量が 100 を超える場合、メッセージを SalesOrder テーブルに挿入する必要があります。 そのため、 Yes ルートでは、ECommerceSalesOrder.xsd スキーマを TableOperations.SalesOrder.Insert スキーマに変換する必要があります。 「 手順 5 (オンプレミス): メッセージ inito SalesOrder テーブルを挿入するためのスキーマを生成する」トピックで、スキーマの挿入を作成しました。 スキーマを変換した後、メッセージを、SQL Server データベース テーブルに送信する必要があります。
[はい] ルート内で、[メッセージの構築] 図形をドラッグ アンド ドロップします。 図形の Messages Constructed プロパティを Message1_SO_Outboundに設定します。
[ メッセージの構築] 図形内に 、Transform 図形を追加します。 図形をダブルクリックして、[ 変換の構成 ] ダイアログ ボックスを開きます。 次の操作を行います。
[ 既存のマップ] オプションを選択します。
[ 完全修飾マップ名] ドロップダウンから、[ OrderProcessingDemo.SalesOrder_SQL] を選択します。
[ ソース] で、[ Message2_SO_Inbound] を選択します。
[ 宛先] で、[ Message1_SO_Outound] を選択します。
メッセージの 構築 図形の後に、 Send 図形をドラッグ アンド ドロップし、図形の Message プロパティを に
Message1_SO_Outbound
設定します。
ビジネス シナリオに従って、注文数量が 100 を下回る場合、メッセージを共有のファイルの場所に送信する必要があります。 そのため、 Else ルートでは、送信図形を追加する必要があります。
Else ルート内で Send 図形をドラッグ アンド ドロップし、図形の Message プロパティを に
Message2_SO_Inbound
設定します。Note
[メッセージ] を Message2_SO_Inbound に設定するのは、Service Bus キューから受け取った同じメッセージが、処理されずにファイルの場所に送信されるためです。 Message2_SO_Inbound は、Service Bus キューによって受信されたメッセージを表しています。
オーケストレーションへのポートの追加
ポートは、オーケストレーションに関連したメッセージの入力および出力の媒体を表しています。 メッセージは、受信ポートを使用してオーケストレーションによって処理され、送信ポートを使用して送信されます。 ビジネス シナリオにおいて、メッセージは 1 つの媒体 (Service Bus キュー) から受信され、その後メッセージの処理に応じて、2 つの異なる場所 (SQL Server データベースまたはファイル共有場所) に送信されます。 このため、オーケストレーションに 1 つの受信ポートと 2 つの送信ポートを作成する必要があります。
ポートを追加するには
[ポート] 図形を [オーケストレーション] Designerの [ポートサーフェス] ペインにドラッグ アンド ドロップして、ポート構成ウィザードを起動します。 [ようこそ] ページで [次へ] をクリックします。
[ ポートのプロパティ ] ページで、ポートに という
ReceiveSO
名前を付け、[ 次へ] をクリックします。[ ポートの種類の選択 ] ページで、[ 新しいポートの種類の作成 ] オプションを選択し、[ 一方向 の通信パターン] を選択し、アクセス制限の既定値のままにして、[ 次へ] をクリックします。
[ ポート バインド ] ページで、ポートの方向として[ このポートで常にメッセージを受信します] を選択し、ポートの入札値を既定値のままにして、[ 次へ] をクリックします。
最後のページで、[完了] をクリック します。
手順を繰り返して 2 つの送信ポートを作成します。 ポートを作成する際は以下の値を指定します。
ポート名 プロパティ SendToSQL - 名前を SendToSQL に設定する
- [ 新しいポートの種類の作成] を選択します
- 通信パターンを一方向に設定する
- ポートの方向を [常にこのポートでメッセージを送信する] に設定しますSendToFile - 名前を SendToFile に設定する
- [ 新しいポートの種類の作成] を選択します
- 通信パターンを一方向に設定する
- ポートの方向を [常にこのポートでメッセージを送信する] に設定します
ポートとメッセージ図形の接続
次に、ポートとメッセージ図形を接続して、オーケストレーションを完成させます。 オーケストレーションは、 メッセージが ReceiveOrder 図形によって受信され、メッセージが 2 つの送信図形によって送信されるときにオーケストレーションが終了したときに開始されます。 この基準に基づいて、ポートとメッセージ図形を接続する必要があります。
ポートをメッセージ図形に接続するには
ReceiveSO 受信ポートを ReceiveOrder 図形に接続します。
[はい] ルートの下にある [送信] 図形を SendToSQL 送信ポートに接続します。 これは、メッセージがこのルート (quantityOrdered> 100) に入ると、SQL Server データベースの SalesOrder テーブルに送信されることを示します。
Else ルートの下にある [送信] 図形を SendToFile 送信ポートに接続します。 これは、メッセージがこのルート (quantityOrdered= 100) に入ると、指定した<ファイルの場所に送信されることを示します。
オーケストレーションは次のようになります。