Code, Entwicklung, PHP, Plugin, WordPress

SAP Daten in WordPress darstellen, verarbeiten

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.

Weiterlesen

Standard
Plugin, WordPress

SAP und WordPress

Der eine oder andere Blog einiger Entwickler des Business-Softwareriesen SAP basiert auf WordPress – auch in diesen Reihen ist Open Source beliebt. Um SDN Mitwirkende und WordPress zu verbinden, gibt es auch ein Plugin, was die Arbeit und Implementierung vereinfacht – SDN Contributor.

Mehr Hinweise und Hintergründe gibt es unter anderem im SDN und im Wiki des Plugin-Autors. Dabei bedient er sich meines Plugins RSSImport. Das ist super, denn genau dafür hatte ich das Plugin erstellt, man kann es anpassen und für die eigenen Zwecke nutzen.

Standard
Entwicklung

Applikationen mit SAP verbinden

Es gibt verschiedene Methoden um unterschiedliche Applikationen mit SAP-Software zu verbinden. Die verschiedenen Möglichkeiten sind unterschiedlich gewachsen und werden in Zukunft auch unterschiedlich gepflegt bzw. ist die Weiterentwicklung eingestellt.
Die Folgende Übersicht soll die möglichen Schnittstellen ein wenig näher erläutern und somit eine Übersicht der Möglichkeiten ins SAP darstellen.

Manuelle Datenpflege

manuellAls erste Möglichkeit besteht darin, die Daten händisch in das System zu pflegen. Dies ist in vielen Unternehmensbereichen nicht selten, auch wenn es wenig effektiv ist, so bringt es zumindest Arbeitsplätze ins Unternehmen. Die Fehleranfälligkeit ist ebenso groß. Schnell kommt es zu Inkonstistenzen zwischen System SAP und Applikation.

Kopplung über IDocs

Intermediate Document (IDoc): SAP-Standardformat zum elektronischen Datenaustausch zwischen Systemen
Hierbei werden vorhandene oder neue Softwarebausteine im SAP genutzt. Sie sorgen für den Austausch der Daten. Alle SAP-Module können IDocs lesen und schreiben/ exportieren.
Die Daten werden mittels IDoc an das andere System übertragen und werden dort in ein spezifisches Format geschrieben, abhängig vom Host. Die Routine zum Lesen der Daten müssen natürlich in jeder Applikation erstellt werden.
Der Austausch der Daten erfolgt im einfachsten Fall über ein vereinbartes Verzeichnis, alternativ könne Protokolle wie ftp und http eingesetzt werden. Die größte Verbreitung der IDocs erfolgt jedoch über das SAP-eigene Protokoll RFC (Remote Function Call – ist eine SAP-Schnittstellenprotokoll, das auf CPI-C (Die Common Program Interface Communication beschreibt den Datenaustausch zwischen verschiedenen Programmen. Die Dateien werden mit CPI-C „verpackt“.) beruht, Damit wird die Programmierung von Kommunikationsabläufen zwischen Systemen wesentlich vereinfacht).

Die Daten werden in einer lesbaren Datei versendet, somit besteht die Möglichkeit, dass potenziell kritische Daten manipuliert bzw. gelesen werden können. Dies ist natürlich im Unternehmen selten erwünscht. Hierbei sollte aber berücksichtigt werden, in wie weit werden die Daten an ‚Außenstehende’ weiter gegeben oder befindet sich der Datenaustausch in einem geschützten Netz.
Ein weiterer Nachteil besteht in der mangelnden Fehlerbehandlung. Fehlerhafte Übergaben oder Fehler im IDoc selbst werden nicht an den Erzeuger der Daten gegeben. Ein Monitoring ist nur durch eine eigene Fehlerbehandlung möglich, die vom Anwender erstellt wird. Diese führt zu einem schlechten Händling, denn sie muss immer angepasst werden, es entsteht eine Abhängigkeit zwischen Sender um Empfänger.

Remote Function Call (RFC)

RFCMit Hilfe von RFC werden Aufgaben eines bestehenden Systems an ein anderes System verlagert. Das andere System stellt die Funktion, die das bestehende System nutzen möchte zur Verfügung. Sowohl Client als auch Server können ein SAP-System sein. Es werden Funktionsbausteine innerhalb des R/3-Systems aufgerufen, wodurch der Datentransport in Fremdsysteme und SAP-Systeme möglich ist und somit die Daten in einer anderen Programmiersprache zu Verfügung zu haben. Um einen Funktionsbaustein aufrufen zu könne, muss dieser in der Funktionsbibliothek des SAP-Systems als RFC-fähig definiert sein.
Mit RFCs kann aus diversen Sprachen heraus kommuniziert werden, beispielsweise gibt es viele Anwendungen in C und VB. Ebenso ist die Verwendung von php möglich. Ermöglicht wird dies durch einen Open Source Project – SAPRFC. Es werden Klassen für php4 und php5 bereitgestellt. Zusätzlich kann ein RFC Server Programm geschrieben werden, dass dann vom R/3-System aufgerufen wird.

Business API (BAPI)

Unter BAPIs verstht man standardisierte Schnittstellen von SAP. Mit Hilfe dieser BAPIs kann man von externen Anwendungen auf das SAP-System zugreifen (siehe RFC). Ein BAPI ist ein Funktionsbaustein, der RFC-fähig ist und zusätzliche Eigenschaften mitbringt. Der Unterschied zwischen einem BAPI und einem Funktionsbaustein besteht darin, dass der Funktionsumfang fest definiert ist, das es definierte Input-/ Output-Parameter gibt, dass der Baustein in der Regel zustandslos ist, funktionsorientiert gestaltet und die Parameter sind über Versionswechsel hinweg konstant.

Java Connector

Der JCO erlaubt einen bidirektionalen Datenaustausch, insofern eine Java-Anwendung auf dem zu verbindenden System läuft.

Läuft in der anzubindenden Applikation kein Java, muss eine zusätzliche Kopplung zwischen der Applikation und dem JCO-Adapter auf SAP-Seite entwickelt werden. Ein zusätzlicher Prozess mit erheblichen Mehrkosten.
Aber selbst wenn die Applikation eine J2EE-Anwendung ist, dann gibt es Probleme. Der JCO wurde nicht explizit für J2EE entwickelt, deshalb müssen Entwickler gegen Vorgaben der Spezifikation des Enterprise Java Beans (EJBs) verstoßen. Beispielsweise erfordert der JCO statische Methoden. Alternativ könnte man einen J2EE-konformen Adapter einsetzen (z.B. Librados), welcher Intern einen JCO besitzt. (mehr Information und beispiele dazu gibt es im Artikel „Anbindung von SAP R/3 über die J2EE Connector-Architektur“)
Die Typüberprüfung findet erst zur Laufzeit statt, dadurch müssen alle Tests im Vorfeld stattfinden.

Allerdings muss man sagen, dass seit ERP-Lösung R/3 Version 4.7 eine weitere bessere Möglichkeit besteht. Ab dieser Version steht SAPs Web Application Server bereit, in der ABAP-Version. Dieser stellt eine Reihe von Diensten bereit, um das SAP-System zu koppeln. Nun können gängige Java-Methoden angewandt werden. Zum beispiel kann mit http oder SOAP gekoppelt werden.
Ab Version 6.20 des Web-AS gibt es einen JAVA-Web-AS. Auf diesem Server können Anwendungen nach J2EE-Standard laufen.

Business Connector (BC)

Gleich vorweg, der BC wird in Zukunft nicht mehr weiter entwickelt. Vorhandene Prozesse und Strukturen müssen auf die Exchange Infrastructure (XI) umstellen.

Der BC wurde entwickelt um externe Partner an das System anzubinden. Ein Mapping ist mit Hilfe von XML möglich. Neben der gängigen RFC-Schnittstelle werden htpp, ftp und smtp unterstützt. Die Architektur ist relativ einfach, wobei das Tool an sich sehr mächtig ist und dabei wenige Ressourcen benötigt. Die Anwendung ist Java-basierend und läuft als Webanwendung.

Exchange Infrastructure (XI)

xi nachrichtDie XI ist derzeit in der Version 3 auf dem Markt und soll die zentrale Schnittstelle im SAP werden. Ziel der XI ist es, als zentrale Plattform zur Verfügung zu stehen und verschiedene Schnittstellen über eine einheitliche Technologie zu verbinden.
Die Integrationslösung XI verarbeitet und überträgt Nachrichten. Die Nachricht wird als XI-konforme SOAP-Nachricht versandt. Die XI ermöglicht es, die zu verwendeten Daten in eine Form zu konvertieren, die das Zielsystem versteht. Über einen Adapter wird diese erzeugte Nachricht über einen Adapter an das Zielsystem übergeben. Auf diese Weise wird die Integration verschiedener Applikationen zentralisiert. Die Abhängigkeiten zwischen den Systemen sind klar erkennbar und können jederzeit verändert und gewartet werden.
Außerdem ist es möglich mit Hilfe der XI Geschäftsprozesse zu modellieren, grafisch. Andere Systeme werden damit über die SOAP-Nachricht integriert.

Ein Vorteil ist das Monitoring der XI. Kommt es beispielsweise zu Fehlern bei der Übertragung, versucht der Integration Broker die Nachricht noch einmal zu versenden. Messages können durch den User manuell editiert werden.
Kann eine Nachricht nicht zugestellt werden, so wird eine Fehlernachricht erstellt mit der die Quelle reagieren kann. Im Weiteren steht mit der XI eine Technologie bereit, sie die Prozesse mit Hilfe von Standards definiert und offene Schnittstellen ermöglicht bei großer Modularität.

Die Reaktion der Quelle ist nicht unproblematisch und führt ist zu Problemen.
Der Ressourcenbedarf der XI ist relativ hoch und nicht so performant wie der Business Connnector. Da die XI relativ neu ist, ist ausschließlich ein Unicode-System verfügbar, auch dies führt zu Problemen mit älteren Hardwaresystemen. Die XI benötigt also eine leistungsstarke Hardware und eine große Datenbank.

Standard
VBA

VBA – SAP Nummernformat per Button in Excel

Screenshot SAP-Nr in ExcelWer viel mit SAP arbeitet, und diverse Materialnummern ausleitet, muss viel mit Excel arbeiten. Da im R/3 die Materialnummern nicht immer im vorgeschriebenen Format ausgegeben werden, müssen die im Nachhinein für die weiteren Abläufe neu formatiert werden, dass kostet Zeit und Nerven. Mit dem kleinen XLA, welches ich hier bereit stelle, werden all markierten Bereiche auf Numerisch geprüft und falls diese Prüfung true ist, werden die Bereiche als SAP-Nummer (000000-0000-000) formatiert.
Diese Anwendung muss man natürlich nicht nur für SP nutzen. Die Abfrage des markierten Bereiches kann man auch in anderen Anwendungen gebrauchen.

Installation des XLA:

  1. Das XLA in euren AddIns-Ordner kopieren (Documents and Settings\USER\Application Data\Microsoft\AddIns)
  2. Das icon unter c:\icons\ ablegen
  3. MS Excel starten
  4. Menu: Extras –> AddIns
  5. SAP-Nr auswählen
  6. Nun gibt es in der Format-Leiste einen neuen Button „SAP“, Bereich mit Zahlen etc. markieren und Button clicken

Download:

Download als ZIP-Datei: SAPNr.zip – 2 KByte

VBA-Code:

VBA in der Arbeitsmappe:


Option Explicit

Private Sub Workbook_Open()
    Symbolleiste_erweitern
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Symbol_Loeschen
End Sub

VBA im Modul:


Option Explicit
Dim CB As Object, picPath, myPic
Const SAP = "SAP-Nr"

Sub Symbolleiste_erweitern()
    Symbol_Loeschen
    picPath = "c:\icons\"
    Set myPic = stdole.StdFunctions.LoadPicture(picPath & "sap.jpg")
    Set CB = Application.CommandBars("Formatting").Controls.Add(msoControlButton)
    With CB
        .Caption = SAP
        .Picture = myPic
        ' .FaceId = 66
        .OnAction = "Wandeln"
        .Visible = True
    End With
End Sub

Sub Symbol_Loeschen()
    On Error Resume Next
    Application.CommandBars("Formatting").Controls(SAP).Delete
    On Error GoTo 0
End Sub

Sub Wandeln()
Dim Z, S, c As Object
    'Z = ActiveCell.Row
    'S = ActiveCell.Column
    For Each c In Selection
        c.Value = Format(c.Value, "000000-0000-000")
    Next c
End Sub
Standard