Aufrufen überladener Funktionen und Prozeduren in Oracle Database mithilfe von BizTalk Server
Gespeicherte Prozeduren und Funktionen können in einer Oracle-Datenbank überladen werden. Der Oracle Database-Adapter unterstützt überladene Funktionen und Prozeduren, indem der Zielnamespace des Vorgangs geändert wird. Die Nachrichtenstruktur für zwei überladene Prozeduren sieht beispielsweise wie folgt aus:
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]>
Die SOAP-Nachrichtenstruktur und die SOAP-Aktion, die zum Aufrufen einer überladenen Funktion oder Prozedur erforderlich sind, ähneln dem Aufrufen einer Funktion und Prozedur, wie unter Meldungsschemas für Funktionen und Prozeduren beschrieben.
Das Aufrufen einer überladenen Prozedur ähnelt dem Aufrufen einer anderen Funktion, wie unter Aufrufen von Funktionen und Prozeduren in Oracle Database Using BizTalk Server beschrieben. Um jedoch überladene Funktionen zu unterscheiden, fügt der Oracle Database-Adapter eine eindeutige Zeichenfolge an die Knoten-ID und den Namespace an, die für das überladene Artefakt angezeigt werden. Diese Zeichenfolge ist "overload1" für die erste Überladung, "overload2" für die nächste Überladung usw.
Aufrufen überladener Funktionen und Prozeduren
Das Ausführen eines Vorgangs für eine Oracle-Datenbank mithilfe des Oracle Database-Adapters mit BizTalk Server umfasst prozedurale Aufgaben, die unter Bausteine zum Entwickeln von BizTalk-Anwendungen mit Oracle-Datenbank beschrieben werden. Um eine Funktion in einer Oracle-Datenbank aufzurufen, lauten die folgenden Aufgaben:
Erstellen Sie ein BizTalk-Projekt, und generieren Sie ein Schema für die überladene Funktion, die Sie in einer Oracle-Datenbank aufrufen möchten.
Erstellen Sie Nachrichten im BizTalk-Projekt zum Senden und Empfangen von Nachrichten aus der Oracle-Datenbank. Sie müssen Meldungen für jede Überladung erstellen.
Erstellen Sie eine Orchestrierung, um die überladene Funktion in der Oracle-Datenbank aufzurufen.
Erstellen sie das BizTalk-Projekt, und stellen Sie es bereit.
Konfigurieren Sie die BizTalk-Anwendung, indem Sie physische Sende- und Empfangsports erstellen.
Starten Sie die BizTalk-Anwendung.
Dieses Thema enthält Anweisungen zum Ausführen dieser Aufgaben.
Beispiel basierend auf diesem Thema
Ein Beispiel, InvokeOverloadedProc, das auf diesem Thema basiert, wird auch mit dem BizTalk-Adapterpaket bereitgestellt. Weitere Informationen finden Sie unter Adapterbeispiele.
Generieren eines Schemas
Um zu veranschaulichen, wie eine überladene Funktion oder Prozedur aufgerufen wird, rufen wir in diesem Thema die GET_ACCOUNT-Prozedur unter dem Schema SCOTT\Package\ACCOUNT_PKG auf. Dieses Paket wird unter dem SCOTT-Schema erstellt, indem die sql-Skripts ausgeführt werden, die mit den Beispielen bereitgestellt werden. Dies ist eine überladene Prozedur, wobei Folgendes gilt:
Eine Überladung verwendet die Konto-ID als IN-Parameter und gibt einen ACCOUNT%ROWTYPE als OUT-Parameter zurück.
Die zweite Überladung verwendet den Kontonamen als IN-Parameter und gibt einen ACCOUNT%ROWTYPE als OUT-Parameter zurück.
Weitere Informationen zu den Beispielen und den SQL-Skripts finden Sie unter Schemabeispiele.
Um eine überladene Funktion aufzurufen, generieren wir ein Schema für die überladenen Prozeduren GET_ACCOUNT.1 und GET_ACCOUNT.2. Weitere Informationen zum Generieren eines Schemas finden Sie unter Abrufen von Metadaten für Oracle Database-Vorgänge in Visual Studio .
Definieren von Nachrichten und Nachrichtentypen
Das Schema, das Sie zuvor generiert haben, beschreibt die "Typen", die für die Nachrichten in der Orchestrierung erforderlich sind. Eine Nachricht ist in der Regel eine Variable, deren Typ durch das entsprechende Schema definiert wird. Sie müssen das Schema, das Sie im ersten Schritt generiert haben, mit den Meldungen aus dem Fenster Orchestrierungsansicht des BizTalk-Projekts verknüpfen.
Für dieses Thema müssen Sie zwei Anforderungs-Antwort-Nachrichtensätze erstellen: einen Anforderungs-Antwort-Satz für die erste überladene Prozedur und den zweiten Anforderung-Antwort-Satz für die zweite überladene Prozedur.
Führen Sie die folgenden Schritte aus, um Nachrichten zu erstellen und mit dem Schema zu verknüpfen.
So erstellen Sie Nachrichten und Verknüpfen mit dem Schema
Öffnen Sie das Fenster Orchestrierungsansicht des BizTalk-Projekts, wenn dieses nicht bereits geöffnet ist. Klicken Sie hierzu auf Ansicht, zeigen Sie auf Andere Fenster, und klicken Sie dann auf Orchestrierungsansicht.
Klicken Sie in der Orchestrierungsansicht mit der rechten Maustaste auf Nachrichten, und klicken Sie dann auf Neue Nachricht.
Klicken Sie mit der rechten Maustaste auf die neu erstellte Nachricht, und wählen Sie dann Eigenschaftenfenster aus.
Gehen Sie im Bereich Eigenschaften für Message_1 wie folgt vor:
Option Aufgabe Bezeichner Geben Sie Request ein. Nachrichtentyp Erweitern Sie in der Dropdownliste Schemas, und wählen Sie InvokeOverloadedProc.OracleDBBindingSchema.GET_ACCOUNT aus, wobei InvokeOverloadedProc der Name Ihres BizTalk-Projekts ist. OracleDBBindingSchema ist das Schema, das für die GET_ACCOUNT-Prozedur generiert wird. Wiederholen Sie den vorherigen Schritt, um drei weitere Nachrichten zu erstellen. Gehen Sie im Bereich Eigenschaften für die neuen Nachrichten wie folgt vor:
Festlegen des Bezeichners auf Festlegen des Nachrichtentyps auf Antwort InvokeOverloadedProc.OracleDBBindingSchema.GET_ACCOUNTResponse Anforderung2 InvokeOverloadedProc.OracleDBBindingSchema1.GET_ACCOUNT Antwort2 InvokeOverloadedProc.OracleDBBindingSchema1.GET_ACCOUNTResponse
Einrichten der Orchestrierung
Sie müssen eine BizTalk-Orchestrierung erstellen, um BizTalk Server zum Aufrufen einer überladenen Prozedur in einer Oracle-Datenbank zu verwenden. Bei dieser Orchestrierung löschen Sie zwei Anforderungsmeldungen, die jeder überladenen Prozedur entsprechen, am definierten Empfangsspeicherort. Der Oracle Database-Adapter nutzt die Nachrichten und übergibt sie über ODP an die Oracle-Datenbank. Die Antwort aus der Oracle-Datenbank wird an einem anderen Speicherort gespeichert.
Da die Orchestrierung zwei Anforderungen gleichzeitig auswählt, müssen Sie ein Shape parallele Aktionen in die Orchestrierung einschließen. Für jede parallele Aktion müssen Sie die Formen Senden und Empfangen einschließen, um Nachrichten an die Oracle-Datenbank zu senden und Antworten zu empfangen. Sie können jedoch die gleichen Ports zum Senden und Empfangen von Nachrichten für beide Vorgänge verwenden. Eine typische Orchestrierung zum gleichzeitigen Aufrufen der überladenen Prozeduren würde Folgendes umfassen:
Senden und Empfangen von Shapes zum Senden von Nachrichten an die Oracle-Datenbank und zum Empfangen von Antworten.
Ein unidirektionale Empfangsport zum Empfangen von Anforderungsnachrichten, die an die Oracle-Datenbank gesendet werden sollen.
Ein bidirektionalen Sendeport zum Senden von Anforderungsnachrichten an die Oracle-Datenbank und zum Empfangen von Antworten.
Ein unidirektionale Sendeport zum Senden der Antworten aus der Oracle-Datenbank an einen Ordner.
Eine Beispielorchestrierung zum Aufrufen der ersten und zweiten Überladung für GET_ACCOUNT Prozedur sieht wie folgt aus:
Hinzufügen von Nachrichten-Shapes
Stellen Sie sicher, dass Sie die folgenden Eigenschaften für die einzelnen Nachrichtenformen angeben. Die in der Spalte Shape aufgeführten Namen sind die Namen der Nachrichtenformen, die in der gerade erwähnten Orchestrierung angezeigt werden. In der folgenden Tabelle sind die Shapes aufgeführt, die Sie für eine der parallelen Aktionen einschließen müssen.
Form | Shape-Typ | Eigenschaften |
---|---|---|
ReceiveMessage | Empfangen | – Legen Sie Name auf ReceiveMessage fest. – Legen Sie Activate auf True fest. |
SendMessage | Send | – Name aufSendMessage festlegen |
ReceiveResponse | Empfangen | – Name aufReceiveResponse festlegen – Legen Sie Activate auf False fest. |
SendResponse | Send | – Legen Sie Name auf SendResponse fest. |
In der folgenden Tabelle sind die Shapes aufgeführt, die Sie für die andere parallele Aktion einschließen müssen.
Form | Shape-Typ | Eigenschaften |
---|---|---|
ReceiveMessage2 | Empfangen | – Legen Sie Name auf ReceiveMessage2 fest. – Legen Sie Activate auf True fest. |
SendMessage2 | Send | – Legen Sie Name auf SendMessage2 fest. |
ReceiveResponse2 | Empfangen | – Name aufReceiveResponse2 festlegen – Legen Sie Activate auf False fest. |
SendResponse2 | Send | – Name aufSendResponse2 festlegen |
Hinzufügen von Ports
Stellen Sie sicher, dass Sie die folgenden Eigenschaften für jeden der logischen Ports angeben. Die in der Spalte Port aufgeführten Namen sind die Namen der Ports, wie in der Orchestrierung angezeigt.
Port | Eigenschaften |
---|---|
FileIn | – Bezeichner auf FileIn festlegen – Legen Sie Type auf FileInType fest. – Festlegen des Kommunikationsmusters auf Unidirektionale – Festlegen der Kommunikationsrichtung auf "Empfangen" |
LOBPort | – Bezeichner auf LOBPort festlegen – Legen Sie Type auf LOBPortType fest. – Festlegen des Kommunikationsmusters auf Request-Response – Festlegen der Kommunikationsrichtung auf Senden/Empfangen |
SaveResponse | – Bezeichner auf SaveResponse festlegen – Legen Sie Type auf SaveResponseType fest. – Festlegen des Kommunikationsmusters auf Unidirektionale – Kommunikationsrichtung auf Senden festlegen |
Da Sie zwei Anforderungs- und Antwortnachrichten mit diesen Ports verarbeiten, müssen Sie zwei Vorgänge für jeden Port erstellen, wobei jeder Vorgang einem Nachrichtentyp entspricht. Klicken Sie zum Erstellen eines Vorgangs mit der rechten Maustaste auf das Port-Shape, und wählen Sie dann Neuer Vorgang aus. Benennen Sie den ersten Vorgang für jeden Port als Overload1 und den zweiten Vorgang für jeden Port als Overload2.
Verwenden der Korrelation
Mithilfe von Korrelation wird sichergestellt, dass eine eingehende Nachricht der entsprechenden Instanz einer Orchestrierung entspricht. In der Orchestrierung löschen Sie zwei Anforderungsmeldungen, eine für jede Überladung. Mithilfe der Korrelation ordnen Sie eine Anforderungsnachricht der richtigen Orchestrierung zu. Weitere Informationen zur Korrelation finden Sie unter Verwenden von Korrelationen in Orchestrierungen.
So verwenden Sie Korrelationen
Höherstufen einer Eigenschaft aus dem Schema, das für jede überladene Funktion generiert wurde. Höherstufen Sie z. B. die AID-Eigenschaft aus dem Schema für die erste Überladung. Heraufstufen der ANAME-Eigenschaft aus dem Schema der zweiten Überladung. Klicken Sie zum Heraufstufen einer Eigenschaft in der Schemaansicht mit der rechten Maustaste auf die Eigenschaft, zeigen Sie auf Heraufstufen, und wählen Sie dann Schnellheraufstufung aus. Dadurch wird Ihrem BizTalk-Projekt eine PropertySchema.xsd-Datei hinzugefügt.
Informationen zum Höherstufen einer Eigenschaft finden Sie unter Höherstufen von Eigenschaften.
Klicken Sie in der Orchestrierungsansicht mit der rechten Maustaste auf Korrelationstypen, und wählen Sie dann Neuer Korrelationstyp aus.
Im Dialogfeld Korrelationseigenschaften werden die Eigenschaften aufgelistet, die Sie in Schritt 1 heraufgestuft haben. Wählen Sie eine Eigenschaft aus, und klicken Sie dann auf Hinzufügen.
Klicken Sie auf OK.
Wiederholen Sie diese Schritte, um Korrelationstypen für die andere heraufgestufte Eigenschaft zu erstellen.
Benennen Sie die Korrelationstypen basierend auf der Eigenschaft um, der sie zugeordnet sind. Sie können die Korrelationstypen in CorrelationType_AID (für die AID-Eigenschaft) und CorrelationType_ANAME (für die ANAME-Eigenschaft) umbenennen.
Klicken Sie in der Orchestrierungsansicht mit der rechten Maustaste auf Korrelationssätze, und wählen Sie dann Neuer Korrelationssatz aus.
Klicken Sie mit der rechten Maustaste auf den neu hinzugefügten Korrelationssatz, und klicken Sie dann auf Eigenschaften. Führen Sie im Eigenschaftenbereich folgende Schritte aus:
Option Aufgabe Korrelationstyp InvokeOverloadedProc.CorrelationType_AID Bezeichner Correlation_AID Fügen Sie einen weiteren Korrelationssatz hinzu, und geben Sie im Bereich Eigenschaften die folgenden Eigenschaften an.
Option Aufgabe Korrelationstyp InvokeOverloadedProc.CorrelationType_ANAME Bezeichner Correlation_ANAME
Geben Sie Nachrichten für Aktions-Shapes an, und verbinden Sie sie mit Ports.
In der folgenden Tabelle sind die Eigenschaften und deren Werte angegeben, die Sie festlegen sollten, um Meldungen für Aktionsformen anzugeben und die Nachrichten mit den Ports zu verknüpfen. Die in der Spalte Shape aufgeführten Namen sind die Namen der Meldungs-Shapes, die in der zuvor erwähnten Orchestrierung angezeigt werden.
Form | Eigenschaften |
---|---|
ReceiveMessage | – Initialisieren von Korrelationssätzen auf Correlation_AID – Nachricht aufAnforderung festlegen – Festlegen von Operation auf FileIn.Overload1.Request |
SendMessage | – Nachricht aufAnforderung festlegen – Legen Sie Operation auf LOBPort.Overload1.Request fest. |
ReceiveResponse | – Nachricht aufAntwort festlegen – Legen Sie Operation auf LOBPort.Overload1.Response fest. |
SendResponse | – Nachricht aufAntwort festlegen – Legen Sie Operation auf SaveResponse.Overload1.Request fest. |
ReceiveMessage2 | – Initialisieren von Korrelationssätzen auf Correlation_ANAME – Nachricht aufRequest2 festlegen – Festlegen von Operation auf FileIn.Overload2.Request |
SendMessage2 | – Nachricht aufRequest2 festlegen – Legen Sie Operation auf LOBPort.Overload2.Request fest. |
ReceiveResponse2 | – Nachricht aufAntwort2 festlegen – Legen Sie Operation auf LOBPort.Overload2.Response fest. |
SendResponse2 | – Nachricht aufAntwort2 festlegen – Legen Sie Operation auf SaveResponse.Overload2.Request fest. |
Nachdem Sie diese Eigenschaften angegeben haben, werden die Nachrichtenformen und Ports verbunden, und Die Orchestrierung ist abgeschlossen.
Sie müssen nun die BizTalk-Lösung erstellen und in einem BizTalk Server bereitstellen. Weitere Informationen finden Sie unter Erstellen und Ausführen von Orchestrierungen.
Konfigurieren der BizTalk-Anwendung
Nachdem Sie das BizTalk-Projekt bereitgestellt haben, wird die zuvor erstellte Orchestrierung in der BizTalk Server Verwaltungskonsole im Bereich Orchestrierungen aufgeführt. Sie müssen die BizTalk Server-Verwaltungskonsole verwenden, um die Anwendung zu konfigurieren. Eine exemplarische Vorgehensweise finden Sie unter Exemplarische Vorgehensweise: Bereitstellen einer einfachen BizTalk-Anwendung.
Das Konfigurieren einer Anwendung umfasst Folgendes:
Auswählen eines Hosts für die Anwendung.
Zuordnen der Ports, die Sie in Ihrer Orchestrierung erstellt haben, zu physischen Ports in der BizTalk Server-Verwaltungskonsole. Für diese Orchestrierung müssen Sie:
Definieren Sie einen Speicherort auf der Festplatte und einen entsprechenden Dateiport, an dem Sie die Anforderungsnachrichten ablegen, eine für jede überladene Prozedur. Die BizTalk-Orchestrierung nutzt die Anforderungsnachrichten und sendet sie an die Oracle-Datenbank.
Definieren Sie einen Speicherort auf der Festplatte und einen entsprechenden Dateiport, an dem die BizTalk-Orchestrierung die Antwortnachrichten ablöscht, eine für jede überladene Prozedur, die die Antwort aus der Oracle-Datenbank enthält.
Definieren Sie einen physischen WCF-Custom oder WCF-OracleDB Sendeport, um Nachrichten an die Oracle-Datenbank zu senden. Sie müssen die Aktion auch im Sendeport angeben. Informationen zum Erstellen WCF-Custom oder WCF-OracleDB Ports finden Sie unter Manuelles Konfigurieren einer physischen Portbindung an den Oracle Database Adapter. Da der WCF-Custom oder WCF-OracleDB Sendeport Nachrichten sendet und empfängt, die mehreren Schemas entsprechen und zwei Vorgänge ausführt, müssen Sie für beide Vorgänge eine dynamische Aktion festlegen. Weitere Informationen zu Aktionen finden Sie unter Konfigurieren der SOAP-Aktion für Oracle Database. Für diese Orchestrierung sollte die Aktion wie folgt festgelegt werden:
<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>
Hinweis
Beim Generieren des Schemas mithilfe des BizTalk-Projekt-Add-Ins "Consume Adapter Service" wird auch eine Bindungsdatei erstellt, die Informationen zu den Ports und den aktionen enthält, die für diese Ports festgelegt werden sollen. Sie können diese Bindungsdatei aus der BizTalk Server-Verwaltungskonsole importieren, um Sendeports (für ausgehende Anrufe) oder Empfangsports (für eingehende Anrufe) zu erstellen. Weitere Informationen finden Sie unter Konfigurieren einer physischen Portbindung mithilfe einer Portbindungsdatei für Oracle Database.
Starten der Anwendung
Sie müssen die BizTalk-Anwendung zum Aufrufen einer Funktion in einer Oracle-Datenbanktabelle starten. Anweisungen zum Starten einer BizTalk-Anwendung finden Sie unter Starten einer Orchestrierung.
Stellen Sie in dieser Phase Folgendes sicher:
Der FILE-Empfangsport zum Empfangen von Anforderungsmeldungen für die Orchestrierung wird ausgeführt.
Der FILE-Sendeport zum Empfangen der Antwortnachrichten von der Orchestrierung wird ausgeführt.
Der WCF-Custom oder WCF-OracleDB Sendeport zum Senden von Nachrichten an die Oracle-Datenbank wird ausgeführt.
Die BizTalk-Orchestrierung für den Vorgang wird ausgeführt.
Ausführen des Vorgangs
Nachdem Sie die Anwendung ausgeführt haben, müssen Sie zwei Anforderungsmeldungen (eine für jede überladene Prozedur) am FILE-Empfangsspeicherort ablegen. Das Schema für die Anforderungsmeldungen muss dem Schema für die zuvor generierte Prozedur entsprechen. Weitere Informationen zum Anforderungsnachrichtenschema zum Aufrufen von Funktionen mithilfe des Oracle Database-Adapters finden Sie unter Nachrichtenschemas für Funktionen und Prozeduren .
Die Anforderungsmeldung zum Aufrufen der ersten Überladung der GET_ACCOUNT-Prozedur lautet beispielsweise:
<GET_ACCOUNT xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG/GET_ACCOUNT/overload1">
<AID>100001</AID>
</GET_ACCOUNT>
Entsprechend lautet die Anforderungsmeldung zum Aufrufen der zweiten Überladung der GET_ACCOUNT-Prozedur:
<GET_ACCOUNT xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Package/ACCOUNT_PKG/GET_ACCOUNT/overload2">
<ANAME>Mindy Martin</ANAME>
</GET_ACCOUNT>
Die erste Anforderungsnachricht ruft die GET_ACCOUNT-Prozedur auf, um den Datensatz mit der Konto-ID 100020 abzurufen. Die zweite Anforderungsnachricht ruft die GET_ACCOUNT-Prozedur auf, um Datensätze mit dem Kontonamen "John Smith" abzurufen.
Die Orchestrierung nutzt die Anforderungsnachrichten und sendet sie an die Oracle-Datenbank. Die Antwort aus der Oracle-Datenbank wird an einem anderen FILE-Speicherort gespeichert, der als Teil der Orchestrierung definiert ist. Die Antwort für den Aufruf der ersten überladenen Prozedur lautet beispielsweise:
<?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>
Mögliche Ausnahmen
Informationen zu den Ausnahmen, die beim Aufrufen überladener Pakete mit BizTalk Server auftreten können, finden Sie unter Ausnahmen und Fehlerbehandlung.
Bewährte Methoden
Nachdem Sie das BizTalk-Projekt bereitgestellt und konfiguriert haben, können Sie Konfigurationseinstellungen in eine XML-Datei exportieren, die als Bindungsdatei bezeichnet wird. Nachdem Sie eine Bindungsdatei generiert haben, können Sie die Konfigurationseinstellungen aus der Datei importieren, sodass Sie die Sendeports, Empfangsports usw. für dieselbe Orchestrierung nicht erstellen müssen. Weitere Informationen zu Bindungsdateien finden Sie unter Wiederverwenden von Oracle Database Adapter-Bindungen.
Weitere Informationen
Bausteine zum Entwickeln von BizTalk-Anwendungen mit der Oracle-Datenbank