次の方法で共有


SQL アダプターを使用したクエリ通知の受信に関する考慮事項

このトピックでは、SQL アダプターを使用してSQL Server データベースからクエリ通知を受信するときに留意すべき考慮事項とベスト プラクティスについて説明します。

アダプターを使用して通知を受信する際の考慮事項

SQL アダプターを使用してクエリ通知を受信する際には、次の点を考慮する必要があります。

  • SQL アダプターは、SQL Serverからクエリ通知を受け取り、その通知をアダプター クライアントに渡すだけです。 アダプターは、さまざまな操作の通知を区別しません (つまり、特定の通知が Insert 操作または Update 操作に対して行われるかどうかに関係なく、アダプターには情報がありません)。

  • 操作の通知メッセージは、その操作の影響を受けるレコードの数の影響を受けません。 たとえば、SQL Server データベース テーブルに挿入、更新、または削除されたレコードの数に関係なく、アダプター クライアントは通知メッセージを 1 つだけ受信します。

  • アダプター クライアント アプリケーションには、SQL Serverから受信した通知の種類を解釈するロジックが含まれていることをお勧めします。 通知の種類は、受信した通知メッセージの Info> 要素から<情報を抽出することによって決定できます。 挿入操作で受信した通知メッセージの例を次に示します。

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

    Info 要素内の値に<注目してください。> この値は、通知メッセージを受信した操作に関する情報を提供します。 アプリケーションには、Info> 要素内<の値を抽出し、その値に基づいて後続のタスクを実行する機能が必要です。 トピック「BizTalk Serverを使用して SQL で特定のタスクを完了するための通知メッセージの処理」では、Info> 要素内<の値を抽出する方法について説明します。 同様のタスクを実行する詳細なチュートリアルについては、「 チュートリアル 2: 従業員 - SQL アダプターを使用した発注書プロセス」も参照してください。

  • クライアント アプリケーションが特定のレコードの通知を受信した後、追加の通知を受信しないようにレコードを更新することが理想的です。 たとえば、Status 列を持つ Employee テーブルがあるとします。 Employee テーブルに挿入されたすべての新しいレコードについて、Status 列の値は常に "0" であるため、テーブルは次のようになります。

    Employee Name Status
    John 0

    新しく挿入されたレコードの通知を受け取るために、アダプター クライアントは NotificationStatement バインディング プロパティを次のように設定します。

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

    Note

    この SELECT ステートメントに示すように、 ステートメントで列名を具体的に指定する必要があります。 また、テーブル名とスキーマ名を常に指定する必要があります。 たとえば、dbo です。従業員。

    通知を受け取った後、クライアント アプリケーションは Status 列の値を "1" にリセットして、通知ステートメントがレコードに対して再度動作しないようにする必要があります。 これを実現するには、クライアント アプリケーションで Employee テーブルに対して Update 操作を実行する必要があります。 Update 操作の後、 Employee テーブル内の同じレコードは次のようになります。

    Employee Name Status
    John 1

    興味深いことに、更新操作は再びアダプター クライアントに通知を送信し、プロセス全体が再度繰り返されるため、クライアント アプリケーションには、このような不要な通知を破棄するために必要なロジックが必要です。

  • NotifyOnListenerStart バインディング プロパティが true の場合、アダプター クライアントは受信場所が開始されるたびに通知メッセージを受信します。 バインディング プロパティを使用して通知メッセージを解釈する方法の詳細については、「BizTalk Serverを使用して SQL で受信場所の内訳の後にクエリ通知を受信する」を参照してください。

通知を受信するための一般的なオーケストレーション

このセクションでは、SQL アダプターを使用して通知を受信するための一般的なオーケストレーション フローについて説明します。

  1. オーケストレーションで最初に行う必要があるのは、受信した通知の種類 (次を含む) を決定することです。

    • 受信場所の再起動後に通知を受信したかどうか。

    • 挿入、更新、削除など、データベース テーブルに対する操作に関する通知を受信したかどうか。

      オーケストレーションには 図形を含める必要があり、その中に、受信するメッセージの種類を決定する xpath クエリが含まれている必要があります。

  2. 通知の種類が決定された後、オーケストレーションには、受信した通知の種類に基づいて特定のアクションを実行する決定ブロックを含める必要があります。 これを実現するには、オーケストレーションに Rule ブロックとElse ブロックを含む Decide 図形を含める必要があります。

    • Rule ブロック内で条件を指定し、条件が満たされた場合に特定の操作を実行するオーケストレーション図形を含める必要があります。

    • Else ブロック内では、条件が満たされない場合に特定の操作を実行するためにオーケストレーション図形を含める必要があります。

    上記の要件の詳細については、「BizTalk Serverを使用して SQL で特定のタスクを完了するための通知メッセージの処理」を参照してください。 詳細なチュートリアルは、「 チュートリアル 2: 従業員 - SQL アダプターを使用した発注書プロセス」でも入手できます。