Mit PHP auf SAP zugreifen? Viele werden sich vielleicht fragen, wat?!? Warum dass denn? Schließlich hat SAP doch seine eigene Programmiersprache - nämlich ABAP. Der Allgemeine Berichts-Anwendungs-Prozessor, äh sorry, natürlich heißt's ja seit langem schon Advanced Business Application Programming. SAP ändert ja gerne mal die Namen ihrer Produkte.
Das derzeit wichtigste Produkt, der Netweaver, bietet eine enge Integration von Java über den hauseigenen J2EE-Server und dem Java Connector JCO. Außerdem existieren in SAP seit jeher Schnittstellen nach außen - klassische wie die RFCs oder moderne über HTTP/Webservices - SOA lässt grüßen. Ahh jetzt! Der Zugriff von PHP auf SAP läuft also über SOAP oder so ähnlich. Falsch gedacht! Obwohl dies natürlich auch ginge. Die Unterstützung von SOAP ist in PHP5 sehr ausgereift.
Nein. Der Zugriff erfolgt über die RFC-Schnittstelle. Möglich wird das durch die
SAPRFC Extension, die 2001 von Eduard Koucky entwickelt wurde. Diese Extension wird allerdings seit 2005 nicht mehr weiterentwickelt. Es gibt aber mit
SAPNWRFC, eine interessante Neuentwicklung von Piers Harding.
Ein guter Artikel, wie man SAP mit PHP connected ist
"Integrating SAP with PHP" von Jason Simmons. Nach diesem Artikel bin ich auch vorgegangen.
Zunächst mal, ich hatte fürs rumspielen mit ABAP bereits eine 90-Tage Testversion von Netweaver 7.1 installiert. Diese kann man sich von sdn.sap.com runterladen. Mit dem SAP-GUI Client wird auch die notwendige librfc.dll installiert. Als PHP Umgebung verwendete ich XAMPP unter Windows. Für Windows gibt es eine DLL von SAPRFC. Diese php_saprfc.dll habe ich ins Extension-Verzeichnis von PHP kopiert und in der php.ini mit dem Eintrag
extension=php_saprfc.dll
die Extension aktiviert. Dies sollte dann über phpinfo() erkennbar sein.
Danach habe ich das mitgelieferte Script saprfc_test.php ausgeführt. Es erschien dann ein Formular, über das ich dann die Verbindungsdaten zum Mini-SAP System eingegeben habe:
Application Server: 127.0.0.1
System Number: 00
User: BCUSER
Passwort: minisap
System Name: NSP
Client: 000
Der Test war erfolgreich.
Es wurde also Zeit für ein erstes Script.
// Verbindungsdaten
$sapConnectionData = array( 'USER' => 'bcuser',
'PASSWD' => 'minisap',
'NSP' => 'NSP',
'ASHOST' => '127.0.0.1',
'SYSNR' => '00',
'CLIENT' => '000'
);
//
// RFC Verbindung zum Server aufbauen
//
$rfc = saprfc_open($sapConnectionData);
//
// prüfen ob Verbindung steht
//
if( !$rfc )
{
echo "Fehler Verbindung: ";
print_r( saprfc_error() );
die();
}
else
{
$info = saprfc_attributes($rfc);
print_r($info);
}
saprfc_close($rfc);
Entscheidend ist die Funktion saprfc_open(), welche die Verbindung zum SAP-Server aufbaut. Als Parameter übergibt man der Funktion die Verbindungsdaten als Assoziatives Array. Der Rest des Scripts ist simpel. Es gibt einfach nur die Verbindungseigenschaften aus, die über saprfc_attributes() ermittelt werden.
"Du hast den ersten Schritt in eine neue Welt getan, Luke".
Das Script hat einwandfrei funktioniert und der Zugriff auf SAP mit PHP war garnicht so schwierig. Stellt sich immer noch die Frage, warum man denn überhaupt PHP für den SAP-Zugriff verwenden sollte. Nunja, mit Scriptsprachen lassen sich schnell und effizient Anwendungen entwickeln. Außerdem sind Scriptsprachen längst reif für den Enterprise-Einsatz, wie Grails, Ruby und nicht zuletzt PHP5 beweisen. Aber dazu mehr in einem anderen Blog-Eintrag.
Weitere Links:
SAP RFC Homepage
Blog-Seite von Piers Harding zur neuen sapnwrfc Extension
Working with PHP and SAP (Artikel von Stoyan Stefanov)
HOWTO: SCRIPTING LANGUAGE SUPPORT FOR SAP SERVICES - PHP (SAP Developer Network - Vasil Bachvarov)