SAP Daten in WordPress darstellen, verarbeiten

Die Zeiten ändern sich.

Dieser Beitrag scheint älter als 11 Jahre zu sein – eine lange Zeit im Internet. Der Inhalt ist vielleicht veraltet.

WordPress ist ebenso in den Unternehmen angekommen, sei es um schnell eine interne Plattform zu erstellen oder Inhalte online zu verteilen. Verschiedene Aspekte spielen hier eine Rolle – einzig die Form der GPL macht es Unternehmen nicht leicht damit zu arbeiten bzw. sich auf die Resultate zu konzentrieren.

Darum soll es aber nicht gehen. Der Sinn dieses Artikels ist die Verknüpfung von Daten aus dem SAP ERP System und WordPress. Beide Plattformen können unterschiedlicher nicht sein und doch bestimmen beide einen Großteil meiner Zeit über den Tag. Kundenseitig habe ich ebenso mit beiden Systemen viel zu tun und berate und finde Lösungen zu Zielen und Problemen. Darum lag es nun nahe, eine alte Geschichte wieder aufzuwärmen und für einen Kunden diverse Inhalte aus dem SAP System in WordPress darzustellen, genauer im Frontend von WordPress um über diverse Inhalte live zu informieren. Daher galt es via PHP von WordPress aus auf Funktionsbausteine, geschrieben in ABAP, zuzugreifen und die Daten aufbereitet zu erhalten. Wenn man sich mit beiden Systemen befasst, kommt man schnell zu einer Lösung – SAP RFC.

RFC – Communication between applications in different systems in the SAP environment includes connections between SAP systems as well as between SAP systems and non-SAP systems. Remote Function Call (RFC) is the standard SAP interface for communication between SAP systems. RFC calls a function to be executed in a remote system.


RFC ist die Schnittstelle um von Außen aus SAP Daten zu holen. Sie existiert lang genug, dass man Information dazu bekommt und mit div. Sprachen zugreifen kann. Es gibt ebenso weitere Möglichkeiten, doch RFC ist überschaubar und die Bausteine im System sind vielschichtig. Die Berechtigung verständlich und kontrollierbar.

Kurz: nutzbar und hierfür die richtige Lösung.
Nun gilt es aber via PHP auf ABAP Bausteine zuzugreifen, dafür muss eine Libary her, die es zum Glück seit vielen Jahre gibt SAPRFC. Die ersten Experimente damit habe ich auch vor vielen Jahren getan und seit dem nie wieder nutzen müssen. Nun war es die Erinnerung, die mich schnell zu dieser Libery führte. Siehe da, sie wird weiterhin geplegt, ist frei verfügbar – nicht besonders üblich im SAP Umfeld – und dokumentiert. Also ging es über einige kleine Tests schnell zum ersten Widget, welches Daten aus SAP in WordPress anzeigt.

Die Bibliothek wird via Extensions in der php.ini geladen und schon steht sie im Umfeld zur Verfügung. Informationen und Installationsanleitung für verschiedene Systeme findet ihr in der Doku bzw. dem Download der SAPRFC PHP Library.
SAPRFC ist aktiv

Nun ist es ein leichtes auf Daten in SAP zuzugreifen. Als erstes gilt es den Login-prozess durchzuführen und mittels Einbindung der nötigen Funktionen der SAPRFC Lib ist dies schnell erledigt.


require_once 'inc/saprfc.php';

// WARNING: The password is send as the clear text!!!
// Don't use this script in the Internet environment.
// Don't login to the productive system. 
*****************************************************
// Create saprfc-instance
// change the login data with your system and users
$sap = new saprfc( array(
	'logindata' => array(
		  'ASHOST'  => 'your_system.main.org' // application server
		, 'SYSNR'   => '0815'  // system number
		, 'CLIENT'  => '900' // client
		, 'USER'    => 'Your_User'  // user
		, 'PASSWD'  => 'Your_Password'  // password
	)
	, 'show_errors' => TRUE  // let class printout errors
	, 'debug' => FALSE  // detailed debugging information
) ) ;

Hinweis: Das Beispiel nutze eine offene, sichtbare Übergabe des Logins. Für eine Live-Umgebung muss die Datenübergabe verschlüsselt werden.

Nun gilt die ABAP Bausteine aufzurufen und die Daten abzufordern. Ich habe im Repo (abgelegt auf Github) zwei Beispiele abgelegt, die einnal Daten zum Materialstamm holen, explizit eine Material-ID (Nummer) übergeben und Daten zurück holen. Hierbei gilt es zu beachten, dass SAP im diesen Umfeld intern mit 18 Stellen arbeiten; unternehmensseitig wird oft mit einem eigenen Format gearbeitet.


global $sap;
// Usee SE37 oder BAPI explorer to read more about the functions and his params
// Call Material get detail
$result = $sap->callFunction( 'BAPI_MATERIAL_GET_DETAIL',
	array(
		array( 'IMPORT', 'MATERIAL', '000000000001313131' ), // 18stellig
		array( 'EXPORT', 'MATERIAL_GENERAL_DATA', array() )
	)
);

Das zweite Widget liest alle User im System aus, gibt diese tabellarisch zurück.


global $sap;
// Usee SE37 oder BAPI explorer to read more about the functions and his params
// Call-Function
$result = $sap->callFunction( "SO_USER_LIST_READ",
	array(
		array( "IMPORT", "USER_GENERIC_NAME", "*" ),
		array( "TABLE", "USER_DISPLAY_TAB", array() )
	)
);

Ich habe diese Beispiele ausgewählt, da das Objekt Material ein gängiges Objekt ist und hinreichend bekannt, ebenso gilt das für den Baustein BAPI_MATERIAL_GET_DETAIL. Das zweite Beispiel zeigt schön den Zugriff auf eine Tabelle. Beide Bausteine lassen sich schön via BAPI-Explorer oder Function Builder SE37 anzeigen und die Doku ist ebenso umfangreich gepflegt. Wenn man die Import-, Export- und Tabellen-Reiter ansieht, wird man die Übergabe in den Funktionsarrays sicher verstehen.

»» Github Repo, inkl. Screenshot und Libary

Als Resultat sind Daten in Widgets dargestellt und werden in Tabellen ausgegeben – diese Formatierung ist gewählt, um schnell ein sichtbares Resultat zu bekommen, kein Eingriff per CSS.

Vielleicht muss der eine oder andere auch Daten aufbereiten, zwischen den beiden Systemen übergeben, oder will die WordPress Installation um sinnvolle Inhalte erweitern, dann sollte er hier einen kleinen Ansatz finden und muss nicht gleich auf Web Dynpros gehen und aus meiner Sicht komplizierte Wege implementieren.

Von Frank Bültge

bueltge.de [by:ltge.de] wird von Frank Bültge geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.