預存程式和函式可以在 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 資料庫中叫用函式,這些工作如下:
建立 BizTalk 專案,併為您想要在 Oracle 資料庫中叫用的多載函式產生架構。
在 BizTalk 專案中建立訊息,以便從 Oracle 資料庫傳送和接收訊息。 您必須為每個超載建立訊息。
建立協調流程以在 Oracle 資料庫中叫用多載函式。
建置及部署 BizTalk 專案。
藉由建立實體傳送和接收埠來設定 BizTalk 應用程式。
啟動 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 專案的 [協調流程檢視] 視窗的訊息。
針對本主題,您必須建立兩個要求-回應消息集:第一個多載程式的一個要求-回應集,第二個多載程式的第二個要求-回應集。
執行下列步驟來建立訊息,並將其連結至架構。
建立訊息並連結至架構
如果 BizTalk 專案尚未開啟,請開啟 BizTalk 專案的 [協調流程檢視] 視窗。 若要這樣做,請按一下 [檢視],指向 [其他 Windows],然後按一下 [編排檢視]。
在 [協調流程檢視] 中,以滑鼠右鍵按兩下 [ 訊息],然後按兩下 [ 新增訊息]。
以滑鼠右鍵按下新建立的訊息,然後選取 [ 屬性視窗]。
在 屬性 窗格中,對 Message_1 執行下列動作:
使用此 若要這樣做 識別碼 輸入 要求。 訊息類型 從下拉式清單中,展開 [架構],然後選取 [InvokeOverloadedProc.OracleDBBindingSchema.GET_ACCOUNT],其中 InvokeOverloadedProc 是 BizTalk 項目的名稱。 OracleDBBindingSchema 是針對GET_ACCOUNT程式所產生的架構。 重複上一個步驟,再建立三個訊息。 在新訊息的 [ 屬性 ] 窗格中,執行下列動作:
將標識碼設定為 將訊息類型設定為 回應 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。
使用相互關聯
關聯是將接收的訊息比對到協調流程的適當實例的過程。 在編排流程中,您將丟棄兩個要求訊息,每個過載各一個。 使用關聯性,您可以將請求訊息與正確的協調流程建立關聯。 如需相互關聯的詳細資訊,請參閱 在協調流程中使用相互關聯。
使用相互關聯
將從為每個重載函式生成的模式中推升屬性。 例如,從第一個多載的架構升級 AID 屬性;從第二個多載的架構升級 ANAME 屬性。 若要提升屬性,請在架構檢視中的屬性上按滑鼠右鍵,指向 [提升],然後選取 [快速提升]。 這會將 PropertySchema.xsd 檔案新增至 BizTalk 專案。
如需推廣屬性的相關信息,請參閱 推廣屬性。
在 [協調流程檢視] 中,以滑鼠右鍵按兩下 [相互關聯類型],然後選取 [ 新增相互關聯類型]。
[ 相互關聯屬性 ] 對話框會列出您在步驟 1 中升級的屬性。 選取屬性,然後按兩下 [ 新增]。
按一下 [確定]。
若要建立其他升級屬性的相互關聯類型,請重複這些步驟。
根據關聯型別的 屬性重新命名相互關聯類型。 您可以將相互關聯類型重新命名為 CorrelationType_AID (適用於 AID 屬性)和 CorrelationType_ANAME (針對 ANAME 屬性)。
在 [協調流程檢視] 中,以滑鼠右鍵按兩下 [相互關聯集],然後選取 [ 新增相互關聯集]。
以滑鼠右鍵單擊新增的相互關聯集,然後單擊 屬性。 在 [屬性] 窗格中,執行下列動作:
使用此 若要這樣做 相互關聯類型 InvokeOverloadedProc.CorrelationType_AID 識別碼 Correlation_AID 新增另一個相互關聯集,然後從 [屬性] 窗格指定下列屬性。
使用此 若要這樣做 相互關聯類型 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 資料庫配接器系結。