Empfangen eingehender RFC-Aufrufe von SAP mithilfe von BizTalk Server
In einem RFC-Serverszenario gibt es drei Entitäten:
Ein SAP-Client, der eine Anforderung an SAP sendet, um einen RFC aufzurufen. Dies kann entweder mithilfe der SAP GUI oder durch einen RFC-Clientaufruf über den SAP-Adapter aufgerufen werden.
Das SAP-System, das eine RFC-Funktionsdefinition enthält, die vom SAP-Client aufgerufen wird. Das SAP-System übergibt die Anforderung an den RFC-Server (den Adapter). Dies wird vom Adapter verwendet, um die Metadaten des RFC-Aufrufs abzurufen, den der SAP-Server in den Adapter eingibt.
Der SAP-Adapter, der als RFC-Server fungiert und den tatsächlichen RFC hostet.
Die erste Entität, der SAP-Client, wird in diesem Thema nicht behandelt. Wenn Sie die SAP GUI verwenden, um einen RFC aufzurufen, lesen Sie die SAP-Dokumentation. Wenn Sie den SAP-Adapter zum Aufrufen eines RFC verwenden, lesen Sie Aufrufen von RFCs in SAP mithilfe von BizTalk Server.
Dieser Abschnitt enthält Anweisungen zur Verwendung des Adapters zum Empfangen eines RFC-Serveraufrufs, nachdem der RFC von einem SAP-Client aufgerufen wurde. Weitere Informationen dazu, wie der Adapter das Empfangen von RFC-Serveraufrufen mithilfe des SAP-Adapters unterstützt, finden Sie unter Vorgänge in RFCs in SAP.
Wie empfängt man einen eingehenden RFC-Aufruf vom SAP-System?
Das Ausführen eines Vorgangs auf einem SAP-System mit BizTalk Server umfasst prozedurale Aufgaben, die unter Bausteine zum Erstellen von SAP-Anwendungen beschrieben sind. Um einen RFC-Aufruf vom SAP-System zu empfangen, lauten die folgenden Aufgaben:
Konfigurieren Sie Ihr SAP-System so, dass RFC an eine externe Anwendung gesendet wird, in diesem Fall an den SAP-Adapter.
Erstellen Sie ein BizTalk-Projekt, und generieren Sie ein Schema für den RFC, das der SAP-Adapter vom SAP-System empfängt.
Erstellen Sie Nachrichten im BizTalk-Projekt, um Nachrichten vom SAP-System zu empfangen und Antworten zu senden.
Erstellen Sie eine Orchestrierung, um einen RFC vom SAP-System zu empfangen, zu verarbeiten und die Antwort an das SAP-System zu senden.
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.
Aktivitäten im SAP-System
Bevor Sie den SAP-Adapter zum Empfangen eingehender RFC-Aufrufe vom SAP-System verwenden, müssen Sie die folgenden Aufgaben auf dem SAP-System ausführen.
Ein RFC-Ziel für den SAP-Adapter muss vorhanden sein. Der SAP-Adapter empfängt RFCs vom SAP-System über ein RFC-Ziel, das im SAP-System definiert ist. Das RFC-Ziel enthält den SAP-Gatewayhost, den SAP-Gatewaydienst und die SAP-Programm-ID, die Sie im Verbindungs-URI in Ihrem Code angeben müssen. Informationen zum Einrichten eines RFC-Ziels in SAP finden Sie unter Erstellen eines RFC- und RFC-Ziels und Senden eines RFC aus dem SAP-System.
Sie müssen ein Funktionsmodul erstellen, das den RFC im SAP-System definiert. Der SAP-Adapter verwendet die RFC-Definition auf dem SAP-System, um Metadaten zum RFC abzurufen (sowohl zur Entwurfszeit als auch zur Laufzeit). Weitere Informationen finden Sie unter Erstellen eines RFC in einem SAP-System.
Im Folgenden finden Sie ein Beispiel für den Quellcode im SAP-System für einen RFC, der zwei ganze Zahlen hinzufügt und deren Ergebnis zurückgibt. Der Code ruft den RFC lediglich über ein angegebenes Ziel auf. Die Implementierung der Funktion erfolgt durch den Clientcode des SAP-Adapters.
FUNCTION Z_RFC_ADD. *"------------------------------------------------------------------ *" *"Local interface: *" IMPORTING *" VALUE(X) TYPE INT4 *" VALUE(Y) TYPE INT4 *" VALUE(DEST) TYPE CHAR20 DEFAULT 'SAPADAPTER' *" EXPORTING *" VALUE(RESULT) TYPE INT4 *"------------------------------------------------------------------ CALL FUNCTION 'Z_RFC_ADD' DESTINATION DEST EXPORTING X = X Y = Y IMPORTING RESULT = RESULT. ENDFUNCTION.
Beispiel basierend auf diesem Thema
Ein Beispiel, RFCServer, basierend auf diesem Thema wird auch mit dem BizTalk-Adapterpaket bereitgestellt. Weitere Informationen finden Sie unter Beispiele für den SAP-Adapter.
Generieren des Schemas
In diesem Thema wird das Schema für Z_RFC_ADD RFC generiert, um zu veranschaulichen, wie ein eingehender RFC-Aufruf vom SAP-System empfangen wird. Sie haben diesen RFC im vorherigen Schritt erstellt. Dieser RFC akzeptiert zwei ganzzahlige Werte als Eingabeparameter.
Wichtig
Da Sie das Schema für einen eingehenden RFC-Aufruf generieren, stellen Sie sicher, dass Sie in der Dropdownliste Vertragstyp auswählen im BizTalk-Projekt-Add-In Nutzen des Adapterdiensts die Option Dienst (Eingehender Vorgang) auswählen.
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 der Orchestrierungsansicht des BizTalk-Projekts verknüpfen.
Für dieses Thema müssen Sie zwei Nachrichten erstellen– eine zum Empfangen von Nachrichten vom SAP-System und die andere zum Senden einer Antwort an das SAP-System.
Führen Sie die folgenden Schritte aus, um Nachrichten zu erstellen und sie mit dem Schema zu verknüpfen:
So erstellen Sie Nachrichten und Verknüpfen mit dem Schema
Fügen Sie dem BizTalk-Projekt eine neue Orchestrierung hinzu.
Öffnen Sie die Orchestrierungsansicht des BizTalk-Projekts, falls noch nicht geöffnet. Klicken Sie auf Ansicht, zeigen Sie auf Andere Fenster, und klicken Sie 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 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 RFCServer.SAPBindingSchema.Z_RFC_ADD aus, wobei RFCServer der Name Ihres BizTalk-Projekts ist. SAPBindingSchema ist das Schema, das für die RFC-Z_RFC_ADD generiert wird. Wiederholen Sie Schritt 2, um eine neue Nachricht zu erstellen. Gehen Sie im Bereich Eigenschaften für die neue Nachricht wie folgt vor.
Option Aufgabe Bezeichner Geben Sie Antwort ein. Nachrichtentyp Erweitern Sie in der Dropdownliste Schemas, und wählen Sie RFCServer.SAPBindingSchema.Z_RFC_ADDResponse aus.
Einrichten der Orchestrierung
Sie müssen eine BizTalk-Orchestrierung erstellen, um BizTalk Server für den Empfang von RFC-Serveraufrufen vom SAP-System zu verwenden. Betrachten Sie für dieses Beispiel ein Szenario, in dem ein RFC-Client eine Anforderung an das SAP-System sendet, um zwei ganze Zahlen hinzuzufügen. Das SAP-System nimmt die Anforderung mit den Eingabeparametern an und übergibt sie an den externen RFC-Server, der vom SAP-Adapter gehostet wird. Der SAP-Adapter empfängt die Anforderung vom SAP-System, verarbeitet die Anforderung, um zwei ganze Zahlen hinzuzufügen, und generiert eine Antwort. Der SAP-Adapter übergibt die Antwort an das SAP-System, das wiederum an den RFC-Client übergeben wird.
Um dies im Rahmen einer Orchestrierung zu erreichen, muss die Orchestrierung Folgendes enthalten:
Ein bidirektionalen Empfangsport, um die RFC-Serveranforderung vom SAP-System zu empfangen und die Antwort zu senden.
Senden und Empfangen von Shapes.
Erstellen Sie das Nachrichten-Shape und darin ein Nachrichtenzuweisungs-Shape, um die RFC-Serveranforderung zu verarbeiten, die vom SAP-System stammt.
Eine Beispielorchestrierung für einen RFC-Serveraufruf sieht wie folgt aus.
des
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 Meldungs-Shapes, wie in der vorherigen Orchestrierung angezeigt.
Form | Shape-Typ | Eigenschaften |
---|---|---|
ListenToSAP | Empfangen | – Legen Sie Name auf ListenToSAP fest. – Legen Sie Activate auf True fest. |
SendResponse | Send | – Legen Sie Name auf SendResponse fest. |
Hinzufügen eines Konstrukt-Nachrichten-Shapes
Um den eingehenden RFC-Aufruf zum Hinzufügen von zwei ganzzahligen Werten zu verarbeiten, müssen Sie der Orchestrierung zwischen den beiden Sendeformen ein Shape Message construct message und darin ein Nachrichtenzuweisungs-Shape hinzufügen. In diesem Beispiel ruft die Message Assignment-Form auf, um zwei ganze Zahlen hinzuzufügen. Das Shape Nachrichtenzuweisung legt auch die Aktion für die Antwort fest, die an das SAP-System gesendet werden soll.
Legen Sie für die Form Nachricht konstruktieren die Eigenschaft Message Constructed auf Response fest.
Der Code zum Verarbeiten der RFC-Anforderung kann Teil derselben Visual Studio-Projektmappe wie Ihr BizTalk-Projekt sein. Ein Beispielcode zum Hinzufügen von zwei ganzen Zahlen sieht wie folgt aus.
namespace RFCServerResponseCreator
{
public class RFCServerResponseCreator
{
private static XmlDocument messageIn;
private static XmlDocument messageOut;
public static XmlDocument CreateRequest(int a, int b, string destination)
{
messageIn = new XmlDocument();
messageIn.LoadXml( "<Z_RFC_ADD xmlns=\"http://Microsoft.LobServices.Sap/2007/03/Rfc/\">" +
"<DEST>" + destination + "</DEST>" +
"<X>" + a + "</X>" +
"<Y>" + b + "</Y>" +
"</Z_RFC_ADD>"
);
return messageIn;
}
public static XmlDocument CreateResponse(int a, int b)
{
int c = a + b;
messageOut = new XmlDocument();
messageOut.LoadXml( "<Z_RFC_ADDResponse xmlns=\"http://Microsoft.LobServices.Sap/2007/03/Rfc/\">" +
"<RESULT>" + c + "</RESULT>" +
"</Z_RFC_ADDResponse>"
);
return messageOut;
}
}
}
Hinweis
Nachdem Sie das Projekt erstellt haben, werden RFCServerResponseCreator.dll im Projektverzeichnis erstellt. Sie müssen diese DLL dem globalen Assemblycache (GAC) hinzufügen.
Fügen Sie den folgenden Ausdruck hinzu, um diesen Code aus der Form Nachrichtenzuweisung aufzurufen und die Aktion für die an das SAP-System gesendete Antwort festzulegen. Doppelklicken Sie zum Hinzufügen eines Ausdrucks auf das Shape Nachrichtenzuweisung, um den Ausdrucks-Editor zu öffnen.
Response = RFCServerResponseCreator.RFCServerResponseCreator.CreateResponse(Request.X, Request.Y);
Response(WCF.Action) = "http://Microsoft.LobServices.Sap/2007/03/Rfc/Z_RFC_ADD/response";
Wichtig
Sie müssen die Aktion explizit für die Antwortnachricht festlegen. Wenn Sie die Aktion nicht festlegen, kommt WCF-Custom Adapter zur Aktionsmeldung, indem er "Antwort" an die Anforderungsaktion anfügen. Daher wird die Aktion für die Antwortnachricht zu http://Microsoft.LobServices.Sap/2007/03/Rfc/Z_RFC_ADDResponse
. SapBinding erwartet jedoch die Antwortaktion, indem "/response" an die Anforderungsaktion angefügt wird, z. B http://Microsoft.LobServices.Sap/2007/03/Rfc/Z_RFC_ADD/response
. .
Hinzufügen von Ports
Stellen Sie sicher, dass Sie die folgenden Eigenschaften für den logischen Port angeben. Der in der Spalte Port aufgeführte Name ist der Name des Ports, der in der Orchestrierung angezeigt wird.
Port | Eigenschaften |
---|---|
RFCServerPort | – Bezeichner auf RFCServerPort festlegen – Legen Sie Type auf RFCServerPortType fest. – Festlegen des Kommunikationsmusters auf Request-Response – Festlegen der Kommunikationsrichtung auf Receive-Send |
Angeben von Nachrichten für Aktions-Shapes und Herstellen einer Verbindung mit Ports
In der folgenden Tabelle sind die Eigenschaften und deren Werte angegeben, die festgelegt werden sollen, um Meldungen für Aktions-Shapes anzugeben und sie mit den Ports zu verknüpfen. Die in der Spalte Shape aufgeführten Namen sind die Namen der Meldungs-Shapes, wie in der vorherigen Orchestrierung angezeigt.
Form | Eigenschaften |
---|---|
ListenToSAP | – Nachricht aufAnforderung festlegen – Legen Sie Operation auf RFCServerPort.Add.Request fest. |
SendResponse | – Nachricht aufFuncResponse festlegen – Legen Sie Operation auf RFCServerPort.Add.Response 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 dann 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. Weitere Informationen zum Konfigurieren einer Anwendung finden Sie unter Konfigurieren einer 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 WCF-Custom- oder WCF-SAP-Empfangsport. Dieser Port empfängt eingehende RFC-Aufrufe vom SAP-System und sendet die Antwort zurück an das SAP-System. Informationen zum Erstellen von Ports finden Sie unter Manuelles Konfigurieren einer physischen Portbindung an den SAP-Adapter.
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-Verwaltungskonsole importieren, um Sendeports (für ausgehende Anrufe) zu erstellen oder Ports (für eingehende Anrufe) zu empfangen. Weitere Informationen finden Sie unter Konfigurieren einer physischen Portbindung mithilfe einer Portbindungsdatei für SAP.
Außerdem müssen Sie der BizTalk-Anwendung die Assembly für das RFCServerResponseCreator-Projekt hinzufügen. Sie haben dieses Projekt erstellt, um den VOM SAP-System empfangenen RFC-Aufruf zu verarbeiten. Gehen Sie folgendermaßen vor:
Klicken Sie in der Konsolenstruktur auf der linken Seite der BizTalk Server Verwaltungskonsole unter der BizTalk-Anwendung, in die Sie die Bindungen importiert haben, mit der rechten Maustaste auf Ressourcen, zeigen Sie auf Hinzufügen, und klicken Sie dann auf BizTalk-Assemblys.
Klicken Sie im Dialogfeld Ressourcen hinzufügen auf Hinzufügen, und navigieren Sie dann zu dem Ordner, der RFCServerResponseCreator.dll enthält. Wählen Sie die Datei aus, und klicken Sie dann auf Öffnen.
Klicken Sie im Dialogfeld Ressourcen hinzufügen auf OK.
Starten der Anwendung
Sie müssen die BizTalk-Anwendung starten, um eingehende RFC-Aufrufe von einem SAP-System zu empfangen. Anweisungen zum Starten einer BizTalk-Anwendung finden Sie unter Starten einer Orchestrierung und Starten einer Anwendung.
Stellen Sie in dieser Phase Folgendes sicher:
Der WCF-Custom oder WCF-SAP-Empfangsport zum Empfangen von RFC-Aufrufen vom SAP-System 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 einen RFC an den SAP-Adapter senden. Dazu können Sie die Transaktion SE37 auf dem SAP-System ausführen. Sie müssen auch die Eingabeparameter für den RFC-Aufruf angeben. Der Adapter empfängt den Aufruf zusammen mit den Parametern, verarbeitet ihn und sendet die Antwort zurück an das SAP-System. Sie können die Antwort für dieselbe Transaktion sehen, von der Sie den RFC gesendet haben.
Mögliche Ausnahmen
Informationen zu den Ausnahmen, die beim Empfangen eines RFC-Serveraufrufs von einem SAP-System mit BizTalk Server auftreten können, finden Sie unter Ausnahmen und Fehlerbehandlung mit dem SAP-Adapter.
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 SAP-Adapterbindungen.