RFC-Server mit Tabellen 
From Theobald Software
Da das Eingangsbeispiel (RFC-Server) nur die Übergabe von skalaren (einzelnen) Parametern zeigt, soll folgendes Beispiel demonstrieren, wie Tabellen zwischen SAP und .NET ausgetauscht werden können.
Das Beispiel mit dem Z_ADD-Baustein wird mit Z_ADD_2 so erweitert, dass eine Tabelle (mit Namen NUMBERS) an das .NET-Programm übergeben wird. Die Tabelle enthält die Spalte NUMB. Diese Spalte soll Nummern enthalten, die addiert werden.
Der folgende Code zeigt die Intialisierung des RFCServer-Objekts. Achten Sie insbesondere auf die Defintion der Tabelle NUMBERS, die zunächst der TABLES-Collection hinzugefügt wird. Zu der leeren Tabellen-Hülle wird dann eine Spaltendefinition ebenfalls mit Add(...) ergänzt.
static RFCServer s = new RFCServer(); static void Main(string[] args) { s.GatewayHost = "hamlet"; s.GatewayService = "sapgw11"; s.ProgramID = "ERPTEST"; s.IncomingCall += new RFCServer.OnIncomingCall(s_IncomingCall); RFCServerFunction f = s.RegisteredFunctions.Add("Z_ADD_2"); f.Exports.Add("RES", RFCTYPE.INT); RFCTable numbertable = f.Tables.Add("NUMBERS"); numbertable.Columns.Add("NUMB", 10, 0, RFCTYPE.NUM); s.Start(); Console.WriteLine("Press Enter to quit"); Console.ReadLine(); }
Die Behandlung der Tabelle erfolgt wie gewohnt über die Objekthierarchie des RFCServerFunction-Objektes. Die Werte der einzelnen Zeilen werden addiert und zurückgegeben:
static void s_IncomingCall(RFCServer Sender, RFCServerFunction CalledFunction) { Console.WriteLine("Incoming call!!"); Int32 Res = 0; foreach (RFCStructure row in CalledFunction.Tables["NUMBERS"].Rows) Res += Convert.ToInt32(row["NUMB"]); CalledFunction.Exports["RES"].ParamValue = Res; }
Hier noch ein Beispiel-ABAP-Code, der den Baustein in einer fremden Destination aufruft:
REPORT zaddtest2 .
DATA res TYPE i.
DATA numbs LIKE zaddstruc OCCURS 0 WITH HEADER LINE.
numbs-numb = '1'.
APPEND numbs.
numbs-numb = '2'.
APPEND numbs.
numbs-numb = '3'.
APPEND numbs.
CALL FUNCTION 'Z_ADD_2' DESTINATION 'ERPTEST'
IMPORTING
res = res
TABLES
numbers = numbs.
WRITE: / 'Result: ', res.


