Warnung: Veraltete Dokumentation!
Sie verwenden die alte Version der Online-Hilfe für ERPConnect.
Verwenden Sie die englischsprachige Dokumentation im neuen HelpCenter für ERPConnect.

Dieser Abschnitt zeigt, wie Sie eine RFC-Server-Funktion erstellen, registrieren und Aufrufe verarbeiten.

Im folgenden Anwendungsbeispiel wird eine RFC-Server-Funktion erstellt, die es einem ABAP-Programm ermöglicht, zwei Ziffern zu addieren.
Zwei Input-Parameter (NUMBER1 und NUMBER2) werden addiert und als Ergebnis (RES) ausgegeben.

Registrieren einer RFC-Server-Funktion #

  1. Initialisieren Sie ein RFCServer-Objekt, das sich unter Angabe des SAP-Hostes, des Gatewayservices und der Programm-ID am SAP-Gateway registriert. Voraussetzung ist, dass die Programm-ID als registrierbare Destination im SAP hinterlegt ist, siehe Eine RFC-Destinationen anlegen.
  2. Verwenden Sie die Methode RegisteredFunctions.Add, um ein RFCServerFunction-Objekt zu registrieren. Ein RFCServer-Objekt kann beliebig viele Funktionen zur Verfügung stellen.
  3. Fügen Sie Import und Export-Parameter hinzu. Die Parameter werden genauso definiert, wie bei einer Client-Funktion.
  4. Wenn ein ABAP-Programm die Funktion aufruft, wird das Ereignis IncomingCall getriggert. Es wird ausgelöst, wenn ein eingehender Funktionsaufruf abgearbeitet werden soll. Unter C# muss die Callback-Funktion für das Ereignis mit einer separaten Code-Zeile erledigt werden.
  5. Starten Sie den Server mit Start.

Hinweis: Falls die RFC-Destination in der SAP-Transaktion SM59 auf Unicode eingestellt ist, muss die Eigenschaft IsUnicode des RFCServer-Objekts auf True gesetzt werden.

using ERPConnect; 
  
static void Main(string[] args) 
{ 
   RFCServer s = new RFCServer();
   s.GatewayHost = "sap-erp-as05.example.com"; 
   s.GatewayService = "sapgw11"; 
   s.ProgramID = "ERPTEST"; 
   s.IncomingCall+=new ERPConnect.RFCServer.OnIncomingCall(s_IncomingCall); 
   RFCServerFunction f = s.RegisteredFunctions.Add("Z_ADD"); 
   f.Imports.Add("NUMBER1",RFCTYPE.INT); 
   f.Imports.Add("NUMBER2",RFCTYPE.INT); 
   f.Exports.Add("RES",RFCTYPE.INT); 
  
   s.Start(); 
  
   Console.Write( "Server is running. Press any key to exit."); 
   Console.ReadLine(); 
}

Eingehende Aufrufe abarbeiten #

Der folgende Beispielcode zeigt, wie das Ereignis IncomingCall verarbeitet wird.

private static void s_IncomingCall(RFCServer Sender, RFCServerFunction CalledFunction) 
{ 
   if (CalledFunction.FunctionName=="Z_ADD") 
   { 
      Int32 i1 = (Int32)CalledFunction.Imports["NUMBER1"].ParamValue; 
      Int32 i2 = (Int32)CalledFunction.Imports["NUMBER2"].ParamValue; 
      Int32 erg = i1 + i2; 
      CalledFunction.Exports["RES"].ParamValue = erg; 
      Console.WriteLine("Incoming Call"); 
   } 
   Else 
      throw new ERPConnect.ERPException("Function unknown"); 
}

Die Import-Parameter werden vom SAP-System übergeben.
Die Export-Parameter werde an das SAP-System zurück geschickt.

RFC-Server-Funktionen in ABAP aufrufen #

In diesem Beispiel sehen Sie ein Stück ABAP-Code, der die neue Funktion Z_ADD in der RFC-Destination ERPTEST aufruft.
Das Programm übergibt die beiden Zahlen 26 und 25 und das Ergebnis 51 wird berechnet und zurückgegeben.

REPORT z_add_test 
. 
  
DATA result TYPE i.
CALL FUNCTION 'Z_ADD' DESTINATION 'ERPTEST' 
   EXPORTING 
      number1 = 26 
      number2 = 25 
   IMPORTING 
      res = result. 
   WRITE: / 'Result: ', result.  

Der folgende Screenshot zeigt die Ausgabe der RFC-Server-Funktion im ABAP-Programm:
RFCServer-Console