共用方式為


從 Oracle E-Business Suite 接收輪詢型資料變更訊息

Microsoft BizTalk Adapter for Oracle E-Business Suite 支援藉由輪詢介面資料表、介面檢視、資料表和檢視來接收輪詢型資料變更訊息。 配接器會透過下列方式將訊息傳遞至您的應用程式:

  • 執行 SQL SELECT 查詢來判斷資料是否可供輪詢。 您可以設定配接器定期或持續執行 SQL SELECT 查詢。

  • 針對 Oracle 資料表或檢視執行 SQL SELECT 查詢,或執行預存程式、函數或封裝程式和函式。

  • 在 Oracle E-Business Suite 上執行選擇性輪詢後 PL/SQL 程式碼區塊。 此程式碼區塊通常用於更新目標中查詢記錄上的欄位,或將查詢的記錄移至另一個資料表或檢視表。

  • 叫用 POLL 作業或預存程式、函式或封裝程式和公開為輪詢作業的函式,以傳回結果集中的查詢結果。

    配接器會在 Oracle 交易內執行所有這些作業。

如何設定 Oracle E-Business 配接器,以使用系結屬性接收資料變更的訊息?

您可以藉由設定下列部分或所有系結屬性,設定 Oracle E-Business 配接器來接收資料變更的訊息。

Binding 屬性 預設 必要/選用
InboundOperationType 請確定此值已設定為 [輪詢]。 輪詢 必要。 如果未明確設定,則會套用預設值。
PolledDataAvailableStatement 指定執行的 SELECT 語句,以判斷是否有任何資料可用於輪詢特定資料表。 指定的語句必須傳回包含資料列和資料行的結果集。 結果集第一個儲存格中的值會指出配接器是否執行 PollingInput 系結屬性所指定的值。 如果結果的第一個儲存格包含正值,配接器會執行輪詢語句。 例如,這個系結屬性的有效語句會是:

Select * from <table_name>

注意: 您不得指定這個系結屬性的預存程式。 此外,此語句不得修改 Oracle E-Business Suite 或基礎 Oracle 資料庫中的資料。
null 必要。
PollingAction 指定輪詢作業的動作。 您可以使用取用配接器服務增益集,從為作業產生的中繼資料,判斷特定作業的輪詢動作。 null 選擇性地使用 SELECT 語句輪詢資料表和檢視表上的作業。
PollingInput 指定下列任一項:

- 應針對 Oracle E-Business Suite 執行的 SQL SELECT 語句。 此語句應該包含 FOR UPDATE 子句。 如需 FOR UPDATE 子句的相關資訊,請參閱本主題稍後 的 Polling 語句中指定 FOR UPDATE 子句

- 在您要輪詢的封裝內,要求預存程式、函式或程式或函式的訊息。
null 必要。 將 PollingInput 設定為非 Null 值會啟用輪詢。
PollingInterval 設定為間隔,以秒為單位,您希望配接器查詢 Oracle E-Business Suite。 這個屬性會指定輪詢間隔和輪詢交易逾時。如果已在 Oracle E-Business Suite 上) 指定查詢和輪詢 (後語句,則此值應該大於執行查詢和輪詢後語句所花費的時間量,以及用戶端處理查詢資料並傳回輪詢回應訊息所需的時間量。 30 必要。 如果未明確設定,則會套用預設值。
PollWhileDataFound 指定如果資料表中有可用的資料,Oracle E-Business 配接器是否忽略輪詢間隔,並持續輪詢 Oracle E-Business Suite。 如果資料表中沒有可用的資料,配接器會還原為在指定的輪詢間隔執行 SQL 語句 False 必要。 如果未明確設定,則會套用預設值。
PostPollStatement 設定為配接器在執行查詢之後執行的選擇性 PL/SQL 程式碼區塊,但在查詢資料傳回用戶端之前。 null 選擇性。 如果未指定任何值,就不會執行 post poll 語句。

注意

如果您使用 WCF 服務模型或 WCF 通道模型,您也必須設定 AcceptCredentialsInUri 系結屬性。

在 Polling 語句中指定 FOR UPDATE 子句

如果您使用 SELECT 語句作為輪詢語句,並執行會影響 SELECT 語句中所指定資料列的輪詢後語句,則必須在輪詢語句中使用 FOR UPDATE 子句。 指定 FOR UPDATE 子句可確保輪詢語句所選取的記錄在交易期間鎖定,而且輪詢後語句可以對其執行任何必要的更新。

警告

您可以在輪詢和輪詢後語句之間的時間範圍中,將更多記錄新增至符合輪詢後語句條件的資料表。 在這種情況下,輪詢後語句會更新滿足條件的所有記錄,而不只是在輪詢語句中選取的記錄。

如果指定了輪詢後語句,而且輪詢語句不包含 FOR UPDATE 子句,您將會遇到下列兩個條件之一:

  • 如果 TransactionIsolationLevel 設定為 ReadCommitted,輪詢後查詢將不會更新選取的資料列。

  • 如果 TransactionIsolationLevel 設定為 Serializable,下列目標系統例外狀況 (Microsoft.ServiceModel.Channels.Common.TargetSystemException) 在執行後輪詢語句時會發生:「ORA-08177 無法序列化此交易的存取」。 在這種情況下,您必須設定 PollingRetryCount 系結屬性,以定義您要配接器重試相同交易的次數。

    如需如何設定交易隔離等級的指示,請參閱 使用 Oracle E-Business Suite 設定交易隔離等級和交易逾時

    如果配接器用戶端已設定為使用交易,且 UseAmbientTransaction 系結屬性的值設定為 True ,則會在交易中執行輪詢和後輪詢語句。

    使用 FOR UPDATE 選項的輪詢查詢範例如下:

SELECT * from EMP WHERE FLAG = 'Y' FOR UPDATE  

在 Polling 語句中指定 NOWAIT 子句

您可能有平行線程正在存取正在輪詢的資料表,導致資料表中有太多爭用的情況。 這可能會導致輪詢查詢遭到封鎖,以鎖定資料表資料列。 如果您使用 SELECT 語句作為輪詢語句,您可以指定 NOWAIT 關鍵字以及 SELECT 語句中的 FOR UPDATE 關鍵字。 如果輪詢查詢嘗試選取的資料列有鎖定,這會導致配接器內的輪詢查詢執行立即傳回。 Oracle 通常會在這類情況下擲回例外狀況。 同樣地,配接器用戶端可以使用 PollingInterval 系結屬性來指定時間間隔,之後配接器用戶端必須重試輪詢資料。

使用 NOWAIT 選項輪詢查詢的範例如下:

SELECT * from EMP WHERE FLAG = 'Y' FOR UPDATE NOWAIT  

在 Polling 語句中指定 SKIP LOCKED 子句

在某些情況下,由於平行線程存取正在輪詢的資料表,輪詢查詢中指定的 WHERE 子句結果集中的某些資料列會鎖定。 例如,您的輪詢查詢會從資料表傳回 6 個數據列;這 6 個數據列中有 4 個已鎖定,因為有一些其他交易。 在此情況下,您可能會想要指定 SKIP LOCKED 關鍵字以及 FOR UPDATE 關鍵字,指示資料庫嘗試鎖定 WHERE 子句所指定的資料列,以及略過任何發現已鎖定的資料列。 WHERE 子句中已解除鎖定的資料列會在交易期間鎖定,而輪詢後語句可以對其執行任何必要的更新,讓這些資料列不會再次輪詢。 這可確保在 WHERE 子句指定的所有資料列解除鎖定之前,您不需要等候接收輪詢訊息。

SKIP LOCKED 關鍵字適用于在多部電腦上輪詢相同資料表的介面卡用戶端。 您可以藉由設定輪詢作業,在配接器用戶端之間平衡負載,方法是針對在該時間點解除鎖定之 WHERE 子句所指定的資料列接收輪詢型資料變更訊息,然後更新資料列,以確保配接器用戶端是否收到輪詢型資料變更訊息, 其他用戶端不會收到相同的訊息。

使用 SKIP LOCKED 選項輪詢查詢的範例如下:

SELECT * from EMP WHERE FLAG = 'Y' FOR UPDATE SKIP LOCKED  

支援已排序的傳遞 (FIFO)

在生產環境中,輪詢可用來監視 Oracle E-Business Suite 中的資料變更。 配接器用戶端會使用 Oracle E-Business 配接器接收這些資料變更的訊息。 根據商務案例,介面卡用戶端會以正確的順序接收資料變更的訊息非常重要。

Oracle E-Business 配接器支援已排序的傳遞或先出 (FIFO) ,以維護從 Oracle E-Business Suite 接收訊息的順序。 以下是一些與 Oracle E-Business 配接器輸入案例中 FIFO 支援相關的考慮。

  • 如果協調流程正在使用訊息,協調流程必須針對來自 Oracle E-Business 配接器接收埠的訊息設定已排序傳遞。

  • 如果在內容型路由) 案例中,傳送埠 (取用訊息,傳送埠必須已針對來自 Oracle E-Business 配接器接收埠的訊息進行排序傳遞。

    WCF-Custom 或 WCF-OracleEBS 配接器具有屬性 「失敗時暫停要求訊息 」,指定是否要暫停失敗輸入處理的要求訊息。 此屬性可以在 [錯誤處理] 區段底下的 [訊息] 索引標籤上設定 WCF-Custom 或 WCF-OracleEBS 接收埠。 下表列出描述如何根據此屬性的設定和訊息訂閱者的狀態, (協調流程或埠) 來處理傳入訊息的案例。

WCF-Custom 埠屬性 處於未列出的狀態訂閱者 已登記但已停止狀態的訂閱者
未設定失敗屬性時暫停要求訊息 - 路由失敗報告會產生為暫停 (不可繼續的訊息)

- 未暫停實際訊息

- 輪詢後查詢不會在交易中止時執行。 因此,輪詢會重複並再次擷取資料列。

- 事件記錄檔中報告的錯誤,以描述發生的情況。
- 未被視為「失敗」。 事件記錄檔中沒有錯誤訊息。

- 實際訊息會放入暫止 (可繼續) 佇列中。

- 訂閱埠或協調流程啟動時,會自動繼續訊息。 如果在訂閱者上設定排序傳遞,則會接受此傳遞。

- 訊息也可以手動繼續。
在失敗屬性 IS 設定時暫停要求訊息 - 路由失敗報告會產生為暫停 (不可繼續的訊息)

- 實際訊息也會暫停

- 輪詢後查詢不會在交易中止時執行。 因此,輪詢會重複並再次擷取資料列。

- 事件記錄檔中報告的錯誤,以描述發生的情況。
- 未被視為「失敗」。 事件記錄檔中沒有錯誤訊息。

- 實際訊息會放入暫止 (可繼續) 佇列中。

- 訂閱埠或協調流程啟動時,會自動繼續訊息。 如果在訂閱者上設定排序傳遞,則會接受此傳遞。

- 訊息也可以手動繼續。

另請參閱

開發活動
使用 BizTalk Server 輪詢 Oracle E-Business Suite