Freigeben über


Empfangen von abrufbasierten Daten geänderten Nachrichten von der Oracle E-Business Suite

Der Microsoft BizTalk-Adapter für Oracle E-Business Suite unterstützt den Empfang von abrufbasierten Datenänderungsmeldungen durch Abfragen der Schnittstellentabellen, Schnittstellenansichten, Tabellen und Sichten. Der Adapter übermittelt die Nachrichten an Ihre Anwendung wie folgt:

  • Ausführen einer SQL SELECT-Abfrage, um zu bestimmen, ob Daten für Abrufe verfügbar sind. Sie können den Adapter so konfigurieren, dass die SQL SELECT-Abfrage regelmäßig oder kontinuierlich ausgeführt wird.

  • Ausführen einer SQL SELECT-Abfrage für eine Oracle-Tabelle oder -Sicht oder Ausführung gespeicherter Prozeduren, Funktionen oder verpackter Prozeduren und Funktionen.

  • Ausführen eines optionalen PL/SQL-Codeblocks nach der Abfrage in Oracle E-Business Suite. Dieser Codeblock wird häufig verwendet, um ein Feld für die abgefragten Datensätze im Ziel zu aktualisieren oder die abgefragten Datensätze in eine andere Tabelle oder Sicht zu verschieben.

  • Das Zurückgeben der Abfrage führt zu einem Resultset, indem der POLL-Vorgang oder die gespeicherten Prozeduren, Funktionen oder gepackten Prozeduren und Funktionen aufgerufen werden, die als Abrufvorgänge verfügbar gemacht werden.

    Der Adapter führt alle diese Vorgänge innerhalb einer Oracle-Transaktion aus.

Wie konfiguriere ich den Oracle E-Business-Adapter für den Empfang von datenseitig geänderten Nachrichten mithilfe von Bindungseigenschaften?

Sie konfigurieren den Oracle E-Business-Adapter für den Empfang von Daten geänderten Nachrichten, indem Sie einige oder alle der folgenden Bindungseigenschaften festlegen.

Binding-Eigenschaft Wert Standard Erforderlich/Optional
InboundOperationType Stellen Sie sicher, dass der Wert auf Polling festgelegt ist. Abruf Erforderlich. Wenn sie nicht explizit festgelegt ist, wird der Standardwert angewendet.
PolledDataAvailableStatement Geben Sie die ausgeführte SELECT-Anweisung an, um zu bestimmen, ob Daten für den Abruf einer bestimmten Tabelle verfügbar sind. Die angegebene Anweisung muss ein Resultset zurückgeben, das aus Zeilen und Spalten besteht. Der Wert in der ersten Zelle des Resultsets gibt an, ob der Adapter den für die PollingInput-Bindungseigenschaft angegebenen Wert ausführt. Wenn die erste Zelle des Ergebnisses einen positiven Wert enthält, führt der Adapter die Abruf-Anweisung aus. Eine gültige Anweisung für diese Bindungseigenschaft ist beispielsweise:

Select * from <table_name>

Hinweis: Sie dürfen keine gespeicherten Prozeduren für diese Bindungseigenschaft angeben. Außerdem darf diese Anweisung die Daten in der Oracle E-Business Suite oder der zugrunde liegenden Oracle-Datenbank nicht ändern.
NULL Erforderlich.
PollingAction Gibt die Aktion für den Abrufvorgang an. Sie können die Abrufaktion für einen bestimmten Vorgang anhand der Metadaten ermitteln, die Sie für den Vorgang mithilfe des Add-Ins Adapterdienst nutzen generieren. NULL Optional für Abrufvorgänge für Tabellen und Sichten mithilfe der SELECT-Anweisung.
PollingInput Geben Sie eine der folgenden Optionen an:

– SQL SELECT-Anweisung, die für Oracle E-Business Suite ausgeführt werden soll. Diese Anweisung sollte eine FOR UPDATE-Klausel enthalten. Informationen zur FOR UPDATE-Klausel finden Sie weiter unten in diesem Thema unter Angeben einer FOR UPDATE-Klausel in der Polling Statement .

– Anforderung einer Nachricht für eine gespeicherte Prozedur, Funktion oder Prozedur oder Funktion innerhalb eines Pakets, die abgefragt werden soll.
NULL Erforderlich. Wenn PollingInput auf einen Wert ungleich NULL festgelegt wird, wird die Abfrage aktiviert.
PollingInterval Legen Sie auf das Intervall in Sekunden fest, in dem der Adapter Oracle E-Business Suite abfragen soll. Diese Eigenschaft gibt das Abrufintervall und das Abfragetransaktionstimeout an. Der Wert sollte größer sein als die Zeit, die zum Ausführen der Abfrage und der Anweisung nach dem Abruf (sofern angegeben) in Oracle E-Business Suite benötigt wird, sowie die Zeit, die der Client benötigt, um die Abfragedaten zu verarbeiten und die Abrufantwortnachricht zurückzugeben. 30 Erforderlich. Wenn sie nicht explizit festgelegt ist, wird der Standardwert angewendet.
PollWhileDataFound Gibt an, ob der Oracle E-Business-Adapter das Abrufintervall ignoriert und die Oracle E-Business Suite kontinuierlich abruft, wenn Daten in der abgefragten Tabelle verfügbar sind. Wenn in der Tabelle keine Daten verfügbar sind, wird der Adapter zurückgesetzt, um die SQL-Anweisung im angegebenen Abrufintervall auszuführen. False Erforderlich. Wenn sie nicht explizit festgelegt ist, wird der Standardwert angewendet.
PostPollStatement Legen Sie auf einen optionalen PL/SQL-Codeblock fest, der vom Adapter ausgeführt wird, nachdem die Abfrage ausgeführt wurde, aber bevor die Abfragedaten an den Client zurückgegeben werden. NULL Optional. Wenn kein Wert angegeben wird, wird keine Post poll-Anweisung ausgeführt.

Hinweis

Wenn Sie das WCF-Dienstmodell oder das WCF-Kanalmodell verwenden, müssen Sie auch die AcceptCredentialsInUri-Bindungseigenschaft festlegen.

Angeben einer FOR UPDATE-Klausel in der Polling-Anweisung

Wenn Sie eine SELECT-Anweisung als Abruf-Anweisung verwenden und eine Nachabfrage-Anweisung ausführen, die sich auf die in der SELECT-Anweisung angegebenen Zeilen auswirkt, müssen Sie die FOR UPDATE-Klausel in der Abruf-Anweisung verwenden. Durch das Angeben einer FOR UPDATE-Klausel wird sichergestellt, dass die von der Abruf-Anweisung ausgewählten Datensätze während der Transaktion gesperrt werden und dass die Anweisung nach der Abfrage alle erforderlichen Aktualisierungen durchführen kann.

Achtung

Sie können Szenarien haben, in denen im Zeitfenster zwischen den Abruf- und post-Poll-Anweisungen der Tabelle weitere Datensätze hinzugefügt werden, die die Bedingung der Post-Poll-Anweisung erfüllen. In solchen Situationen aktualisiert die Anweisung nach der Abfrage alle Datensätze, die die Bedingung erfüllen, und nicht nur die Datensätze, die als Teil der Abrufanweisungen ausgewählt wurden.

Wenn eine Anweisung nach der Umfrage angegeben wird und die Abruf-Anweisung keine FOR UPDATE-Klausel enthält, tritt eine der folgenden beiden Bedingungen auf:

  • Wenn TransactionIsolationLevel auf ReadCommitted festgelegt ist, aktualisiert die Abfrage nach der Abfrage die ausgewählten Zeilen nicht.

  • Wenn TransactionIsolationLevel auf Serializable festgelegt ist, tritt die folgende Zielsystemausnahme (Microsoft.ServiceModel.Channels.Common.TargetSystemException) auf, wenn die Anweisung nach dem Abruf ausgeführt wird: "ORA-08177 kann den Zugriff für diese Transaktion nicht serialisieren". In diesem Fall müssen Sie die Bindungseigenschaft PollingRetryCount festlegen, um zu definieren, wie oft der Adapter dieselbe Transaktion wiederholen soll.

    Anweisungen zum Festlegen der Transaktionsisolationsstufe finden Sie unter Konfigurieren der Transaktionsisolationsstufe und des Transaktionstimeouts mit Oracle E-Business Suite.

    Die Anweisungen polling und post-poll werden in einer Transaktion ausgeführt, wenn die Adapterclients die Verwendung von Transaktionen konfiguriert haben und der Wert der UseAmbientTransaction-Bindungseigenschaft im Adapter auf True festgelegt ist.

    Ein Beispiel für eine Abfrage mit der OPTION FOR UPDATE ist:

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

Angeben einer NOWAIT-Klausel in der Polling-Anweisung

Möglicherweise haben Sie Szenarien, in denen gleichzeitige Threads auf die abgefragte Tabelle zugreifen, was zu zu vielen Konflikten in der Tabelle führt. Dies kann dazu führen, dass die Abfrage blockiert wird, um eine Sperre für Tabellenzeilen zu erhalten. Wenn Sie eine SELECT-Anweisung als Abruf-Anweisung verwenden, können Sie eine NOWAIT-Schlüsselwort (keyword) zusammen mit dem FOR UPDATE-Schlüsselwort (keyword) in der SELECT-Anweisung angeben. Dies führt dazu, dass die Abfrageausführung innerhalb des Adapters sofort zurückgegeben wird, wenn sperren für Zeilen vorhanden sind, die die Abrufabfrage auszuwählen versucht. Unter solchen Bedingungen wird in der Regel eine Ausnahme von Oracle ausgelöst. Auch hier können Adapterclients die Bindungseigenschaft PollingInterval verwenden, um das Zeitintervall anzugeben, nach dem die Adapterclients erneut versuchen müssen, die Daten abzurufen.

Ein Beispiel für eine Abfrage mit der NOWAIT-Option ist:

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

Angeben einer SKIP LOCKED-Klausel in der Polling-Anweisung

Möglicherweise gibt es Szenarien, in denen aufgrund gleichzeitiger Threads, die auf die abgefragte Tabelle zugreifen, einige Zeilen im Resultset der WHERE-Klausel, die in der Abrufabfrage angegeben ist, gesperrt sind. Ihre Abfrage gibt beispielsweise 6 Zeilen aus einer Tabelle zurück. 4 dieser 6 Zeilen sind aufgrund einer anderen Transaktion bereits gesperrt. In diesem Fall können Sie eine SKIP LOCKED-Schlüsselwort (keyword) zusammen mit der FOR UPDATE-Schlüsselwort (keyword) angeben, die die Datenbank anweist, zu versuchen, die in der WHERE-Klausel angegebenen Zeilen zu sperren und alle Zeilen zu überspringen, die bereits gesperrt sind. Die entsperrten Zeilen in der WHERE-Klausel werden während der Transaktion gesperrt, und die Anweisung nach der Abfrage kann alle erforderlichen Updates für sie ausführen, sodass diese Zeilen nicht erneut abgefragt werden. Dadurch wird sichergestellt, dass Sie nicht auf den Empfang der Abrufnachrichten warten müssen, bis alle zeilen, die in der WHERE-Klausel angegeben sind, entsperrt sind.

Die SKIP LOCKED-Schlüsselwort (keyword) ist in einem Szenario nützlich, in dem Adapterclients auf mehreren Computern vorhanden sind, die dieselbe Tabelle in einer Datenbank abrufen. Sie können einen Lastenausgleich zwischen den Adapterclients durchführen, indem Sie den Abrufvorgang so konfigurieren, dass Sie abrufbasierte Datenänderungsmeldungen für die zeilen erhalten, die in der WHERE-Klausel angegeben sind und zu diesem Zeitpunkt entsperrt sind, und dann die Zeile aktualisieren, um sicherzustellen, dass sichergestellt wird, dass, wenn eine abrufbasierte Datenänderungsmeldung von einem Adapterclient empfangen wird, die anderen Clients erhalten nicht dieselbe Nachricht.

Ein Beispiel für eine Abfrage mit der Option SKIP LOCKED ist:

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

Unterstützung für die bestellte Lieferung (FIFO)

In einer Produktionsumgebung kann die Abfrage verwendet werden, um die Datenänderungen in Oracle E-Business Suite zu überwachen. Diese Daten geänderten Nachrichten werden vom Adapterclient mithilfe des Oracle E-Business-Adapters empfangen. Basierend auf Geschäftsszenarien kann es wichtig sein, dass die datenveränderten Nachrichten vom Adapterclient in der richtigen Reihenfolge empfangen werden.

Der Oracle E-Business-Adapter unterstützt die geordnete Übermittlung oder FIFO (First-in-First-Out), um die Reihenfolge beizubehalten, in der Nachrichten von Oracle E-Business Suite empfangen werden. Im Folgenden finden Sie einige Überlegungen zur Unterstützung von FIFO in eingehenden Szenarien für den Oracle E-Business-Adapter.

  • Wenn die Nachricht von einer Orchestrierung genutzt wird, muss für die Orchestrierung die geordnete Übermittlung für die Nachrichten festgelegt sein, die vom Empfangsport des Oracle E-Business-Adapters stammen.

  • Wenn die Nachricht von einem Sendeport (in einem inhaltsbasierten Routing)-Szenario genutzt wird, muss für den Sendeport eine geordnete Übermittlung für die Nachrichten festgelegt sein, die vom Empfangenport des Oracle E-Business-Adapters stammen.

    Der WCF-Custom- oder WCF-OracleEBS-Adapter verfügt über die Eigenschaft Anforderungsnachricht bei Fehler anhalten , die angibt, ob die Anforderungsnachricht angehalten werden soll, die bei der eingehenden Verarbeitung fehlschlägt. Diese Eigenschaft kann auf der Registerkarte Nachrichten des WCF-Custom oder WCF-OracleEBS Empfangenports im Abschnitt Fehlerbehandlung festgelegt werden. In der folgenden Tabelle sind die Szenarien aufgeführt, in denen beschrieben wird, wie die eingehenden Nachrichten basierend auf der Festlegung dieser Eigenschaft und dem Status des Nachrichtenabonnents (Orchestrierung oder Port) verarbeitet werden.

WCF-Custom Porteigenschaft Abonnent im Status "Nicht eingetragen" Abonnenten im Status "Enlisted", aber "Beendet"
Anforderungsnachricht bei Fehlereigenschaft nicht festgelegt - Routingfehlerbericht wird als angehaltene (nicht fortsetzbare Nachricht) generiert.

- Die tatsächliche Nachricht wird nicht angehalten

– Die Abfrage nach der Abfrage wird nicht ausgeführt, da die Transaktion abgebrochen wird. Daher wird die Abfrage wiederholt und ruft die Zeilen erneut ab.

– Fehler, die im Ereignisprotokoll gemeldet werden, um zu beschreiben, was passiert ist.
- Gilt nicht als "Fehler". Das Ereignisprotokoll enthält keine Fehlermeldungen.

– Die tatsächliche Nachricht wird in die angehaltene (fortsetzbare) Warteschlange eingefügt.

- Wenn der abonnierende Port oder die Orchestrierung gestartet wird, werden die Nachrichten automatisch fortgesetzt. Wenn die bestellte Lieferung für den Abonnenten festgelegt ist, wird sie berücksichtigt.

- Die Nachrichten können auch manuell fortgesetzt werden.
Anforderungsmeldung bei Fehlereigenschaft IS festgelegt - Routingfehlerbericht wird als angehaltene (nicht fortsetzbare Nachricht) generiert.

- Die tatsächliche Nachricht wird ebenfalls angehalten.

– Die Abfrage nach der Abfrage wird nicht ausgeführt, da die Transaktion abgebrochen wird. Daher wird die Abfrage wiederholt und ruft die Zeilen erneut ab.

– Fehler, die im Ereignisprotokoll gemeldet werden, um zu beschreiben, was passiert ist.
- Gilt nicht als "Fehler". Das Ereignisprotokoll enthält keine Fehlermeldungen.

– Die tatsächliche Nachricht wird in die angehaltene (fortsetzbare) Warteschlange eingefügt.

- Wenn der abonnierende Port oder die Orchestrierung gestartet wird, werden die Nachrichten automatisch fortgesetzt. Wenn die bestellte Lieferung für den Abonnenten festgelegt ist, wird sie berücksichtigt.

- Die Nachrichten können auch manuell fortgesetzt werden.

Weitere Informationen

Entwicklungsaktivitäten
Abfragen von Oracle E-Business Suite mit BizTalk Server