次の方法で共有


BizTalk Server を使用して通知メッセージを処理して SQL の特定のタスクを完了する

SQL アダプターを使用して、SQL Server データベース テーブルへの変更に関する通知を受け取ることができます。 ただし、アダプターは、一部のレコードが特定のデータベース テーブルに挿入、更新、または削除されたことを示す通知のみを送信します。 これらのレコードの後処理は、クライアント アプリケーション自体で処理する必要があります。 このトピックでは、SQL Server データベースから受信した通知の種類に基づいて、テーブル内のレコードを処理する方法に関するシナリオベースの説明を示します。

通知を受信した後に後続のアクションを実行するシナリオ

アダプター クライアントが特定の通知後タスクを実行する必要があるいくつかのシナリオを次に示します。

  • シナリオ 1。 SQL Server から受信する通知の種類に基づいて、アダプター クライアントが特定のタスクを実行する必要があるシナリオを考えてみましょう。 たとえば、テーブル "B" にレコードが挿入された場合、クライアント アプリケーションはテーブル "A" のレコードを更新する必要があります。 同様に、テーブル "B" からレコードが削除された場合、クライアント アプリケーションはテーブル "A" からレコードを削除する必要があります。

    このシナリオでは、受信した通知メッセージから、アダプター クライアントは通知の種類を抽出して、通知が挿入操作用か削除操作かを判断する必要があります。 通知の種類が確認されたら、アダプター クライアントは、関連するテーブルを挿入または更新する後続のアクションを実行する必要があります。

  • シナリオ 2。 テーブルへの変更に関する通知メッセージを受信する受信場所がダウンするシナリオを考えてみましょう。 受信場所がダウンしている間、一部のレコードがテーブルに追加されます。 ただし、これらのレコードの場合、アダプター クライアントは通知を受信しません。 受信場所がバックアップされると、アダプターは特定のメッセージを送信してクライアントに通知し、クライアント アプリケーションは、受信場所がダウンしている間にデータベース テーブルに挿入されたすべてのレコードを検索する必要があります。

    このシナリオでは、受信した通知メッセージから、アダプター クライアントは、通知がデータベース テーブルに対する変更の場合か、受信場所の開始に関する情報であるかに関する情報を抽出する必要があります。 通知が受信場所を開始する場合、アダプター クライアントは、受信場所がダウンしている間に挿入、更新、または削除された可能性のあるレコードを処理するロジックを実装する必要があります。

これらは、SQL アダプターで通知機能を使用する方法の理解を深めるためにリストされているシナリオの例にすぎません。 ただし、受信した通知の種類を抽出するために必要なタスクの基本的なセットは、すべてのシナリオで似ています。 このトピックでは、通知メッセージから通知の種類を抽出する方法について説明します。

このトピックでは、通知メッセージの受信と通知の種類の抽出について説明します

このトピックでは、通知メッセージを処理して後続のタスクを実行する方法を示すために、アダプター クライアントが BizTalk アプリケーションを使用して Employee テーブルへの変更の通知メッセージを受信する基本的なシナリオについて説明します。 通知を受信した後、クライアントは受信した通知の種類をフィルター処理し、後続のアクションを実行します。 非常に基本的なシナリオを示すために、受信した通知の種類に基づいて、アダプター クライアントが通知メッセージを別のフォルダーにコピーすることを検討します。 そのために、以下のことにご協力ください。

  • 通知メッセージが挿入操作または更新操作の場合、アダプター クライアントはメッセージを C:\TestLocation\UpsertNotification フォルダーにコピーします。

  • 通知メッセージが他の操作 (Delete など) の場合、アダプター クライアントはメッセージを C:\TestLocation\OtherNotificaiton フォルダーにコピーします。

    BizTalk アプリケーションの一部としてこれを実現するには、オーケストレーションに次のものが含まれている必要があります。

  • 通知メッセージを受信する一方向の受信ポート。

  • 受信した通知メッセージの種類に関する情報を抽出する xpath クエリを含む式図形。

  • オーケストレーションに決定ブロックを追加するための決定図形。 この決定ブロックでは、アプリケーションは、受信した通知メッセージに基づいて、後続の操作を実行する対象を決定します。

  • 最終的に通知メッセージを受信する 2 つの一方向送信ポート。

SQL アダプターのバインド プロパティを使用した通知の構成

次の表は、SQL Server からの通知の受信を構成するために使用する SQL アダプターのバインド プロパティをまとめたものです。 BizTalk Server 管理コンソールで受信ポートを構成するときに、これらのバインド プロパティを指定する必要があります。

必須ではありませんが、 通知 操作のスキーマを生成するときに、これらのバインド プロパティを指定することもできます。 その場合、アダプターサービスアドインがメタデータ生成の一部として生成するポート バインド ファイルにも、バインド プロパティに指定した値が含まれます。 このバインド ファイルは、後で BizTalk Server 管理コンソールにインポートして、既に設定されているバインディング プロパティを使用して WCF カスタムまたは WCF-SQL 受信ポートを作成できます。 バインド ファイルを使用してポートを作成する方法の詳細については、「 ポート バインド ファイルを使用して SQL アダプターを使用するように物理ポート バインドを構成する」を参照してください。

バインディングプロパティ 説明
InboundOperationType 実行する受信操作を指定します。 通知メッセージを受信するには、これを [通知] に設定します。
NotificationStatement クエリ通知の登録に使用する SQL ステートメント (SELECT または EXEC < ストアド プロシージャ>) を指定します。 アダプターは、指定された SQL ステートメントの結果セットが変更された場合にのみ、SQL Server から通知メッセージを取得します。
NotifyOnListenerStart リスナーの起動時にアダプターがアダプター クライアントに通知を送信するかどうかを指定します。

これらのプロパティの詳細については、「 BizTalk Adapter for SQL Server アダプターのバインドプロパティ」を参照してください。 SQL アダプターを使用して SQL Server から通知を受信する方法の詳細については、詳細を参照してください。

SQL Server データベースから通知メッセージを受信する方法

BizTalk Server で SQL アダプターを使用して SQL Server データベースに対して操作を実行するには、「SQL アダプターを使用して BizTalk アプリケーションを開発するための構成要素」で説明されている手続き型タスクが含まれます。 通知メッセージを受信するようにアダプターを構成するには、次のタスクを実行します。

  1. BizTalk プロジェクトを作成し、 通知 受信操作のスキーマを生成します。 必要に応じて、 InboundOperationType および NotificationStatement バインド プロパティの値を指定できます。

  2. SQL Server データベースから通知を受信するためのメッセージを BizTalk プロジェクトに作成します。

  3. 前のセクションで説明したようにオーケストレーションを作成します。

  4. BizTalk プロジェクトをビルドして展開します。

  5. 物理送受信ポートを作成して BizTalk アプリケーションを構成します。

    受信用の操作では、通知メッセージの受信など、一方向の WCF-Custom または WCF-SQL 受信ポートのみを構成する必要があります。 双方向 WCF-Custom または WCF-SQL 受信ポートは、受信操作ではサポートされていません。

  6. BizTalk アプリケーションを起動します。

    このトピックでは、これらのタスクを実行する手順について説明します。

スキーマの生成

通知受信操作のスキーマを生成する必要があります。 スキーマの生成方法の詳細については、「 SQL アダプターを使用した Visual Studio での SQL Server 操作のメタデータの取得 」を参照してください。 スキーマを生成するときは、次のタスクを実行します。 デザイン時にバインド プロパティを指定しない場合は、最初の手順をスキップします。

  1. スキーマの生成中に InboundOperationType および NotificationStatement バインド プロパティの値を指定します。 このバインディング プロパティの詳細については、「 BizTalk Adapter for SQL Server アダプターのバインドプロパティ」を参照してください。 バインディング プロパティを指定する方法については、「 SQL アダプターのバインド プロパティを構成する」を参照してください。

  2. 契約の種類として サービス(インバウンド業務) を選択します。

  3. 通知操作のスキーマを生成します。

メッセージとメッセージの種類の定義

前に生成したスキーマでは、オーケストレーション内のメッセージに必要な "型" が記述されています。 通常、メッセージは変数であり、対応するスキーマによって定義される型です。 スキーマが生成されたら、BizTalk プロジェクトのオーケストレーション ビューからメッセージにリンクする必要があります。

このトピックでは、SQL Server データベースから通知を受信するメッセージを 1 つ作成する必要があります。

メッセージを作成し、スキーマにリンクするには、次の手順を実行します。

  1. BizTalk プロジェクトにオーケストレーションを追加します。 ソリューション エクスプローラーで、BizTalk プロジェクト名を右クリックし、[ 追加] をポイントして、[ 新しい項目] をクリックします。 BizTalk オーケストレーションの名前を入力し、[ 追加] をクリックします。

  2. まだ開いていない場合は、BizTalk プロジェクトのオーケストレーション ビュー ウィンドウを開きます。 [ 表示] をクリックし、[ その他のウィンドウ] をポイントし、[ オーケストレーション ビュー] をクリックします。

  3. オーケストレーション ビューで、[メッセージ] を右クリックし、[新しいメッセージ] をクリックします。

  4. 新しく作成したメッセージを右クリックし、[ プロパティ ウィンドウ] を選択します。

  5. Message_1[プロパティ] ウィンドウで、次の操作を行います。

    これを使用する 目的
    識別子 NotifyReceive」と入力します。
    メッセージの種類 ドロップダウン リストから [ スキーマ] を展開し、[ Process_Notification.Notification] を選択します。 ここで、Process_Notification は BizTalk プロジェクトの名前です。 通知 は、 通知 操作に対して生成されるスキーマです。

オーケストレーションの設定

BizTalk オーケストレーションを作成して、BIZTalk Server を使用して SQL Server データベースから通知メッセージを受信し、受信した通知の種類に基づいてタスクを実行する必要があります。 このオーケストレーションでは、アダプターは NotificationStatement バインディング プロパティに指定された SELECT ステートメントに基づいて通知メッセージを受信します。 式図形内で指定された xpath クエリは、通知の種類を変数 ( NotificationType など) に抽出します。 [決定] 図形では、この変数の値を使用して受信した通知の種類を決定し、後続の操作を実行するための適切な "パス" を取得します。 前のセクションで説明したように、オーケストレーションは、受信した通知メッセージの種類に基づいて次の操作を実行します。

  • 通知メッセージが挿入操作または更新操作の場合、アダプター クライアントはメッセージを C:\TestLocation\UpsertNotification フォルダーにコピーします。

  • 通知メッセージが他の操作 (Delete など) の場合、アダプター クライアントはメッセージを C:\TestLocation\OtherNotificaiton フォルダーにコピーします。

    そのため、オーケストレーションには次のものが含まれている必要があります。

  • 通知メッセージを受信する一方向の受信ポート。

  • 受信した通知の種類を抽出する xpath クエリを含む式図形。

  • オーケストレーションにおいて決定ブロックを含める決定図形。 この決定ブロックでは、アプリケーションは、受信した通知メッセージに基づいて、後続の操作を実行する対象を決定します。

  • 最終的に通知メッセージを受信する 2 つの一方向送信ポート。

  • 図形を受け取れ。

    サンプル オーケストレーションは次のようになります。

    通知後タスクを実行するオーケストレーション

メッセージ図形の追加

メッセージ図形ごとに次のプロパティを指定してください。 [図形] 列に一覧表示される名前は、先ほど説明したオーケストレーションに表示されるメッセージ図形の名前です。

図形の種類 特性
通知を受け取る 受け取る - 名前ReceiveNotification に設定する

- アクティブ化True に設定する

式図形を追加する

オーケストレーションに式図形を含める目的は、受信した通知メッセージの種類を抽出する xpath クエリを使用することです。 xpath クエリを作成する前に、通知メッセージの形式を見てみましょう。 一般的な通知メッセージは次のようになります。

<Notification xmlns="http://schemas.microsoft.com/Sql/2008/05/Notification/">  
  <Info>Insert</Info>   
  <Source>Data</Source>   
  <Type>Change</Type>   
</Notification>  

ご覧のように、通知の種類に関する情報は、親<Notification>タグ内の <info> タグ内で使用できます。 そのため、この式の図形の一部として、次の操作を行う必要があります。

  • <Info> タグ内の値を含む変数を作成し、その型を System.String に設定します。 変数の作成の詳細については、「 オーケストレーションでの変数の使用」を参照してください。

    このトピックでは、変数に NotificationType という名前を 付けます

  • <Info> タグから値を抽出する xpath クエリを作成します。 xpath クエリは次のようになります。

    NotificationType = xpath(NotifyReceive,"string(/*[local-name()='Notification']/*[local-name()='Info']/text())");  
    

    この xpath クエリでは、 NotifyReceive は通知メッセージを受信するために作成したメッセージです。 string関数内の抜粋は、クエリが <Info> タグ内の値を抽出する必要があることを示しています。これは、<Notification> タグ内にあります。 最後に、クエリによって抽出された値が NotificaitonType 変数に割り当てられます。

決定図形の追加

決定図形を追加する目的は、受信した通知メッセージの種類に基づいて実行する後続の操作を決定する決定ブロックをオーケストレーションに含めることです。 決定は、 NotificationType 変数の値に基づいて行われます。 このトピックでは、オーケストレーションによって、受信した通知メッセージの種類に基づいて決定が行われます。 そのため、ルール図形の条件は次のように指定されます。

NotificationType.Equals("Insert") | NotificationType.Equals("Update")  

この条件は、 NotificaitonType 変数の値が Insert または Update の場合、オーケストレーションが 1 つのタスク セットを実行することを示唆しています。 NotificationType 変数の値がそれ以外の場合、オーケストレーションは他の一連のタスクを実行します。

前のセクションで説明したように、簡単な方法を示すために、オーケストレーションは通知メッセージの種類に基づいて異なるフォルダーにメッセージをコピーします。 そのため、Rule ブロックと Else ブロック内で、Send 図形を追加してメッセージを別のポートに送信する必要があります。 このトピックでは、ルール ブロックの Send 図形に SendUpsertNotification 、Else ブロックの Send 図形に SendOtherNotification という名前を付けます。

ポートの追加

次の論理ポートをオーケストレーションに追加する必要があります。

  • SQL Server から通知メッセージを受信する一方向の受信ポート。

  • 挿入および更新操作の通知メッセージを特定のフォルダーに送信する一方向送信ポート。

  • 他の操作の通知メッセージを特定のフォルダーに送信する一方向送信ポート。

    論理ポートごとに次のプロパティを指定してください。 [ポート] 列に表示される名前は、オーケストレーションに表示されるポートの名前です。

港 / ポート 特性
SQLNotifyPort - 識別子SQLNotifyPort に設定する

- SQLNotifyPortType に設定する

- 通信パターン一方向に設定する

- 通信方向受信に設定する
NotificationUpsertPort - 識別子NotificationUpsertPort に設定する

- NotificationUpsertPortType に設定する

- 通信パターン一方向に設定する

- 通信方向送信に設定する
OtherNotificationPort - 識別子OtherNotificationPort に設定する

- OtherNotificationPortTypeに設定にする

- 通信パターン一方向に設定する

- 通信方向送信に設定する

アクション図形のメッセージを指定し、ポートに接続する

次の表では、アクション図形のメッセージを指定し、メッセージをポートにリンクするために設定するプロパティとその値を指定します。 [図形] 列に表示される名前は、前述のオーケストレーションに表示されるメッセージ図形の名前です。

特性
通知を受け取る - メッセージNotifyReceive に設定する

- 操作SQLNotifyPort.Notify.Request に設定する
送信アップサート通知 - メッセージNotifyReceive に設定する

- 操作NotificationUpsertPort.Upsert.Request に設定する
別の通知を送信する - メッセージ選択するように設定する

- 操作OtherNotificationPort.Other.Request に設定する

これらのプロパティを指定すると、メッセージの図形とポートが接続され、オーケストレーションが完了します。

BizTalk ソリューションをビルドし、BizTalk Server に展開する必要があります。 詳細については、「オーケストレーションの ビルドと実行」を参照してください。

BizTalk アプリケーションの構成

BizTalk プロジェクトを展開すると、前に作成したオーケストレーションが BizTalk Server 管理コンソールの [ オーケストレーション ] ウィンドウの下に一覧表示されます。 BizTalk Server 管理コンソールを使用してアプリケーションを構成する必要があります。 チュートリアルについては、「 チュートリアル: 基本的な BizTalk アプリケーションの展開」を参照してください。

アプリケーションの構成には、次の作業が含まれます。

  • アプリケーションのホストの選択。

  • オーケストレーションで作成したポートを BizTalk Server 管理コンソールの物理ポートにマッピングします。 このオーケストレーションでは、次の操作を行う必要があります。

    • 物理 WCF-Custom または一方向の受信ポート WCF-SQL 定義します。 このポートは、SQL Server データベースからの通知をリッスンします。 ポートを作成する方法については、「 SQL アダプターへの物理ポート バインドを手動で構成する」を参照してください。 受信ポートには、次のバインド プロパティを指定してください。

      Von Bedeutung

      デザイン時にバインド プロパティを指定した場合は、この手順を実行する必要はありません。 このような場合は、アダプターの使用サービス アドインによって作成されたバインド ファイルをインポートすることで、必要なバインド プロパティを設定して、WCF カスタムまたは WCF-SQL 受信ポートを作成できます。 詳細については、 SQL アダプターを使用するようにポート バインド ファイルを使用して物理ポート バインドを構成するを参照してください

      バインディングプロパティ 価値
      InboundOperationType これを [通知] に設定します。
      NotificationStatement 次の設定を行います。

      SELECT Employee_ID, Name FROM dbo.Employee WHERE Status=0

      手記: この SELECT ステートメントに示すように、ステートメントで列名を具体的に指定する必要があります。 また、テーブル名とスキーマ名を常に指定する必要があります。 たとえば、dbo.Employee のようにします。
      NotifyOnListenerStart これを True に設定 します

      さまざまなバインド プロパティの詳細については、「 BizTalk Adapter for SQL Server アダプターのバインドプロパティ」を参照してください。

      SQL アダプターを使用して受信操作を実行するときに、トランザクション分離レベルとトランザクション タイムアウトを構成することをお勧めします。 サービス動作を WCF-Custom または WCF-SQL 受信ポートの構成時に追加します。 サービスの動作を追加する方法については、「SQL を使用して トランザクション分離レベルとトランザクション タイムアウトを構成する」を参照してください。

    • ハード ディスク上の場所と、BizTalk オーケストレーションが挿入および更新操作のために SQL Server データベースから通知メッセージを削除する対応するファイル ポートを定義します。 このポートを構成して、通知メッセージを C:\TestLocation\UpsertNotification フォルダーにドロップします。

    • ハード ディスク上の場所と、BizTalk オーケストレーションが他のすべての操作のために SQL Server データベースから通知メッセージを削除する対応するファイル ポートを定義します。 このポートを構成して、通知メッセージを C:\TestLocation\OtherNotification フォルダーにドロップします。

アプリケーションの起動

SQL Server データベースから通知メッセージを受信し、以降の選択操作と更新操作を実行するために、BizTalk アプリケーションを起動する必要があります。 BizTalk アプリケーションを起動する手順については、「オーケストレーションを 開始する方法」を参照してください。

この段階で、次のことを確認します。

  • WCF-Custom または WCF-SQL の一方向受信ポートは、SQL Server データベースから通知メッセージを受信して実行しています。

  • SQL Server からメッセージを受信する 2 つの FILE 送信ポートが実行されています。

  • 操作の BizTalk オーケストレーションが実行されています。

操作の実行

BizTalk オーケストレーションを開始すると、次の一連のアクションが実行されます。

  • NotifyOnListenerStart バインド プロパティが True に設定されているため、次のメッセージが表示されます。

    <?xml version="1.0" encoding="utf-8" ?>  
    <Notification xmlns="http://schemas.microsoft.com/Sql/2008/05/Notification/">  
      <Info>ListenerStarted</Info>   
      <Source>SqlBinding</Source>   
      <Type>Startup</Type>   
    </Notification>  
    

    <Info> タグの値は "ListnerStarted" であることに注意してください。 そのため、このメッセージは C:\TestLocation\OtherNotification フォルダーで受信されます。

  • Employee テーブルにレコードを挿入します。 次のような通知メッセージが表示されます。

    <?xml version="1.0" encoding="utf-8" ?>   
    <Notification xmlns="http://schemas.microsoft.com/Sql/2008/05/Notification/">  
      <Info>Insert</Info>   
      <Source>Data</Source>   
      <Type>Change</Type>   
    </Notification>  
    

    <Info> タグの値は "Insert" であることに注意してください。 そのため、このメッセージは C:\TestLocation\UpsertNotification フォルダーで受信されます。

  • Employee テーブルのレコードを更新します。 次のような通知メッセージが表示されます。

    <?xml version="1.0" encoding="utf-8" ?>  
    <Notification xmlns="http://schemas.microsoft.com/Sql/2008/05/Notification/">  
      <Info>Update</Info>   
      <Source>Data</Source>   
      <Type>Change</Type>   
    </Notification>  
    

    <Info> タグの値は "Update" であることに注意してください。 そのため、このメッセージは C:\TestLocation\UpsertNotification フォルダーで受信されます。

  • Employee テーブルからレコードを削除します。 次のような通知メッセージが表示されます。

    <?xml version="1.0" encoding="utf-8" ?>  
    <Notification xmlns="http://schemas.microsoft.com/Sql/2008/05/Notification/">  
      <Info>Delete</Info>   
      <Source>Data</Source>   
      <Type>Change</Type>   
    </Notification>  
    

    <Info> タグの値は "Delete" であることに注意してください。 そのため、このメッセージは C:\TestLocation\OtherNotification フォルダーで受信されます。

ベスト プラクティス

BizTalk プロジェクトを展開して構成したら、構成設定をバインド ファイルと呼ばれる XML ファイルにエクスポートできます。 バインド ファイルを生成したら、同じオーケストレーションの送信ポートと受信ポートを作成する必要がないように、ファイルから構成設定をインポートできます。 バインディング・ファイルの詳細については、 アダプター・バインディングの再利用を参照してください。

通知メッセージを受信した後の複雑な操作の実行

わかりやすくし、理解を深めるために、このトピックのオーケストレーションでは、通知の種類に基づいて異なるフォルダーにメッセージをコピーします。 ただし、実際のシナリオでは、より複雑な操作を実行することが必要になる場合があります。 このトピックで説明されている手順と同様の手順を実行し、それらを基にして必要な操作を実行できます。 たとえば、Employee テーブルに対する挿入操作の通知メッセージが表示された場合は、オーケストレーションを変更して別のテーブルにレコードを挿入できます。 このような場合は、[決定] 図形内で適切な変更を行うことができます。

このようなシナリオの 1 つは、「 チュートリアル 2: 従業員 - SQL アダプターを使用した発注書プロセス」で詳しく説明されています。

こちらもご覧ください

BizTalk Server を使用して SQL クエリ通知を受信する