Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Sie können den Oracle E-Business-Adapter so konfigurieren, dass er regelmäßige Datenänderungsmeldungen empfängt, indem Sie eine SELECT-Anweisung verwenden, um die Schnittstellentabellen, Schnittstellenansichten, Tabellen und Ansichten in Oracle E-Business Suite kontinuierlich abzufragen. Sie können eine SELECT-Anweisung als Abfrage-Anweisung angeben, die der Adapter regelmäßig ausführt, um Oracle E-Business Suite abzufragen. Sie können auch einen PL/SQL-Codeblock nach der Abfrage angeben, der vom Adapter ausgeführt wird, nachdem die Abfrage-Anweisung ausgeführt wurde.
Zum Aktivieren der Abfrage müssen Sie bestimmte Bindungseigenschaften angeben, wie in diesem Thema beschrieben. Weitere Informationen dazu, wie der Adapter Abrufe unterstützt, finden Sie unter Unterstützung für eingehende Anrufe mithilfe von Abrufen.
Konfigurieren eines Abfragevorgangs mit Oracle E-Business Suite-Adapterbindungseigenschaften
In der folgenden Tabelle sind die Bindungseigenschaften des Oracle E-Business-Adapters zusammengefasst, die Sie zum Konfigurieren des Adapters für den Empfang von Datenänderungsmeldungen verwenden. Sie müssen diese Bindungseigenschaften angeben, während Sie die Abfrageanwendung ausführen.
Bindungseigenschaft | BESCHREIBUNG |
---|---|
InboundOperationType | Gibt an, ob Sie eingehende Abfrage- oder Benachrichtigungsvorgänge ausführen möchten. Die Standardeinstellung ist Polling. |
PolledDataAvailableStatement | Gibt die SQL-Anweisung an, die der Adapter ausführt, um zu bestimmen, ob Daten für die Abfrage verfügbar sind. Nur wenn ein Datensatz verfügbar ist, wird die SELECT-Anweisung ausgeführt, die Sie für die Eigenschaft PollingInput-Bindung angeben. |
PollingInterval | Gibt das Intervall in Sekunden an, in dem der Oracle E-Business-Adapter die für die PolledDataAvailableStatement-Bindungseigenschaft angegebene Anweisung ausführt. Der Standardwert ist 30 Sekunden. Das Abfrageintervall bestimmt das Zeitintervall zwischen aufeinander folgenden Umfragen. Wenn die Anweisung innerhalb des angegebenen Intervalls ausgeführt wird, wird der Adapter für die verbleibende Zeit im Intervall in den Ruhezustand versetzt. |
PollingInput | Gibt die Abfrage-Anweisung an. Um mit einer SELECT-Anweisung abzufragen, müssen Sie eine SELECT-Anweisung für diese Bindungseigenschaft angeben. Der Standardwert ist NULL. Sie müssen einen Wert für die PollingInput-Bindungseigenschaft angeben, um die Abfrage zu aktivieren. Die Abfrageanweisung wird nur ausgeführt, wenn Daten für die Abfrage verfügbar sind, die durch die PolledDataAvailableStatement-Bindungseigenschaft bestimmt werden. |
PollingAction | Gibt die Aktion für den Abrufvorgang an. Sie können die Abrufaktion über die Dienstschnittstelle ermitteln, die für den Vorgang generiert wurde, indem Sie das Visual Studio-Plug-In Adapter Service Reference hinzufügen verwenden. |
PostPollStatement | Gibt einen Anweisungsblock an, der ausgeführt wird, nachdem die durch die Eigenschaft PollingInput-Bindung angegebene Anweisung ausgeführt wurde. |
PollWhileDataFound | Gibt an, ob der Oracle E-Business-Adapter das Abfrageintervall ignoriert und die Abfrage-Anweisung kontinuierlich ausführt, wenn Daten in der abgefragten Tabelle verfügbar sind. Wenn in der Tabelle keine Daten verfügbar sind, führt der Adapter die Abfrage-Anweisung im angegebenen Abrufintervall aus. Der Standardwert ist "false". |
Eine ausführlichere Beschreibung dieser Eigenschaften finden Sie unter Informationen zu den Bindungseigenschaften des BizTalk-Adapters für Oracle E-Business Suite. Eine vollständige Beschreibung der Verwendung des Oracle E-Business-Adapters zum Abfragen der Oracle-Datenbank finden Sie im weiteren Verlauf dieses Themas.
In diesem Thema wird die Abfrage veranschaulicht
Um zu veranschaulichen, wie der Oracle E-Business-Adapter den Empfang von Datenänderungsmeldungen mithilfe von SELECT-Anweisungen unterstützt, rufen Sie die MS_SAMPLE_EMPLOYEE Schnittstellentabelle in der Anwendung Application Object Library ab. Diese Tabelle wird erstellt, wenn Sie das mit den Beispielen bereitgestellte skript create_apps_artifacts.sql ausführen, um diese Objekte in Oracle E-Business Suite zu erstellen.
Um einen Abrufvorgang zu veranschaulichen, gehen wir wie folgt vor:
Geben Sie eine SELECT-Anweisung für die PolledDataAvailableStatement-Bindungseigenschaft an, um zu bestimmen, wo die abgefragte Schnittstellentabelle (MS_SAMPLE_EMPLOYEE) Daten enthält. In diesem Beispiel können Sie diese Bindungseigenschaft wie folgt festlegen:
SELECT COUNT (*) FROM MS_SAMPLE_EMPLOYEE
Dadurch wird sichergestellt, dass der Adapter die Abfrage-Anweisung nur ausführt, wenn die MS_SAMPLE_EMPLOYEE Schnittstellentabelle einige Datensätze enthält.
Geben Sie eine SELECT-Anweisung für die Eigenschaft PollingInput-Bindung an. Diese Anweisung ruft alle Zeilen in der MS_SAMPLE_EMPLOYEE-Schnittstellentabelle ab. In diesem Beispiel können Sie diese Bindungseigenschaft wie folgt festlegen:
SELECT * FROM MS_SAMPLE_EMPLOYEE FOR UPDATE
Hinweis
Informationen zur FOR UPDATE-Klausel, die in der SELECT-Anweisung verwendet wird, finden Sie unter Empfangen von abrufbasierten datenveränderten Nachrichten von Oracle E-Business Suite.
Geben Sie eine DELETE-Anweisung als Teil der PostPollStatement-Bindungseigenschaft an. Mit dieser Anweisung werden alle Daten aus MS_SAMPLE_EMPLOYEE Schnittstellentabelle gelöscht. In diesem Beispiel können Sie diese Bindungseigenschaft wie folgt festlegen:
DELETE FROM MS_SAMPLE_EMPLOYEE
Nachdem dies geschehen ist, ruft die für PollingInput angegebene Anweisung das nächste Mal keine Daten ab.
Bis der MS_SAMPLE_EMPLOYEE-Schnittstellentabelle weitere Daten hinzugefügt werden, erhalten Sie keine Abrufmeldungen, sodass Sie die MS_SAMPLE_EMPLOYEE Schnittstellentabelle mit neuen Datensätzen neu auffüllen müssen. Hierzu führen Sie das skript insert_apps_data.sql aus, das mit den Beispielen bereitgestellt wird. Nachdem Sie dieses Skript ausgeführt haben, ruft der nächste Abrufvorgang die neuen Datensätze ab, die in die Tabelle eingefügt wurden.
Verwenden der Abfrageanforderungsnachricht
Der Adapter ruft den Abfragevorgang für Ihren Code auf, um die Oracle E-Business Suite abzufragen. Das heißt, der Adapter sendet eine Abfrageanforderungsnachricht, die Sie über ein IInputChannel-Kanal-Shape erhalten. Die Abfrageanforderungsnachricht enthält das Resultset der Abfrage, die durch die PollingInput-Bindungseigenschaft angegeben wird. Sie können die Abrufnachricht auf zwei Arten nutzen:
Um die Nachricht mithilfe des Node-Wert-Streamings zu nutzen, müssen Sie die WriteBodyContents-Methode für die Antwortnachricht aufrufen und ihr einen XmlDictionaryWriter übergeben, der das Knotenwertstreaming implementiert.
Um die Nachricht mithilfe des Knotenstreamings zu nutzen, können Sie GetReaderAtBodyContents in der Antwortnachricht aufrufen, um einen XmlReader abzurufen.
Informationen zu den in diesem Thema verwendeten Beispielen
In den Beispielen in diesem Thema wird die MS_SAMPLE_EMPLOYEE-Schnittstellentabelle abgerufen. Mit den Beispielen wird ein Skript zum Generieren der Tabelle bereitgestellt. Weitere Informationen zu den Beispielen finden Sie unter Beispiele für den Oracle EBS-Adapter. Ein Beispiel , SelectPolling_ChannelModel, das auf diesem Thema basiert, wird auch mit den Oracle E-Business-Adapterbeispielen bereitgestellt.
Empfangen eingehender Nachrichten für den Abrufvorgang mithilfe des WCF-Kanalmodells
Dieser Abschnitt enthält Anweisungen zum Schreiben einer .NET-Anwendung (Kanalmodell) zum Empfangen eingehender Abrufnachrichten mithilfe des Oracle E-Business-Adapters.
So empfangen Sie Abrufnachrichten vom Adapter
Erstellen Sie ein Microsoft Visual C#-® Projekt in Visual Studio. Erstellen Sie für dieses Thema eine Konsolenanwendung.
Fügen Sie im Projektmappen-Explorer Verweis auf
Microsoft.Adapters.OracleEBS
,Microsoft.ServiceModel.Channels
,System.ServiceModel
undSystem.Runtime.Serialization
hinzu.Öffnen Sie die Datei Program.cs, und fügen Sie die folgenden Namespaces hinzu:
Microsoft.Adapters.OracleEBS
System.ServiceModel
System.ServiceModel.Description
System.ServiceModel.Channels
System.Xml
Geben Sie einen Verbindungs-URI an. Weitere Informationen zum Adapterverbindungs-URI finden Sie unter Erstellen des Oracle E-Business Suite-Verbindungs-URI.
Uri ConnectionUri = new Uri("oracleebs://ebs_instance_name");
Erstellen Sie eine instance von OracleEBSBinding, und legen Sie die Bindungseigenschaften fest, die zum Konfigurieren der Abfrage erforderlich sind. Mindestens müssen Sie die Bindungseigenschaften InboundOperationType, PolledDataAvailableStatement, PollingInput und PollingAction festlegen. Weitere Informationen zu Bindungseigenschaften, die zum Konfigurieren der Abfrage verwendet werden, finden Sie unter Unterstützung für eingehende Aufrufe mithilfe von Abrufen.
OracleEBSBinding binding = new OracleEBSBinding(); binding.InboundOperationType = InboundOperation.Polling; binding.PolledDataAvailableStatement = "SELECT COUNT (*) FROM MS_SAMPLE_EMPLOYEE"; binding.PollingInput = "SELECT * FROM MS_SAMPLE_EMPLOYEE FOR UPDATE"; binding.PollingAction = "InterfaceTables/Poll/FND/APPS/MS_SAMPLE_EMPLOYEE"; binding.PostPollStatement = "DELETE FROM MS_SAMPLE_EMPLOYEE";
Da Sie eine Schnittstellentabelle abfragen, müssen Sie auch den Anwendungskontext festlegen. Weitere Informationen zum Anwendungskontext und zu Bindungseigenschaften, die zum Festlegen des Anwendungskontexts erforderlich sind, finden Sie unter Festlegen des Anwendungskontexts.
binding.OracleUserName = "<Enter user name here>"; binding.OraclePassword = "<Enter password here>"; binding.OracleEBSResponsibilityName = "<Enter responsibility here>";
Erstellen Sie eine Bindungsparameterauflistung, und legen Sie die Anmeldeinformationen fest.
ClientCredentials credentials = new ClientCredentials(); credentials.UserName.UserName = "<Enter user name here>"; credentials.UserName.Password = "<Enter password here>"; BindingParameterCollection bindingParams = new BindingParameterCollection(); bindingParams.Add(credentials);
Erstellen Sie einen Kanallistener, und öffnen Sie ihn. Sie erstellen den Listener, indem Sie die BuildChannelListener<IInputChannel-Methode> für OracleEBSBinding aufrufen.
IChannelListener<IInputChannel> listener = binding.BuildChannelListener<IInputChannel>(connectionUri, bindingParams); listener.Open();
Rufen Sie einen IInputChannel-Kanal ab, indem Sie die AcceptChannel-Methode im Listener aufrufen und öffnen.
IInputChannel channel = listener.AcceptChannel(); channel.Open();
Rufen Sie Receive im Kanal auf, um die nächste eingehende Nachricht vom Adapter abzurufen.
Message message = channel.Receive();
Verwenden Sie das vom eingehenden Vorgang zurückgegebene Resultset. Sie können die Nachricht mit einem XmlReader oder einem XmlDictionaryWriter nutzen.
XmlReader reader = message.GetReaderAtBodyContents();
Schließen Sie den Kanal, wenn Sie die Verarbeitung der Anforderung abgeschlossen haben.
channel.Close()
Wichtig
Sie müssen den Kanal schließen, nachdem Sie die Verarbeitung des eingehenden Vorgangs abgeschlossen haben. Ein Fehler beim Schließen des Kanals kann sich auf das Verhalten Ihres Codes auswirken.
Schließen Sie den Listener, wenn Sie mit dem Empfang von Daten geänderten Nachrichten fertig sind.
listener.Close()
Wichtig
Das Schließen des Listeners führt nicht zum Schließen von Kanälen, die mit dem Listener erstellt wurden. Sie müssen jeden mit dem Listener erstellten Kanal explizit schließen.
Beispiel
Das folgende Beispiel zeigt eine Abfrageanwendung, die die MS_SAMPLE_EMPLOYEE-Schnittstellentabelle abruft. Die PollingInput-Eigenschaft enthält die select-Anweisung, die alle Daten aus der MS_SAMPLE_EMPLOYEE Tabelle liest, und die post poll-Anweisung löscht alle Daten aus derselben Tabelle. Die Abrufnachricht wird in C:\PollingOutput.xml
geschrieben.
Nachfolgende Abrufmeldungen enthalten keine Datensätze, bis der MS_SAMPLE_EMPLOYEE Schnittstellentabelle weitere Daten hinzugefügt werden. Hierzu führen Sie das skript insert_apps_data.sql aus, das mit den Beispielen bereitgestellt wird. Nachdem Sie dieses Skript ausgeführt haben, ruft der nächste Abrufvorgang die neuen Datensätze ab, die in die Tabelle eingefügt wurden. Der Adapter ruft weiterhin ab, bis Sie den Diensthost durch Drücken der EINGABETASTE <>schließen.
using System;
using Microsoft.Adapters.OracleEBS;
using System.ServiceModel;
using System.ServiceModel.Description;
using System.ServiceModel.Channels;
using System.Xml;
namespace SelectPolling_ChannelModel
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Sample started. This sample will poll 5 times and will perform the following tasks:");
Console.WriteLine("Press any key to start polling...");
Console.ReadLine();
IChannelListener<IInputChannel> listener = null;
IInputChannel channel = null;
try
{
TimeSpan messageTimeout = new TimeSpan(0, 0, 30);
OracleEBSBinding binding = new OracleEBSBinding();
binding.InboundOperationType = InboundOperation.Polling;
binding.PolledDataAvailableStatement = "SELECT COUNT (*) FROM MS_SAMPLE_EMPLOYEE";
binding.PollingInput = "SELECT * FROM MS_SAMPLE_EMPLOYEE FOR UPDATE";
binding.PollingAction = "InterfaceTables/Poll/FND/APPS/MS_SAMPLE_EMPLOYEE";
binding.PostPollStatement = "DELETE FROM MS_SAMPLE_EMPLOYEE";
binding.OracleUserName = "<Enter user name here>";
binding.OraclePassword = "<Enter password here>";
binding.OracleEBSResponsibilityName = "<Enter responsibility here>";
Uri ConnectionUri = new Uri("oracleebs://ebs_instance_name?");
ClientCredentials credentials = new ClientCredentials();
credentials.UserName.UserName = "<Enter user name here>";
credentials.UserName.Password = "<Enter password here>";
BindingParameterCollection bindingParams = new BindingParameterCollection();
bindingParams.Add(credentials);
listener = binding.BuildChannelListener<IInputChannel>(ConnectionUri, bindingParams);
listener.Open();
channel = listener.AcceptChannel();
channel.Open();
Console.WriteLine("Channel and Listener opened...");
Console.WriteLine("\nWaiting for polled data...");
Console.WriteLine("Receive request timeout is {0}", messageTimeout);
// Poll five times with the specified message timeout
// If a timeout occurs polling will be aborted
for (int i = 0; i < 5; i++)
{
Console.WriteLine("Polling: " + i);
Message message = null;
XmlReader reader = null;
try
{
//Message is received so process the results
message = channel.Receive(messageTimeout);
}
catch (System.TimeoutException toEx)
{
Console.WriteLine("\nNo data for request number {0}: {1}", i + 1, toEx.Message);
continue;
}
// Get the query results using an XML reader
try
{
reader = message.GetReaderAtBodyContents();
}
catch (Exception ex)
{
Console.WriteLine("Exception :" + ex);
throw;
}
XmlDocument doc = new XmlDocument();
doc.Load(reader);
using (XmlWriter writer = XmlWriter.Create("C:\\PollingOutput.xml"))
{
doc.WriteTo(writer);
Console.WriteLine("The polling response is saved at 'C:\\PollingOutput.xml'");
}
// return the cursor
Console.WriteLine();
// close the reader
reader.Close();
message.Close();
}
Console.WriteLine("\nPolling done -- hit <RETURN> to finish");
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine("Exception is: " + ex.Message);
Console.ReadLine();
if (ex.InnerException != null)
{
Console.WriteLine("Inner Exception is: " + ex.InnerException.Message);
Console.ReadLine();
}
}
finally
{
// IMPORTANT: close the channel and listener to stop polling
if (channel != null)
{
if (channel.State == CommunicationState.Opened)
channel.Close();
else
channel.Abort();
}
if (listener != null)
{
if (listener.State == CommunicationState.Opened)
listener.Close();
else
listener.Abort();
}
}
}
}
}
Weitere Informationen
Entwickeln von Oracle E-Business Suite-Anwendungen mithilfe des WCF-Kanalmodells