Ziel: Eine Bestandsübersicht zu einem Material anzeigen

Ein Mitarbeiter im Aussendienst wird nicht selten unterwegs einen verzögerungsfreien Blick auf die aktuellen Bestände eines Materials werfen müssen. In diesem Beispiel werden wir diese Möglichkeit dem CIS mobile hinzufügen.


Mit dem SAP GUI: Der aktuelle Bestand von Material P-103




Mit CIS mobile: Der aktuelle Bestand von Material P-103

 

Schritt 1: Platzhalter für Addons anzeigen

Aktivieren Sie in den Einstellungen die Testausgabe (Platzhalter) für Addons und navigieren Sie anschließend an die Stelle in CIS mobile, an der später Zusatzinformationen angezeigt werden sollen. In diesem Beispiel soll der Platzhalter "MaterialsButton2" ersetzt werden durch die Möglichkeit für den Benutzer, eine Liste der Bestände aufzuklappen. Die Methode, die in VB.net zu implementieren ist, muss daher "BuildMaterialButtons2" heißen.

Hinweis: Dieser Schritt erfolgt analog Schritt 1 in Beispiel 3, da wir an dieser Stelle zwei zusätzliche Buttons einfügen: Einer für die Lagerbestände und ein weiterer für die Reklamationen.



Testausgabe aktivieren, um Platzhalter für Addons anzuzeigen




Mögliche Stellen für das Addon


Schritt 2: Schlüssel für die Abfrage prüfen

Klicken Sie auf einen der farbigen Platzhalter, um alle an dieser Stelle verfügbaren Schlüssel und deren aktuelle Werte anzuzeigen. Wir benötigen für die Abfrage aus dem SAP-System die Materialnummer (MATNR).


Verfügbare Schlüssel und deren aktuelle Werte zu einem Material
Schritt 3: ABAP-Funktion implementieren

In diesem Beispiel werden die benötigten Daten aus dem SAP-System durch einen RFC-Aufruf einer selbst implementierten ABAP-Funktion angefordert. Sie finden diese im Funktionsbaustein CISADDON_INTERFACE (Transaktion SE37).

ABAP
* Stock quantities for each plant
*
* In
* 1 MATNR Material number
*
* Out
*  Stock quantities

form MaterialStock tables reqparm resparm   _
    changing   rc type c   msg type c.

Schritt 4: Methode in VB.net implementieren

Die Methode in VB.net gliedert sich wieder in zwei Teile: Die Datenbeschaffung aus dem SAP-System und die anschließende Aufbereitung in Form einer HTML-Tabelle. Der nachfolgende Codeausschnitt weist noch einige Besonderheiten auf:

- wird bei dem RfcRequest der Parameter "deferred" auf true gesetzt, so wird der Aufruf noch nicht sofort ausgeführt sondern erst, wenn RfcExecuteDeferredCalls aufgerufen wird. So können mehrere requests gesammelt und dann gemeinsam abgeschickt und abgearbeitet werden, was in der Regel in der Summe schneller vonstatten geht.

- Meldungen vom SAP-System (z.B. Fehlermeldungen wegen fehlender Berechtigung) werden an CIS mobile weitergereicht und sind im folder rfcmessages verfügbar

- Eine Berechtigungsprüfung muss entweder in der VB.net Methode, oder in der ABAP Funktion durchgeführt werden (Details dazu finden Sie unter der Rubrik "SAP Berechtigungen").

VB.net
    ' Stock overview 
    Public Function BuildMaterialStock(ByVal keys _
    As Dictionary(Of String, String), ByRef buttons As String) As String

        ' We use CIS addon ABAP function to read the stock quantities

        ' Clear input/output
        rfc_input.Clear()
        rfc_output.Clear()

        ' Build up input
        Dim s As addonsimplestring = _
             DirectCast(rfc_input.AddNew(), addonsimplestring)
        s.content = GetItem(keys, "MATNR")

        ' Request data
        ic.RfcRequest("CISADDON.MATERIALSTOCK", "S", _
               rfc_input, rfc_output, deferred:=True)

        ' execute all requests (one only in our case)
        ic.RfcExecuteDeferredCalls(rfcmessages)

        ' Buld up HTML output table
        Dim sb As New StringBuilder

        For Each line As addonsimplestring In rfc_output

            Dim fields() As String = line.content.Split(vbTab)

            Dim werks As String = fields(0)
            Dim wname As String = fields(1)

            ' werks
            sb.Append("<div  style='float:left; text-align:left; width:80px;'>")
            sb.Append(werks)
            sb.Append("</div>")

        Next

        If rfc_output.Count = 0 Then
            ' no stock
            sb.Append("<br><i>" & ic.MessageText("NO_STOCK") & "</i>")
        End If

        ' RFCmessages (no authorization etc.)
        If rfcmessages.Count > 0 Then
            For Each rfcmsg As addonrfcmsg In rfcmessages
                sb.Append("<br><i>" & rfcmsg.msg & "</i>")
            Next
        End If

        Return sb.ToString

    End Function