Warning: mysql_query(): Access denied for user ''@'localhost' (using password: NO) in D:\Webseiten\www.peppertools.de\wp-content\plugins\vsf-simple-block\vsf_simple_block_check.php on line 58

Warning: mysql_query(): A link to the server could not be established in D:\Webseiten\www.peppertools.de\wp-content\plugins\vsf-simple-block\vsf_simple_block_check.php on line 58
SAP NET Connector: Anwendungen für SAP programmieren

SAP NET Connector: Anwendungen für SAP programmieren

SAP ERP SystemIn den letzten Monaten hatte ich den Auftrag zwei bestehende Warenwirtschaftssysteme miteinander zu verbinden. Eingeführt werden sollte das wohl bekannteste ERP Programm SAP. Die besondere Herausforderung bestand darin, die zwei Systeme so miteinander zu verbinden, dass die betriebswirtschaftlichen Auswertungen natürlich auf beiden Seiten stimmen. Die alte Warenwirtschaft sollte die Lagerprozesse und den Vertrieb weiterhin gewährleisten. Im SAP sollte das MM Modul für Bestellungen von Waren, sowie das FIBU Modul genutzt werden.

Eine Rechnung die vom Vertrieb in der alten Warenwirtschaft geschrieben wird, muss gleichzeitig in der neuen FIBU sichtbar sein. Zahlungen die in der neuen FIBU ausgeziffert (bezahlt und gebucht) werden, müssen im Altsystem auch als bezahlt markiert sein. So kam ein Sonderfall zum nächsten. Bestellungen die im SAP für China erfasst werden, müssen beim Wareneingang im alten System vorhanden sein. Sobald der physikalische Wareneingang erfolgt und der einzelne Zählvorgang erfasst und mit der Bestellung verbunden ist, musste die Information in das neue SAP System gelangen. Die beiden System tauschen eine Vielzahl an Daten über insgesamt 8 Schnittstellen aus.

So entstand in einer Zeit von 4-5 Monaten eine perfekte Symbiose. Trotz der kurzen Zeit für die Entwicklung an mehreren Fronten gelang eine terminliche Punktlandung.

Das neue SAP System soll nicht im Vertrieb eingesetzt werden. Was macht ein Vertriebler, der gerade eine Kundenbestellung entgegen nehmen will und gar nicht weiss ob der Kunde Ware erhalten darf ? Hat dieser Kunde Mahnungen ? Ist sein Kreditlimit bereits ausgeschöpft ? Ist der Kunde eventuell im SAP für die weitere Belieferung gesperrt worden ? All diese Fragen kann das Altsystem nicht beantworten. Hier musste eine Lösung geschaffen werden, um dem Vertrieb diese Daten präsentieren zu können.

SAP NET Connector – Remote Function Calls

Die Lösung besteht aus einer C# Software, die mit dem SAP Net Connector zusammenarbeitet um über “Remote Function Calls” (RFC) bestimmte Anfragen an das SAP System abzusenden. Damit konnten dem Vertrieb die benötigten Informationen geliefert werden.

Wie funktioniert nun dieser RFC Aufruf ?

Zu aller erst benötigt man den NET Connector, den man bei sap.com kostenlos beziehen kann. Die zwei neuen DLL´s müssen dann im Visual Studio C# 2010 in die Referenzen eingebunden werden. Dies geschieht über einen Rechtsklick auf die Referenzen, hinzufügen und dann kann man über Browse sich die 2 DLLs raussuchen.

SAP Net Connector DLLs zu Visual Studio C# 2010 Referenzen hinzufügen

Ab sofort erscheinen die zwei neuen Punkte sapnco und sapnco_utils. Dann kann es mit dem eigentlichen Programmieren losgehen. Die Verbindung zum SAP System muss hergestellt werden und dann muss der Remote Function Call ausgelöst werden. Hier ein Beispiel für den Connect und den Aufruf eines RFC fähigen Bausteins im SAP:

RfcConfigParameters rfc = new RfcConfigParameters();
rfc.Add(RfcConfigParameters.Name, "LGT");
rfc.Add(RfcConfigParameters.SystemID, "LGT");
rfc.Add(RfcConfigParameters.AppServerHost, "192.168.1.170");
rfc.Add(RfcConfigParameters.Client, "100");
rfc.Add(RfcConfigParameters.User, "rfc_user");
rfc.Add(RfcConfigParameters.Password, "meinPasswort");
rfc.Add(RfcConfigParameters.SystemNumber, "00");
rfc.Add(RfcConfigParameters.Language, "DE");
rfc.Add(RfcConfigParameters.PoolSize, "10");
rfc.Add(RfcConfigParameters.IdleTimeout, "60");

RfcDestination rfcDest = RfcDestinationManager.GetDestination(rfc);
RfcRepository rfcRep = rfcDest.Repository;

IRfcFunction myfun = null;
myfun = rfcRep.CreateFunction("BAPI_CUSTOMER_GETDETAIL2");
myfun.SetValue("CUSTOMERNO", KDNR);
myfun.SetValue("COMPANYCODE", COMPANY);
myfun.Invoke(rfcDest);

IRfcStructure structure = myfun.GetStructure("CUSTOMERADDRESS");

// Daten auslesen: myfun.GetStructure("CUSTOMERADDRESS").GetString("NAME");

 

Bitte beachten Sie dass der Baustein der aufgerufen wird auch RFC fähig sein muss. Nachsehen kann man das im SAP in der Transaktion SE37

SAP Transaktion SE38 Abap Editor

In den Eigenschaften des Bausteins findet man, ob dieser überhaupt RFC fähig ist. Sollte dies nicht der Fall sein und man findet keine Alternative, kann man den Baustein kopieren und einfach RFC fähig machen. Eigene Programme sind mit Z_ vom Namen her zu benennen. In meinem Fall funktionierte das einfache kopieren leider nicht. Außerdem wollte ich soviele Informationen, die ich nur über mehrere Bausteine abfragen konnte. Anstatt jetzt 5-6 Remote Function Calls zu machen, habe ich mir im SAP ein eigenes Programm gemacht, welches über Call Function andere SAP Bausteine aufruft, diese mit den entsprechenden Daten füttert und alles gesammelt an mein C# Programm zurück gibt.

Tip

Bausteine die mit den Kreditdaten zu tun haben findet man unter CREDITCONTROL_* . Weitere Bausteine die mit BAPI_* beginnen liefern auch sehr gute Dienste was die Informationen von Kunden angehen.

Lauffähige Anwendung mit C# Source Code downloaden ?

Download eines C# Source Codes / Quellcodes der einen RFC Aufruf (remote function calls) auf ein SAP System macht