共用方式為


使用 SQL 配接器接收查詢通知的考慮

本主題提供一些考慮和最佳做法,以在使用 SQL 配接器接收來自SQL Server資料庫的查詢通知時記住。

使用配接器接收通知時的考慮

使用 SQL 配接器來接收查詢通知時,您必須考慮下列事項:

  • SQL 配接器會從SQL Server接收查詢通知,然後直接將通知傳遞給配接器用戶端。 介面卡不會區分不同作業的通知 (,亦即配接器沒有任何資訊,不論特定通知是針對插入作業還是更新作業) 。

  • 作業的通知訊息不會受到該作業所影響的記錄數目所影響。 例如,不論SQL Server資料庫資料表中插入、更新或刪除的記錄數目為何,配接器用戶端都只會接收一則通知訊息。

  • 我們建議配接器用戶端應用程式包含邏輯,以解譯從 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 > 元素內 <值的指示。 您也可以使用 SQL 配接器,在教學課程 2:員工 - 採購單程式取得執行類似工作的詳細教學課程。

  • 在理想情況下,用戶端應用程式收到特定記錄的通知之後,應該更新該記錄,以便不會收到其他通知。 例如,假設有[狀態] 資料行的Employee資料表。 對於插入 Employee 資料表的所有新記錄, [狀態 ] 資料行中的值一律為 「0」,因此資料表看起來會像下面這樣:

    員工名稱 狀態
    John 0

    若要接收新插入記錄的通知,配接器用戶端會將 NotificationStatement 系結屬性設定為:

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

    注意

    您必須特別指定 語句中的資料行名稱,如這個 SELECT 語句所示。 此外,您也必須一律指定資料表名稱以及架構名稱。 例如,dbo。員工。

    收到通知之後,用戶端應用程式必須將 Status 資料行的值重設為 「1」,讓通知語句不會再次在記錄上運作。 若要達到此目的,用戶端應用程式必須在 Employee 資料表上執行更新作業。 更新作業之後, Employee 資料表中的相同記錄看起來會像下面這樣:

    員工名稱 狀態
    John 1

    有趣的是,「更新」作業會再次傳送通知給配接器用戶端,而整個程式會再次重複,因此用戶端應用程式必須具有必要的邏輯,才能捨棄這類垃圾通知。

  • 如果 NotifyOnListenerStart 系結屬性為 true,配接器用戶端會在每次接收位置啟動時收到通知訊息。 如需如何使用系結屬性和解譯通知訊息的詳細資訊,請參閱使用 BizTalk Server 在 SQL 中接收位置分解之後接收查詢通知

接收通知的典型協調流程

本節概述使用 SQL 配接器接收通知的典型協調流程流程。

  1. 協調流程必須執行的第一件事是判斷收到的通知類型,包括:

    • 接收位置重新開機之後是否收到通知。

    • 是否收到資料庫資料表上作業的通知,例如 Insert、Update 或 Delete。

      協調流程必須包含 運算式 圖形,在該圖形中,xpath 查詢可決定收到何種訊息。

  2. 判斷通知類型之後,協調流程必須包含決策區塊,才能根據收到的通知類型執行特定動作。 若要達成此目的,協調流程必須包含 決定 圖形,其中包含 規則 區塊和 Else 區塊:

    • 規則 區塊中,您必須指定條件,然後包含協調流程圖形,以在符合條件時執行特定作業。

    • Else 區塊內,您必須包含協調流程圖形,才能在 不符合 條件時執行特定作業。

    上述需求的詳細資料會在使用 BizTalk Server 處理通知訊息中完成 SQL 中的特定工作中所述。 您也可以使用 SQL 配接器在教學課程 2:員工 - 採購單程式中找到詳細的教學課程。