使用預存程式輪詢 Oracle E-Business Suite
您可以使用預存程式來持續輪詢 Oracle 資料庫,設定 Oracle E-Business 配接器以接收週期性資料變更訊息。 您可以將預存程式指定為配接器定期執行的輪詢語句,以輪詢 Oracle 資料庫。
若要啟用輪詢,您必須在 WCF-Custom 或 WCF-OracleEBS 接收埠上指定特定系結屬性。 如需配接器如何支援輪詢的詳細資訊,請參閱 支援使用輪詢的輸入呼叫。 如需輪詢作業之 SOAP 訊息結構的相關資訊,請參閱 輪詢作業的訊息架構。
使用 Oracle E-Business 配接器系結屬性設定輪詢作業
下表摘要說明用來設定配接器以接收資料變更訊息的 Oracle E-Business 配接器系結屬性。 在 BizTalk Server 管理主控台中設定 WCF-Custom 或 WCF-OracleEBS 接收埠時,您必須指定這些系結屬性。
Binding 屬性 | Description |
---|---|
InboundOperationType | 指定您要執行 輪詢 或 通知 輸入作業。 預設值為 Polling。 |
PolledDataAvailableStatement | 指定配接器執行的 SQL 語句,以判斷是否有任何資料可供輪詢。 只有在記錄可供使用時,才會執行您為 PollingInput 系結屬性指定的預存程式。 |
PollingInterval | 指定間隔,以秒為單位,Oracle E-Business 配接器會執行 針對 PolledDataAvailableStatement 系結屬性指定的語句。 預設值為 30 秒。 輪詢間隔會決定連續輪詢之間的時間間隔。 如果語句是在指定的間隔內執行,配接器會睡眠間隔中的剩餘時間。 |
PollingInput | 指定輪詢語句。 若要使用預存程式輪詢,您必須指定這個系結屬性的整個要求訊息。 要求訊息必須與您傳送至配接器相同,才能將預存程式叫用為輸出作業。 預設值是 null。 您必須指定 PollingInput 系結屬性的值,才能啟用輪詢。 只有在有資料可供輪詢時,才會執行輪詢語句,這是由 PolledDataAvailableStatement 系結屬性所決定。 |
PollingAction | 指定輪詢作業的動作。 您可以使用取用配接器服務增益集,從為作業產生的中繼資料,判斷特定作業的輪詢動作。 |
PostPollStatement | 指定執行 PollingInput 系結屬性所指定的語句之後所執行的語句區塊。 |
PollWhileDataFound | 指定如果正在輪詢的資料表中有資料可用,Oracle E-Business 配接器是否忽略輪詢間隔,並持續執行輪詢語句。 如果資料表中沒有可用的資料,配接器會還原為在指定的輪詢間隔執行輪詢語句。 預設值為 false。 |
如需這些屬性的更完整描述,請參閱 閱讀 BizTalk Adapter for Oracle E-Business Suite 系結屬性。 如需如何使用 Oracle E-Business 配接器輪詢 Oracle 資料庫的完整描述,請閱讀下列各節。
本主題示範輪詢的方式
在本主題中,若要示範 Oracle E-Business 配接器如何支援使用預存程式接收資料變更訊息,請建立 BizTalk 專案,並針對您想要用來輪詢 Oracle 資料庫的預存程式產生架構。 在本主題中,我們會使用GET_ACTIVITYS預存程式來輪詢 ACCOUNTACTIVITY 資料表。 此預存程式可搭配 ACCOUNT_PKG 套件使用。 您可以執行範例所提供的 SQL 腳本,在資料庫中建立這些物件。
注意
本主題中的協調流程會輪詢 ACCOUNTACTIVITY 資料表,這是藉由執行範例所提供的腳本所建立的基底資料庫資料表。 您必須執行本主題中所述的類似程式,以輪詢任何其他資料表,包括介面資料表。
為了示範輪詢作業,我們會執行下列動作:
指定 PolledDataAvailableStatement 系結屬性的 SELECT 語句,以判斷要輪詢的資料表 (ACCOUNTACTIVITY) 具有任何資料的位置。 在此範例中,您可以將此系結屬性設定為:
SELECT COUNT (*) FROM ACCOUNTACTIVITY
這可確保配接器只有在 ACCOUNTACTIVITY 資料表有一些記錄時,才會執行輪詢語句。
藉由在 PollingInput 系結屬性中提供要求訊息,以執行預存程式GET_ACTIVITYS。 此預存程式會擷取 ACCOUNTACTIVITY 資料表中的所有資料列,而您會從配接器取得回應訊息。
在 PostPollStatement 系結屬性中執行 PL/SQL 區塊。 此語句會將所有資料從 ACCOUNTACTIVITY 資料表移至資料庫中的另一個資料表。 一旦發生這種情況,下次 執行 PollingInput 時,它就不會擷取任何資料,因此GET_ACTIVITYS預存程式會傳回空的回應訊息。
在將更多資料新增至 ACCOUNTACTIVITY 資料表之前,您將會繼續取得空的回應訊息。 因此,您必須使用新的記錄重新填入 ACCOUNTACTIVITY 資料表。 您可以執行範例所提供的 more_activity_data.sql 腳本來執行此動作。 執行此腳本之後,下一個輪詢作業會擷取插入資料表的新記錄。
如何從 Oracle 接收資料變更訊息
使用 Oracle E-Business 配接器搭配 BizTalk Server 在 Oracle 資料庫上執行作業,牽涉到建立Oracle E-Business Suite 應用程式的建置組塊中所述的下列程式工作。 若要設定配接器以使用預存程式輪詢 Oracle 資料庫,這些工作如下:
建立 BizTalk 專案,並針對您想要用於輪詢的預存程式產生架構。
在 BizTalk 專案中建立訊息,以接收來自 Oracle 資料庫的訊息。
建立協調流程以接收來自 Oracle 資料庫的訊息,並將其儲存至資料夾。
建置和部署 BizTalk 專案。
藉由建立實體傳送和接收埠來設定 BizTalk 應用程式。
重要
針對輸入輪詢案例,您必須一律設定單向接收埠。 輸入作業不支援雙向接收埠。
啟動 BizTalk 應用程式。
本主題提供執行這些工作的指示。
根據本主題的範例
根據本主題的 PollingUsingStoredProc 範例也會隨附 BizTalk 配接器套件。 如需詳細資訊,請參閱範例。
產生架構
您必須為GET_ACTIVITYS作業產生架構。 使用取用配接器服務增益集產生架構時,請執行下列工作。
) 選取合約類型作為 [服務 (輸入作業 ]。
產生 GET_ACTIVITYS 程式的架構。
如需如何產生架構的詳細資訊,請參閱 流覽、搜尋和取得 Oracle E-Business Operations 的中繼資料。
定義訊息和訊息類型
您稍早產生的架構描述協調流程中訊息所需的「類型」。 訊息通常是變數,其類型是由對應的架構所定義。 產生架構之後,您必須從 BizTalk 專案的協調流程檢視將其連結至訊息。
針對本主題,您必須建立一則訊息以接收來自 Oracle 的訊息。
執行下列步驟來建立訊息,並將其連結至架構。
建立訊息並連結至架構
將協調流程新增至 BizTalk 專案。 從方案總管,以滑鼠右鍵按一下 BizTalk 專案名稱,指向 [新增],然後按一下 [新增專案]。 輸入 BizTalk 協調流程的名稱,然後按一下 [ 新增]。
如果 BizTalk 專案尚未開啟,請開啟協調流程檢視視窗。 按一下 [檢視],指向 [其他視窗],然後按一下 [ 協調流程檢視]。
在協調 流程檢視中,以滑鼠右鍵按一下 [ 訊息],然後按一下 [ 新增訊息]。
以滑鼠右鍵按一下新建立的訊息,然後選取 [ 屬性視窗]。
在Message_1的 [屬性]窗格中,執行下列動作:
使用 作法 識別碼 輸入 Receive。 訊息類型 從下拉式清單中展開 [ 架構],然後選取 [Polling.OracleEBSBindingSchema],其中 Polling 是您 BizTalk 專案的名稱。 OracleEBSBindingSchema 是針對 GET_ACTIVITYS 預存程式產生的回應架構。
重要: 因為輪詢是單向作業,所以介面卡所產生的架構不包含回應節點,因此架構中只有一個根節點。 如果您針對訊息類型使用這類架構,則必須依產生的架構檔案名來識別架構。
例如,如果您為雙向作業建立架構,則具有名稱OracleEBSBindingSchema
的架構檔案中的節點看起來可能會像 「要求」和「回應」。 如果您想要在對應至要求架構的協調流程中建立訊息,您可以尋找OracleEBSBindingSchema.Request
來識別清單中的架構。 不過,在輪詢作業的情況下,因為唯一的節點是「輪詢」,所以您很難識別您想要對應的架構,因為具有單一節點的架構並未列為 < schemafilename > 。 <rootnodename > 。 相反地,這類架構只會以檔案名列出。 在這種情況下,識別架構的唯一方法是依架構檔名,例如 OracleEBSBindingSchema。取用配接器服務增益集會產生GET_ACTIVITYS預存程式的輸入和輸出作業架構。 您必須使用架構進行輸入作業,才能:
對應在協調流程中建立的訊息。
若要擷取動作,您必須在執行時間指定 PollingAction 系結屬性。
您必須使用輸出作業的架構來取得要求訊息,您必須指定為 PollingInput 系結屬性的一部分。
設定協調流程
您必須建立 BizTalk 協調流程,以使用BizTalk Server從 Oracle 接收輪詢型資料變更訊息。 在此協調流程中,配接器會藉由執行您指定要求訊息作為 PollingInput 系結屬性一部分的預存程式來接收回應。 預存程式的回應訊息會儲存至 FILE 位置。 輪詢 Oracle 資料庫的一般協調流程會包含:
接收和傳送圖形以接收來自 Oracle 的訊息,並分別傳送至 FILE 埠。
單向接收埠,可從 Oracle 資料庫接收訊息。
重要
針對輸入輪詢案例,您必須一律設定單向接收埠。 輸入作業不支援雙向接收埠。
單向傳送埠,可從 Oracle 資料庫傳送輪詢回應。
範例協調流程如下所示。
Oracle
新增訊息圖形
請確定您為每個訊息圖形指定下列屬性。 Shape 資料行中列出的名稱是訊息圖形的名稱,如剛才提及的協調流程所示。
圖形 | 圖形類型 | 屬性 |
---|---|---|
ReceiveMessage | 接收 | - 將 [名稱 ] 設定為 ReceiveMessage - 將 Activate 設定為 True |
SaveMessage | 傳送 | - 將 [名稱 ] 設定為 SaveMessage |
新增埠
請確定您為每個邏輯埠指定下列屬性。 [埠] 資料行中列出的名稱是協調流程中顯示的埠名稱。
連接埠 | 屬性 |
---|---|
OracleReceivePort | - 將 識別碼 設定為 OracleReceivePort - 將 類型 設定為 OracleReceivePortType - 將 通訊模式 設定為 單向 - 將 通訊方向 設定為 接收 |
SaveMessagePort | - 將 識別碼 設定為 SaveMessagePort - 將 類型 設定為 SaveMessagePortType - 將 通訊模式 設定為 單向 - 設定要傳送的通訊方向 |
指定動作圖形的訊息並連接到埠
下表指定屬性及其值,您應該設定為指定動作圖形的訊息,以及將訊息連結至埠。 Shape 資料行中列出的名稱是訊息圖形的名稱,如先前所述的協調流程所示。
圖形 | 屬性 |
---|---|
ReceiveMessage | - 設定要接收的訊息 - 將 作業 設定為 OracleReceivePort.Polling.Request |
SaveMessage | - 設定要接收的訊息 - 將 作業 設定為 SaveMessagePort.Polling.Request |
指定這些屬性之後,訊息圖形和埠就會連線,而且您的協調流程已完成。
您現在必須建置 BizTalk 解決方案,並將其部署至BizTalk Server。 如需詳細資訊,請參閱 建置和執行協調流程。
設定 BizTalk 應用程式
部署 BizTalk 專案之後,您稍早建立的協調流程會列在 [BizTalk Server 管理主控台] 的 [協調流程] 窗格中。 您必須使用 BizTalk Server 管理主控台來設定應用程式。 如需逐步解說,請參閱逐步解說 :部署基本 BizTalk 應用程式。
設定應用程式牽涉到:
選取應用程式的主機。
將您在協調流程中建立的埠對應至 BizTalk Server 管理主控台中的實體埠。 針對此協調流程,您必須:
定義硬碟上的位置,以及 BizTalk 協調流程將從 Oracle 卸載訊息的對應 FILE 埠。 這些訊息將會回應您為接收埠指定的輪詢語句。
定義實體 WCF-Custom 或單向接收埠 WCF-OracleEBS。 此埠會輪詢 Oracle 資料庫。 如需如何建立接收埠的詳細資訊,請參閱手動設定 Oracle E-Business 配接器的實體埠系結。 請確定您為接收埠指定下列系結屬性。
Binding 屬性 值 InboundOperationType 將此設定為 [輪詢]。 PolledDataAvailableStatement 在此範例中,將此系結屬性設定為:
SELECT COUNT (*) FROM ACCOUNTACTIVITY
這可確保配接器只有在 ACCOUNTACTIVITY 資料表有一些記錄時,才會執行輪詢語句。PollingAction 從針對GET_ACTIVITYS程式的輸入訊息產生的架構擷取輪詢動作。 在此範例中,將此系結屬性設定為 PollingPackageApis/APPS/ACCOUNT_PKG/GET_ACTIVITYS。 PollingInput 針對這個系結屬性,指定要叫用GET_ACTIVITYS預存程式的要求訊息。 您可以從取用配接器服務增益集所產生的輸出作業架構取得要求訊息。 您必須提供整個 XML 訊息做為此系結屬性的輸入。 在此範例中,將此系結屬性設定為:
<GET_ACTIVITYS xmlns="http://schemas.microsoft.com/OracleEBS/2008/05/PackageApis/APPS/ACCOUNT_PKG"> <INRECS>OPEN ? FOR SELECT * FROM ACCOUNTACTIVITY</INRECS> </GET_ACTIVITYS>
GET_ACTIVITYS預存程式接受輸入 REF CURSOR 作為參數。PostPollStatement 指定輪詢後語句,將所有資料從 ACCOUNTACTIVITY 資料表移至另一個資料表。 在此範例中,將此系結屬性設定為:
BEGIN ACCOUNT_PKG.PROCESS_ACTIVITY(); END;
For more information about the different binding properties, see Read about the BizTalk Adapter for Oracle E-Business Suite Binding Properties.
重要
如果您要輪詢介面資料表,您必須指定必要的系結屬性來設定應用程式內容。 如需設定應用程式內容的詳細資訊,請參閱 設定應用程式內容。
注意
建議您在使用 Oracle E-Business 配接器執行輸入作業時,設定交易隔離等級和交易逾時。 您可以在設定 WCF-Custom 或 WCF-OracleEBS 接收埠時新增服務行為來執行此動作。 如需如何新增服務行為的指示,請參閱 使用 Oracle E-Business Suite 設定交易隔離等級和交易逾時。
啟動應用程式
您必須啟動 BizTalk 應用程式來輪詢 Oracle 資料庫。 如需啟動 BizTalk 應用程式的指示,請參閱 如何啟動協調流程。
在此階段,請確定:
WCF-Custom 或 WCF-OracleEBS 單向接收埠,它會使用 針對 PollingInput 系結屬性指定的預存程式輪詢 Oracle。
從 Oracle 資料庫接收訊息的 FILE 傳送埠正在執行。
作業的 BizTalk 協調流程正在執行。
執行作業
執行應用程式之後,會以相同的循序執行下列一組動作:
配接器會執行 PolledDataAvailableStatement ,傳回正值,指出配接器執行 PollingInput 系結屬性所指定的語句。
配接器會執行針對 PollingInput 系結屬性指定的GET_ACTIVITYS預存程式,並傳回 ACCOUNTACTIVITY 資料表中的所有資料列。 Oracle 資料庫的回應如下所示:
<?xml version="1.0" encoding="utf-8" ?> <GET_ACTIVITYS xmlns="http://schemas.microsoft.com/OracleEBS/2008/05/PollingPackageApis/APPS/ACCOUNT_PKG"> <OUTRECS> <OUTRECSRecord xmlns="http://schemas.microsoft.com/OracleEBS/2008/05/ReferencedRecordTypes/APPS/ACCOUNT_PKG/GET_ACTIVITYS/APPS/GET_ACTIVITYS"> <TID>1</TID> <ACCOUNT>100001</ACCOUNT> <AMOUNT>500</AMOUNT> <DESCRIPTION /> <TRANSDATE>2008-06-21T15:52:19</TRANSDATE> <PROCESSED>n</PROCESSED> </OUTRECSRecord> <OUTRECSRecord xmlns="http://schemas.microsoft.com/OracleEBS/2008/05/ReferencedRecordTypes/APPS/ACCOUNT_PKG/GET_ACTIVITYS/APPS/GET_ACTIVITYS"> ...... ...... </OUTRECSRecord> ...... ...... </OUTRECS> </GET_ACTIVITYS>
配接器會執行輪詢後語句,其會將所有資料從 ACCOUNTACTIVITY 資料表移至另一個資料表。
輪詢間隔之後,配接器會再次執行 PolledDataAvailableStatement。 因為 ACCOUNTACTIVITY 資料表現在沒有記錄, 所以 PolledDataAvailableStatement 不會傳回正值,因此配接器不會執行 針對 PollingInput 系結屬性指定的語句。 因此,配接器用戶端不會收到任何輪詢訊息。
配接器用戶端將不會再取得任何輪詢訊息,直到某些記錄明確插入 ACCOUNTACTIVITY 資料表為止。 若要插入更多記錄,您可以執行範例所提供的 more_activity_data.sql 腳本。 執行此腳本之後,下次執行 PolledDataAvailableStatement 時,它會傳回正值。 因此,配接器會再次執行輪詢語句和配接器用戶端接收輪詢訊息。
注意
Oracle E-Business 配接器會繼續輪詢,直到您從 BizTalk Server 管理主控台明確停用接收埠為止。
最佳做法
部署並設定 BizTalk 專案之後,您可以將組態設定匯出至稱為系結檔案的 XML 檔案。 產生系結檔案之後,您可以從檔案匯入組態設定,如此您就不需要為相同的協調流程建立傳送埠和接收埠。 如需系結檔案的詳細資訊,請參閱 重複使用 SQL 配接器系結。