共用方式為


使用 BizTalk Server 在 Oracle 資料庫中叫用多載函式和程式

預存程式和函式可以在 Oracle 資料庫中多載。 Oracle 資料庫配接器藉由變更作業的目標命名空間,支援多載函式和程式。 例如,兩個重載程式的訊息結構如下所示:

Stored Procedure Overload 1:  
<[SP_NAME] xmlns="http://Microsoft.LobServices.OracleDB/2007/03/[SCHEMA]/Package/[PACKAGE_NAME]/[SP_NAME]/overload1">    
  <[PRM1_NAME]>value1</[PRM1_NAME]>  
  <[PRM2_NAME]>value1</[PRM2_NAME]>  
  …  
</[SP_NAME]>  
  
Stored Procedure Overload 2:  
<[SP_NAME] xmlns="http://Microsoft.LobServices.OracleDB/2007/03/[SCHEMA]/Package/[PACKAGE_NAME]/[SP_NAME]/overload2">    
  <[PRM1_NAME]>value1</I_[PRM1_NAME]>  
  <[PRM2_NAME]>value1</I_[PRM2_NAME]>  
  …  
</[SP_NAME]>  

叫用多載函式或程式所需的SOAP訊息結構和SOAP動作類似於叫用函式和程式,如 函式和程式的訊息架構所述。

叫用多載程式類似於叫用任何其他函式,如 使用 BizTalk Server 叫用 Oracle 資料庫中的函式和程式中所述。 不過,為了區分多載函式,Oracle 資料庫配接器會在呈現多載的元件時,將唯一字串附加至節點識別碼和命名空間。 這個字串在第一個多載中是「overload1」,在下一個多載中是「overload2」,依此類推。

如何叫用多載函式和程式?

搭配 BizTalk Server 使用 Oracle 資料庫配接器在 Oracle 資料庫上執行作業牽涉到建置組塊中所述的程式性工作 ,以使用 Oracle Database 開發 BizTalk 應用程式。 若要在 Oracle 資料庫中叫用函式,這些工作如下:

  1. 建立 BizTalk 專案,併為您想要在 Oracle 資料庫中叫用的多載函式產生架構。

  2. 在 BizTalk 專案中建立訊息,以便從 Oracle 資料庫傳送和接收訊息。 您必須為每個超載建立訊息。

  3. 建立協調流程以在 Oracle 資料庫中叫用多載函式。

  4. 建置及部署 BizTalk 專案。

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

  6. 啟動 BizTalk 應用程式。

    本主題提供執行這些工作的指示。

此主題的範例

根據本主題的 InvokeOverloadedProc 範例也隨附 BizTalk 配接器套件。 如需詳細資訊,請參閱 配接器範例

產生架構

在本主題中,為了示範如何叫用多載函式或程序,我們將在 SCOTT\Package\ACCOUNT_PKG 架構下叫用GET_ACCOUNT程式。 此套件是透過執行範例所提供的 SQL 腳本,在 SCOTT 架構下建立。 這是多載程序,其中:

  • 一個多載會採用帳戶標識碼作為 IN 參數,並傳回 ACCOUNT%ROWTYPE 作為 OUT 參數。

  • 第二個多載會採用帳戶名稱作為 IN 參數,並傳回 ACCOUNT%ROWTYPE 作為 OUT 參數。

    若要深入瞭解範例和 SQL 腳本,請參閱 架構範例

    若要叫用多載函式,我們會為多載程式產生架構,GET_ACCOUNT.1 和 GET_ACCOUNT.2。 如需如何產生架構的詳細資訊,請參閱 在Visual Studio中擷取 Oracle 資料庫作業的元數據

定義訊息和訊息類型

您稍早產生的架構描述協調流程中訊息所需的「類型」。 訊息通常是變數,其類型是由對應的架構所定義。 您必須將您在第一個步驟中產生的架構連結至 BizTalk 專案的 [協調流程檢視] 視窗的訊息。

針對本主題,您必須建立兩個要求-回應消息集:第一個多載程式的一個要求-回應集,第二個多載程式的第二個要求-回應集。

執行下列步驟來建立訊息,並將其連結至架構。

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

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

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

  4. 屬性 窗格中,對 Message_1 執行下列動作:

    使用此 若要這樣做
    識別碼 輸入 要求
    訊息類型 從下拉式清單中,展開 [架構],然後選取 [InvokeOverloadedProc.OracleDBBindingSchema.GET_ACCOUNT],其中 InvokeOverloadedProc 是 BizTalk 項目的名稱。 OracleDBBindingSchema 是針對GET_ACCOUNT程式所產生的架構。
  5. 重複上一個步驟,再建立三個訊息。 在新訊息的 [ 屬性 ] 窗格中,執行下列動作:

    將標識碼設定為 將訊息類型設定為
    回應 InvokeOverloadedProc.OracleDBBindingSchema.GET_ACCOUNTResponse
    請求2 InvokeOverloadedProc.OracleDBBindingSchema1.GET_ACCOUNT
    回應2 InvokeOverloadedProc.OracleDBBindingSchema1.GET_ACCOUNTResponse

設定協調流程

您必須建立 BizTalk 協調流程,才能使用 BizTalk Server 來叫用 Oracle 資料庫中的多載程式。 在此協調流程中,您會在定義的接收位置放置兩個要求訊息,每個都對應至一個超負荷程序。 Oracle 資料庫配接器會取用訊息,並透過 ODP 將它們傳遞至 Oracle 資料庫。 Oracle 資料庫的回應會儲存至另一個位置。

因為協調流程會同時挑選兩個要求,因此您必須在協調流程中包含平行動作圖形。 針對每個平行動作,您必須包含傳送和接收圖形,才能將訊息傳送至 Oracle 資料庫並接收回應。 不過,您可以使用相同的埠來傳送和接收這兩項作業的訊息。 同時叫用多載程式的一般協調流程會包含:

  • 傳送和接收圖形以將訊息傳送至 Oracle 資料庫並接收回應。

  • 單向接收埠,用來接收傳送至 Oracle 資料庫的要求訊息。

  • 雙向傳送埠,將要求訊息傳送至 Oracle 資料庫並接收回應。

  • 單向傳送埠,以將回應從 Oracle 資料庫傳送至資料夾。

    叫用GET_ACCOUNT程式第一和第二個多載的範例協調流程如下所示:

    協調流程以叫用多載套件

新增訊息圖形

請確定您為每個訊息圖形指定下列屬性。 Shape 數據行中所列的名稱是訊息圖形的名稱,如剛才提及的協調流程所示。 下表列出您必須包含在其中一個平行作業中的圖形。

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

下表列出其他平行動作必須包含的圖形。

形狀 圖形類型 性能
ReceiveMessage2 收到 - 將 名稱 設定為 ReceiveMessage2
- 將 Activate 設定為 True
SendMessage2 發送 - 將 [名稱] 設定為 SendMessage2
ReceiveResponse2 收到 - 將 [名稱] 設定為 ReceiveResponse2
- 將 Activate 設定為 False
SendResponse2 發送 - 將 [名稱] 設定為 SendResponse2

新增埠

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

港口 性能
檔案輸入 - 將 標識碼 設定為 FileIn
- 將 Type 設定為 FileInType
- 將 通訊模式 設定為 單向
- 將 通訊方向 設定為 接收
LOBPort - 將 識別碼 設定為 LOBPort
- 將 [類型 ] 設定為 LOBPortType
- 將 通訊模式 設定為 要求-回應
- 將 通訊方向 設定為 傳送接收
儲存回應 - 將 標識碼 設定為 SaveResponse
- 將 類型 設定為 SaveResponseType
- 將 通訊模式 設定為 單向
- 將 通訊方向 設定為 傳送

由於您將使用這些埠處理兩個要求和回應訊息,因此您必須為每個埠建立兩個作業,其中每個作業對應至一個訊息類型。 若要建立作業,請以滑鼠右鍵按兩下埠圖形,然後選取[ 新增作業]。 將每個埠的第一個作業命名為 Overload1 ,並將每個埠的第二個作業命名為 Overload2

使用相互關聯

關聯是將接收的訊息比對到協調流程的適當實例的過程。 在編排流程中,您將丟棄兩個要求訊息,每個過載各一個。 使用關聯性,您可以將請求訊息與正確的協調流程建立關聯。 如需相互關聯的詳細資訊,請參閱 在協調流程中使用相互關聯

使用相互關聯
  1. 將從為每個重載函式生成的模式中推升屬性。 例如,從第一個多載的架構升級 AID 屬性;從第二個多載的架構升級 ANAME 屬性。 若要提升屬性,請在架構檢視中的屬性上按滑鼠右鍵,指向 [提升],然後選取 [快速提升]。 這會將 PropertySchema.xsd 檔案新增至 BizTalk 專案。

    如需推廣屬性的相關信息,請參閱 推廣屬性

  2. 在 [協調流程檢視] 中,以滑鼠右鍵按兩下 [相互關聯類型],然後選取 [ 新增相互關聯類型]。

  3. [ 相互關聯屬性 ] 對話框會列出您在步驟 1 中升級的屬性。 選取屬性,然後按兩下 [ 新增]。

  4. 按一下 [確定]

  5. 若要建立其他升級屬性的相互關聯類型,請重複這些步驟。

  6. 根據關聯型別的 屬性重新命名相互關聯類型。 您可以將相互關聯類型重新命名為 CorrelationType_AID (適用於 AID 屬性)和 CorrelationType_ANAME (針對 ANAME 屬性)。

  7. 在 [協調流程檢視] 中,以滑鼠右鍵按兩下 [相互關聯集],然後選取 [ 新增相互關聯集]。

  8. 以滑鼠右鍵單擊新增的相互關聯集,然後單擊 屬性。 在 [屬性] 窗格中,執行下列動作:

    使用此 若要這樣做
    相互關聯類型 InvokeOverloadedProc.CorrelationType_AID
    識別碼 Correlation_AID
  9. 新增另一個相互關聯集,然後從 [屬性] 窗格指定下列屬性。

    使用此 若要這樣做
    相互關聯類型 InvokeOverloadedProc.CorrelationType_ANAME
    識別碼 Correlation_ANAME

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

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

形狀 性能
接收訊息 - 將 初始化相互關聯集 設定為 Correlation_AID
- 將 訊息 設定為 要求
- 將 作業 設定為 FileIn.Overload1.Request
發送訊息 - 將 訊息 設定為 要求
- 將 作業 設定為 LOBPort.Overload1.Request
接收回應 - 將 訊息 設定為 回應
- 將 作業 設定為 LOBPort.Overload1.Response
SendResponse - 將 訊息 設定為 回應
- 將 作業 設定為 SaveResponse.Overload1.Request
ReceiveMessage2 - 將 初始化相互關聯集設定Correlation_ANAME
- 將 訊息 設定為 Request2
- 將 作業 設定為 FileIn.Overload2.Request
SendMessage2 - 將 訊息 設定為 Request2
- 將 作業 設定為 LOBPort.Overload2.Request
ReceiveResponse2 - 將 訊息 設定為 Response2
- 將 作業 設定為 LOBPort.Overload2.Response
SendResponse2 - 將 訊息 設定為 Response2
- 將 作業 設定為 SaveResponse.Overload2.Request

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

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

設定 BizTalk 應用程式

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

設定應用程式牽涉到:

  • 選取應用程式的主機。

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

    • 在硬碟上定義一個位置,以及用於放置要求訊息的對應檔案端口,每個超載程序各一個。 BizTalk 協調流程會取用要求訊息,並將其傳送至 Oracle 資料庫。

    • 定義硬碟上的某個位置和一個對應的檔案埠,BizTalk 協同處理程序將把包含 Oracle 資料庫回應的回應訊息放置於此,每個重載程序都會有一個。

    • 定義實體 WCF-Custom 或 WCF-OracleDB 傳送埠以將訊息傳送至 Oracle 資料庫。 您也必須在傳送埠中指定動作。 如需如何建立 WCF-Custom 或 WCF-OracleDB 埠的相關信息,請參閱 手動設定實體埠系結至 Oracle Database Adapter。 由於 WCF-Custom 或 WCF-OracleDB 傳送埠傳送和接收符合多個架構的訊息並執行兩項作業,因此您必須為這兩個作業設定動態動作。 如需動作的詳細資訊,請參閱 設定 Oracle 資料庫的 SOAP 動作。 針對此協調流程,動作應設定如下:

      <BtsActionMapping>  
        <Operation Name="Overload1" Action="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG/GET_ACCOUNT/overload1" />  
        <Operation Name="Overload2" Action="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG/GET_ACCOUNT/overload2" />  
      </BtsActionMapping>  
      

      備註

      使用 BizTalk 專案增益集的 Consume Adapter Service 產生結構描述,也會建立繫結檔案,其中包含埠的相關資訊,以及將要為這些埠設定的操作。 您可以從 BizTalk Server 管理主控台匯入此系結檔案,以建立傳送埠(用於輸出通話)或接收埠(用於輸入通話)。 如需詳細資訊,請參閱 使用埠系結檔案設定實體埠系結至 Oracle Database

啟動應用程式

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

在這個階段,請確定:

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

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

  • WCF-Custom 或 WCF-OracleDB 傳送埠以將訊息傳送至 Oracle 資料庫正在執行中。

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

執行作業

在執行應用程式之後,您必須將兩個請求訊息(每個重載程序各一個)放至 FILE 接收位置。 要求訊息的架構必須符合您稍早所產生程序的架構。 如需使用 Oracle 資料庫配接器叫用函式之要求訊息架構的詳細資訊,請參閱函式 和程式的 訊息架構。

例如,調用 GET_ACCOUNT 程式的第一個多載時,要求的訊息為:

<GET_ACCOUNT xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG/GET_ACCOUNT/overload1">  
  <AID>100001</AID>  
</GET_ACCOUNT>  

同樣地,叫用GET_ACCOUNT程式第二個多載的要求訊息為:

<GET_ACCOUNT xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG/GET_ACCOUNT/overload2">  
  <ANAME>Mindy Martin</ANAME>  
</GET_ACCOUNT>  

第一個要求訊息會叫用GET_ACCOUNT程式,以擷取帳戶標識碼等於100020的記錄。 第二個要求訊息會叫用GET_ACCOUNT程式,以擷取帳戶名稱為 “John Smith” 的記錄。

協調流程會取用要求訊息,並將其傳送至 Oracle 資料庫。 Oracle 資料庫的回應會儲存在定義為協調流程一部分的其他 FILE 位置。 例如,叫用第一個多載程式的回應為:

<?xml version="1.0" encoding="utf-8"?>  
<GET_ACCOUNTResponse mlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG/GET_ACCOUNT/overload1">  
 <ACCT>  
  <ACCTID>100001</ACCTID>  
  <NAME>Ty Carlson</NAME>  
  <BALANCE>9000</BALANCE>  
 </ACCT>  
</GET_ACCOUNTResponse>  

可能的例外狀況

如需使用 BizTalk Server 叫用多載套件時可能會遇到的例外狀況相關信息,請參閱 例外狀況和錯誤處理

最佳做法

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

另請參閱

使用 Oracle 資料庫開發 BizTalk 應用程式的建置組塊