共用方式為


在 SQL Server 中使用 BizTalk Server 執行包含 FOR XML 子句的預存程式

SQL SELECT 語句可以有 FOR XML 子句,以 XML 的形式傳回查詢結果,而不是數據列集。 您也可以編寫一個包含 FOR XML 子句的 SELECT 語句的預存程序。 FOR XML (SQL Server) 有詳細資訊。

您可以使用 WCF 型 SQL 配接器來執行這類預存程式。

這很重要

BizTalk Server 提供的「原生」SQL 配接器需要預存程式,讓 FOR XML 子句成為 SELECT 語句的一部分。 您可以使用這類預存程式搭配 WCF 型 SQL 配接器,而不需對預存程式定義進行任何變更。

您一律可以使用舊版 BizTalk Server 所提供的「原生」SQL 配接器所產生的架構。 如需詳細資訊,請參閱 搭配 WCF-SQL 配接器使用 FOR XML 查詢

如何使用 FOR XML 子句叫用預存程式

當您在 SQL Server Management Studio 中使用 FOR XML 子句叫用預存程式,或使用 BizTalk Server 提供的 SQL 配接器時,輸出的格式為 xml 訊息。 若要搭配 WCF 型 SQL 配接器使用這些程式,您必須具有輸出訊息的架構。 WCF 型 SQL 配接器在執行具有 FOR XML 子句的預存程序之後,需要此架構,同時從 SQL Server 接收回應訊息。 請注意,叫用此預存程式的要求訊息將由配接器本身產生。

除了具有回應訊息格式的結構描述之外,您還必須執行特定任務,以使用 WCF 型 SQL 配接器搭配 FOR XML 子句呼叫預存程序。

  1. 使用 FOR XML 子句為預存程式的回應訊息產生架構。 如果您已經有 BizTalk Server 提供的「原生」SQL 配接器所產生的回應架構,您可以略過此步驟。

  2. 建立 BizTalk 專案,並將產生的架構新增至專案。

  3. 使用 WCF 型 SQL 配接器,透過 FOR XML 子句產生預存程序的架構。 這會提供配接器傳送至 SQL Server 以叫用預存程式之要求訊息的架構。

  4. 在 BizTalk 專案中建立訊息,以從 SQL Server 傳送和接收訊息。 要求訊息必須符合配接器所產生的要求訊息架構。 回應消息必須符合使用「原生」SQL 配接器取得的回應消息架構,或在 SQL Server Management Studio 中使用 FOR XML 子句執行預存程式。

  5. 建立協調流程以叫用 SQL Server 資料庫中的預存程式。

  6. 建置及部署 BizTalk 專案。

  7. 藉由建立實體傳送和接收埠來設定 BizTalk 應用程式。

  8. 啟動 BizTalk 應用程式。

產生預存程式的回應消息架構

備註

如果您的 SQL 配接器產生的回應架構可供 BizTalk Server 使用,則不需要執行此步驟。

您可以為預存程式產生回應消息的架構,前提是預存程式中的SELECT語句具有 xmlschema 子句與 for xml 子句。 在本主題中,我們使用GET_EMP_DETAILS_FOR_XML預存程式,擷取指定員工標識碼的員工詳細數據。 若要藉由執行預存程式來擷取架構,SELECT 語句看起來如下:

SELECT [Employee_ID] ,[Name] ,[DOJ] ,[Designation] ,[Job_Description] ,[Photo] ,cast([Rating] as varchar(100)) as Rating ,[Salary] ,[Last_Modified] ,[Status] ,[Address]
FROM [Adapt_Doc].[dbo].[Employee] for xml auto, xmlschema

執行此預存程式以取得回應訊息的架構。 請注意,預存程式的回應包含架構,以及執行預存程序的數據。 您必須從回應複製架構,並將它儲存到文本板。 在此範例中,您可以將此架構命名為 ResponseSchema.xsd。 您現在必須在Visual Studio中建立 BizTalk 專案,並將此架構新增至專案。

這很重要

請務必在執行預存程式以產生架構之後移除 xmlschema 子句。 如果您無法這麼做,當您最後透過 BizTalk 執行預存程式時,您會在回應訊息中再次產生架構。 因此,若要以 xml 的形式取得回應消息,您必須移除 xmlschema 子句。

將架構新增至 BizTalk 專案

  1. 在 Visual Studio 中建立 BizTalk 專案。

  2. 將您為預存程式產生的回應架構新增至 BizTalk 專案。 以滑鼠右鍵按兩下方案總管中的BizTalk專案,指向[ 新增],然後按兩下 [ 現有專案]。 在 [新增現有專案] 對話框中,流覽至您儲存架構的位置,然後按兩下 [ 新增]。

  3. 在 Visual Studio 中開啟架構,並進行下列變更。

    1. 將節點新增至架構,並將現有的根節點移至這個新增的節點底下。 提供根節點的名稱。 針對本主題,請將根節點重新命名為 Root

    2. 針對預存程式產生的回應架構會參考 sqltypes.xsd。 您可以從https://go.microsoft.com/fwlink/?linkid=31850中取得 sqltypes.xsd 綱要。 將 sqltypes.xsd 架構新增至 BizTalk 專案。 如需此架構的詳細資訊,請移至:

    3. 在為預存程序生成的架構中,將 import schemaLocation 的值變更為以下內容。

      import schemaLocation=”sqltypes.xsd”
      

      這樣做是因為您已經將 sqltypes.xsd 架構新增至 BizTalk 專案。

    4. 提供架構的目標命名空間。 按兩下 [<架構]> 節點,然後在 [屬性] 窗格中,在 [目標命名空間] 屬性中指定命名空間。 針對本主題,將命名空間指定為 http://ForXmlStoredProcs/namespace

產生要求訊息叫用預存程序的架構

若要產生要求訊息的架構,您可以使用 Visual Studio 中 BizTalk 專案的取用配接器服務增益集。 針對本主題,產生GET_EMP_DETAILS_FOR_XML預存程序的架構。 如需有關如何使用取用配接器服務附加元件產生架構的詳細資訊,請參閱使用 SQL 配接器在 Visual Studio 中擷取 SQL Server 作業的元數據

這很重要

您必須僅從 [取用配接器服務插件] 中的 [程序] 節點選擇程序,以生成架構。

定義訊息和訊息類型

您稍早產生的架構描述協調流程中訊息所需的「類型」。 訊息通常是變數,其類型是由對應的架構所定義。 您現在必須建立協調流程的訊息,並將其連結至您在上一個步驟中產生的架構。

  1. 將協調流程新增至 BizTalk 專案。 在 [方案總管] 中,以滑鼠右鍵按兩下 BizTalk 專案名稱,指向 [ 新增],然後按兩下 [ 新增專案]。 輸入 BizTalk 協調流程的名稱,然後按兩下 [ 新增]。

  2. 如果 BizTalk 專案尚未開啟,請開啟 BizTalk 專案的 [協調流程檢視] 視窗。 若要這樣做,請按一下 [檢視],指向 [其他 Windows],然後按一下 [編排檢視]。

  3. 在 [協調流程檢視] 中,以滑鼠右鍵按兩下 [ 訊息],然後按兩下 [ 新增訊息]。

  4. 以滑鼠右鍵按下新建立的訊息,然後選取 [ 屬性視窗]。

  5. Message_1的 [屬性] 窗格中,執行下列動作:

    使用此 若要這樣做
    識別碼 類型 Request
    訊息類型 從下拉式清單中展開 架構,然後選取 ForXMLProcedure.Procedure_dbo.GET_EMP_DETAILS_FOR_XML,其中 ForXMLProcedure 是您的 BizTalk 專案的名稱。 Procedure_dbo是用來叫用GET_EMP_DETAILS_FOR_XML程序的架構。
  6. 重複步驟 2 以建立新的訊息。 在新訊息的 [ 屬性 ] 窗格中,執行下列動作:

    使用此 若要這樣做
    識別碼 類型 Response
    訊息類型 從下拉式清單中展開 [架構],然後選取 [ForXMLProcedure.ResponseSchema],其中 ResponseSchema 是執行預存程式所產生的回應架構名稱,如 為預存程式的回應消息產生架構中所述。

設定協調流程

您必須建立 BizTalk 協調流程,才能使用 BizTalk Server 在 SQL Server 中執行預存程式。 在此協調流程中,您會在定義的接收位置放置要求訊息。 SQL 配接器會取用此訊息,並將其傳遞至 SQL Server。 SQL Server 的回應會儲存至另一個位置。 您必須包含傳送和接收圖形,才能將訊息分別傳送至 SQL Server 和接收回應。 調用程序的範例調度流程如下所示:

調用預存程序的編排

新增訊息圖形

請確定您為每個訊息圖形指定下列屬性。 Shape 數據行中所列的名稱是訊息圖形的名稱,如剛才提及的協調流程所示。

形狀 圖形類型 性能
接收訊息 收到 - 將 名稱 設定為 ReceiveMessage
- 將 Activate 設定為 True
發送訊息 發送 - 將 [名稱] 設定為 SendMessage
接收回應 收到 - 將 [名稱] 設定為 ReceiveResponse
- 將 Activate 設定為 False
SendResponse 發送 - 將 [名稱] 設定為 SendResponse

新增埠

請確定您為每個邏輯埠指定下列屬性。 [埠] 資料行中所列的名稱是協調流程中顯示的埠名稱。

港口 性能
MessageIn - 將 標識碼 設定為 MessageIn
- 將 類型 設定為 MessageInType
- 將 通訊模式 設定為 單向
- 將 通訊方向 設定為 接收
LOBPort - 將 識別碼 設定為 LOBPort
- 將 [類型 ] 設定為 LOBPortType
- 將 通訊模式 設定為 要求-回應
- 將 通訊方向 設定為 傳送接收
ResponseOut - 將 標識碼 設定為 ResponseOut
- 將 類型 設定為 ResponseOutType
- 將 通訊模式 設定為 單向
- 將 通訊方向 設定為 傳送

設定動作圖形的訊息,並將其連接到端口

下表指定您應該設定的屬性及其值,以配置動作圖形的訊息並將其連結至埠。 Shape 數據行中所列的名稱是訊息圖形的名稱,如先前所述的協調流程所示。

形狀 性能
接收訊息 - 將 訊息 設定為 要求
- 將 作業 設定為 MessageIn.FOR_XML.Request
發送訊息 - 將 訊息 設定為 要求
- 將 作業 設定為 LOBPort.FOR_XML.Request
接收回應 - 將 訊息 設定為 回應
- 將 作業 設定為 LOBPort.FOR_XML.Response
SendResponse - 將 訊息 設定為 回應
- 將 作業 設定為 ResponseOut.FOR_XML.Request

指定這些屬性之後,訊息圖形和埠會連線,且您的協調流程已完成。

您現在必須建置 BizTalk 解決方案,並將其部署至 BizTalk Server。 如需詳細資訊,請參閱 建置和執行協調流程

設定 BizTalk 應用程式

部署 BizTalk 項目之後,您稍早建立的協調流程會列在 BizTalk Server 管理控制台的 [協調流程] 窗格底下。 您必須使用 BizTalk Server 管理主控台來設定應用程式。 如需逐步講解,請參閱 逐步解說:部署基本 BizTalk 應用程式

設定應用程式牽涉到:

  • 選取應用程式的主機。

  • 將您在協調流程中建立的埠對應至 BizTalk Server 管理控制台中的實體埠。 為了這次編排,您必須:

    • 確定硬碟上的一個位置以及相應的檔案埠址,在該處您將放置要求訊息。 BizTalk 協調流程會取用要求訊息,並將其傳送至 SQL Server 資料庫。

    • 在硬碟上定義一個位置和一個對應的檔案埠,BizTalk 協同作業將會放置包含來自 SQL Server 資料庫回應的回應訊息。

    • 定義實體 WCF-Custom 或 WCF-SQL 傳送埠以將訊息傳送至 SQL Server 資料庫。 如需如何建立傳送埠的指示,請參閱 手動設定實體埠系結至 SQL 配接器

      您也必須在傳送埠中指定動作。 針對包含 FOR XML 子句的程式,您必須以下列格式設定動作。

      XmlProcedure/<schema_name>/<procedure_name>
      

      因此,針對我們執行GET_EMP_DETAILS_FOR_XML程式的主題,動作會是:

      XmlProcedure/dbo/GET_EMP_DETAILS_FOR_XML
      

      如需設定動作的詳細資訊,請參閱 設定 SQL 配接器的 SOAP 動作

      使用 FOR XML 子句執行預存程式時,您也必須設定下列系結屬性。

      系結屬性名稱 將此設定為
      XmlStoredProcedureRootNodeName 指定您為預存程式所產生的回應結構中,新增的根節點名稱,如為預存程式的回應消息產生結構中所述。 針對本主題,請將此設定為 Root
      XmlStoredProcedureRootNodeNamespace 為預存程式產生的回應架構指定目標命名空間,如 為預存程式的回應消息產生架構中所述。 針對本主題,請將此設定為 http://ForXmlStoredProcs/namespace

      如需指定系結屬性值的詳細資訊,請參閱 設定 SQL 配接器的系結屬性

      備註

      使用「取用配接器服務 BizTalk 專案附加元件」生成架構時,也會建立系結檔案,其中包含關於這些埠和要在其上設定的動作的信息。 您可以從 BizTalk Server 管理主控台匯入此系結檔案,以建立傳送埠(用於輸出通話)或接收埠(用於輸入通話)。 如需詳細資訊,請參閱 使用埠系結檔案設定實體埠系結以使用 SQL 配接器

啟動應用程式

您必須啟動 BizTalk 應用程式,才能在 SQL Server 資料庫中叫用程式。 如需啟動 BizTalk 應用程式的指示,請參閱 如何啟動協調流程

在這個階段,請確定:

  • 要接收編排要求訊息的 FILE 接收埠正在運行。

  • 從協調流程接收回應訊息的 FILE 傳送埠正在執行中。

  • WCF-Custom 或 WCF-SQL 傳送埠用於將訊息傳送至 SQL Server 資料庫,正在執行。

  • 作業的 BizTalk 協調流程正在執行中。

執行作業

執行應用程式之後,您必須將要求訊息放入 FILE 接收位置。 要求訊息的架構必須符合您使用 Consume Adapter Service 插件所生成的程序要求架構。 例如,叫用GET_EMP_DETAILS_FOR XML 的要求訊息為:

<GET_EMP_DETAILS_FOR_XML xmlns="http://schemas.microsoft.com/Sql/2008/05/Procedures/dbo">
  <emp_id>10765</emp_id>
</GET_EMP_DETAILS_FOR_XML>

如需有關使用 SQL 配接器在 SQL Server 資料庫中叫用程序之請求訊息架構的詳細資訊,請參閱 程序和函數的訊息架構

協調流程會取用訊息,並將其傳送至 SQL Server 資料庫。 SQL Server 資料庫的回應會儲存在定義為協調流程一部分的其他 FILE 位置。 例如,上述要求訊息的 SQL Server 資料庫回應為:

<?xml version="1.0" encoding="utf-8"?>
<Root xmlns="http://ForXmlStoredProcs/namespace">
  <Adapt_Doc.dbo.Employee Employee_ID="10765" Name="John" Designation="asdfaf" Salary="3434.00" Last_Modified="AAAAAAAANso=" Status="0" xmlns="" />
</Root>

請注意,回應會以與執行預存程式所產生的相同架構接收。 另請注意,根節點和命名空間與您分別指定為 XmlStoredProcedureRootNodeNameXmlStoredProcedureRootNodeNamespace 系結屬性的值相同。

最佳做法

部署並設定 BizTalk 項目之後,您可以將組態設定匯出至稱為系結檔案的 XML 檔案。 產生系結檔案之後,您可以從檔案匯入組態設定,因此您不需要為相同的協調流程建立傳送埠和接收埠等專案。 如需系結檔案的詳細資訊,請參閱 重複使用配接器系結

另請參閱

使用 SQL 配接器開發 BizTalk 應用程式