SAP MII : REST Service #2

von Sebastian Holzschuh

Im zweiten der - längst überfälligen Teil - Runner-Saga geht es darum, wie ein entsprechender Aufruf einer SAP MII Transaktion aus JavaScript heraus realisiert werden kann.

Runner-Aufrufe sind (anders als Webservice Aufrufe) lediglich direkte Aufrufe der Business Logiken und wie folgt aufgebaut:
http://server:port/XMII/Runner?Transaction=path/to/transaction&OutputParameter=value1&Input1=value2&Input2=value3
Die URL inklusive der GET Parameter kann genutzt werden, um Transaktionen direkt anzusteuern und Parameter zu übergeben. Die Verbindung mit SAP MII entsteht hierbei durch einen einfachen ajax Funktionsaufruf:
function callMII( myURL, myCallback ) 
{ 
    $.ajax( 
    { 
        url: myURL, 
        dataType: "xml", 
        success:    function( data )
                    { 
                        eval( myCallback + '( data )' ); 
                    } 
    }
    ); 
};
Die Callback Funktionalität ermöglicht es an dieser Stelle spezifische Funktionen zu definieren, welche das Ergebnis der Abfrage zurückliefern. Wichtig bei der Definition der URL ist der OutputParameter, welcher das eigentliche Ergebnis der Transaktion erhält. Wird kein solcher Parameter spezifiziert, besteht die Transaktionsrückmeldung lediglich aus den Statusdaten, wie sie von SAP MII zurückgegeben werden. Als Rückgabeparamter empfiehlt sich die Nutzung einer einheitlichen Struktur, welche zumindest in ihrer Basis immer den gleichen Aufbau hat:
<xml_output>
    <success>0</success>
    <message>default message text</message>
    <data/>
</xml_output>
Der Ausgabeparameter vom Typ xml liefert damit eine verlässliche Struktur über die geprüft werden kann, ob eine Transaktion erfolgreich abgeschlossen wurde (Node <success>). Hier sollte entweder zwischen 1 / 0 unterschieden werden (1=SUCCESS / 0=ERROR) oder die Rückmeldungen angelehnt an die SAP RETURNCODES aus dem SAP ERP verarbeitet werden. Die Verarbeitungslogik in der Callback Logik kann demnach direkt aussteuern, ob ein Aufruf erfolgreich war oder nicht. Dies kann wie folgt geschehen:
function callbackFunction( MIIResponse ) 
{
    var SuccessfullRun = MIIResponse.getElementsByTagName( 'success' )[0].firstChild.nodeValue;
    if( SuccessfullRun == 0 ) 
    {
        alert( MIIResponse.getElementsByTagName( 'message' )[0].firstChild.nodeValue );
        return;
    }

    // Verarbeitungslogik bei erfolgreichem MII Aufruf

}
In dieser Ausführung wird im Fehlerfall direkt der Text aus der Node ausgegeben, sodass der Benutzer am Frontend einen entsprechenden Hinweis erhält. Die Verarbeitung der von SAP MII zurückgegeben Daten erfolgt dann gemäß der Standard-Funktionalität in JavaScript.