SAP Ariba Schnittstellen

In diesem Beitrag möchte ich dir zeigen, wie du SAP Ariba Schnittstellen ansprechen kannst. Durch die Schnittstellen kannst du Daten systematisch konsumieren und weiterverarbeiten. Dies ist zum Beispiel wichtig, wenn du Analysetools besitzt, die Daten massenhaft auswerten, um Optimierungspotentiale aufzudecken. Zum Beispiel kannst du das High Performance Analysetool für den Einkauf der Firma SCALUE mit den Daten von SAP Ariba bedienen und so deine Einkaufsprozesse optimal auswerten.

Falls du nur zufällig hier gelandet bist und wissen möchtest, was SAP Ariba überhaupt kann, dann schau doch nochmal hier vorbei:

https://developers4sap.blog/sap-ariba-ein-kurzer-ueberblick/

Als erstes möchte ich dir einmal allgemein zeigen, wie du dich über die SAP Ariba Schnittstellen informieren kannst.

SAP API Business Hub

Im SAP API Business Hub findest du allerhand Schnittstellenbeschreibungen zu den wichtigsten SAP Tools. Dazu gehört natürlich auch SAP Ariba. Um zu diesen Schnittstellen zu gelangen gehst du auf das SAP API Business Hub und navigierst zu SAP Ariba. Nun musst du nur noch auf die Kachel „SAP Ariba APIs“ klicken und schon kannst du dir sämtliche Schnittstellen angucken, die SAP Ariba zur Verfügung stellt.

Alternativ kannst du natürlich auch direkt mit folgendem Link zu den SAP Ariba Schnittstellen gelangen:

https://api.sap.com/package/SAPAribaOpenAPIs?section=Artifacts

Nun findest du natürlich eine ganze Menge an verschiedenen Schnittstellen, in denen du dich erstmal zurecht finden musst. Zumeist ist die Bezeichnung der jeweiligen Schnittstelle jedoch recht eindeutig. Möchtest du zum Beispiel die Belegdaten (wie BANFen, Bestellungen, Invoices, etc.) konsumieren, so gibt es dafür die Schnittstellen mit dem Namen Operational Reporting for Procurement.

Genau an diesen Schnittstellen möchte ich dir im folgenden exemplarisch zeigen, wie SAP Ariba Schnittstellen zu handhaben sind.

Umgang mit SAP Ariba Schnittstellen

Für das Operational Reporting for Procurement gibt es zwei Arten von Schnittstellen: die synchrone und die asynchrone Schnittstelle. Die synchrone ist deutlich einfacher zu bedienen, kann dafür aber deutlich weniger Datensätze übertragen als die asynchrone. Die asynchrone eignet sich also besonders für Massenverarbeitungen. Um zu zeigen, wie mit den Schnittstellen generell umgegangen wird, nehme ich im folgenden jedoch die synchrone Schnittstelle als Beispiel.

Die Schnittstellen von SAP Ariba können verschiedene Methoden haben, die jeweils im SAP API Business Hub beschrieben werden. Die Beschreibung dieser Methoden sieht immer recht ähnlich aus. Unser Beispiel hat nur eine und zwar eine GET-Methode zum reinen Auslesen der Daten. In folgender Abbildung kannst du sehen, wie diese Methode beschrieben ist.

Es gibt immer drei wichtige Bereiche in der Beschreibung einer Methode einer Schnittstelle:

  1. Parameter – hier stehen alle wichtige Eingaben, mit der die Schnittstelle bedient werden muss/kann
  2. Responses – hier stehen Beispiele der erwarteten Antworten der Schnittstelle. Die Antworten erfolgen typischerweise immer im json-Format
  3. Code Snippet – hier findest du den Code zur Nutzung der Schnittstellen in verschiedenen Sprachen (Java, ABAP, UI5, etc.)

Im folgenden findest du ein Beispiel, wie du aus dem ABAP heraus die Schnittstelle ansprechen kannst:

TRY. 
DATA: lo_http_client TYPE REF TO if_http_client.
DATA: response TYPE string.

*create HTTP client by url
CALL METHOD cl_http_client=>create_by_url
  EXPORTING
    url                = 'https://sandbox.api.sap.com/ariba/api/procurement-reporting-details/v2/sandbox/views/{viewTemplateName}?realm=string&filters=string'
  IMPORTING
    client             = lo_http_client
  EXCEPTIONS
    argument_not_found = 1
    plugin_not_active  = 2
    internal_error     = 3
    OTHERS             = 4.

IF sy-subrc <> 0.
*error handling
ENDIF.

*setting request method
lo_http_client->request->set_method('GET').

*adding headers
lo_http_client->request->set_header_field( name = 'Accept' value = 'application/json' ).
lo_http_client->request->set_header_field( name = 'APIKey' value = '' ).
lo_http_client->request->set_header_field( name = 'Authorization' value = '').

CALL METHOD lo_http_client->send
  EXCEPTIONS
    http_communication_failure = 1
    http_invalid_state         = 2
    http_processing_failed     = 3
    http_invalid_timeout       = 4
    OTHERS                     = 5.

IF sy-subrc = 0.
  CALL METHOD lo_http_client->receive
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2
      http_processing_failed     = 3
      OTHERS                     = 5.
ENDIF.

IF sy-subrc <> 0.
*error handling
ENDIF.

response = lo_http_client->response->get_cdata( ).

Zum Ansprechen der Schnittstelle brauchst du also nur diesen Code, den du nur noch mit den angesprochenen Parametern ergänzen musst. Die URL setzt sich dann folgendermaßen zusammen:

Du benötigst also die URL deiner SAP Ariba Umgebung, den Realm deiner SAP Ariba Umgebung und ein Template. Ein Template ist eine Maske, über die der Schnittstelle gesagt wird, welche Daten ausgelesen werden sollen. Es gibt Standardtemplates für jede Art von Dokument (wie BANFen, Bestellungen, Invoices, etc.). Du kannst aber über eine andere API auch selbst Templates definieren. Schau dir das doch einfach selbst einmal hier an. Außerdem kannst du über Filter noch deine Datenabfrage steuern. Des Weiteren benötigst du noch einen APIKey. Den APIKey bekommst du, indem du die Schnittstelle über das API-Management deiner SAP Ariba Umgebung anmeldest. Zuletzt brauchst du noch für jede Schnittstellenkommunikation eine Authorization. Die Authorization setzt sich aus dem String „Bearer “ und einem Token zusammen.

Token generieren

Im folgendem Code-Beispiel kannst du sehen, wie du einen Token generieren kannst:

DATA lv_token TYPE string.

    TRY.
*create http destination by url
        DATA(lo_http_destination) =
             cl_http_destination_provider=>create_by_url( 'https://api.ariba.com/v2/oauth/token' ).

*create HTTP client by destination
        DATA(lo_web_http_client) = cl_web_http_client_manager=>create_by_http_destination( lo_http_destination ) .

*adding headers
        DATA(lo_web_http_request) = lo_web_http_client->get_http_request( ).
        lo_web_http_request->set_header_fields( VALUE #(
        (  name = 'Authorization' value = '' )
        (  name = 'Content-Type' value = 'application/x-www-form-urlencoded' )
         ) ).

*adding body form fields
        lo_web_http_request->set_form_field(
          EXPORTING
            i_name  = 'grant_type'
            i_value = 'client_credentials'
*          RECEIVING
*            r_value =
        ).
*        CATCH cx_web_message_error.

        DATA(lo_web_http_response) = lo_web_http_client->execute( if_web_http_client=>post ).
        DATA(lv_response) = lo_web_http_response->get_text( ).

*access token 
        lv_token = lv_response+17(36).
        ev_token = lv_token.

      CATCH cx_http_dest_provider_error cx_web_http_client_error cx_web_message_error.
        ev_token = 'Token konnte nicht abgerufen werden.'.
    ENDTRY.

Du musst lediglich den Wert für die Authorization ergänzen. Die Authorization setzt sich aus dem String „Basic “ und einem Base64 Encoded Secret zusammen. Das Base64 Encoded Secret bekommst du an selbiger Stelle mitgeteilt, wenn du auch deinen APIKey über das API-Management bekommst.

Schluss

Du solltest nun alle Werkzeuge in der Hand haben, um SAP Ariba Schnittstellen ansprechen zu können. Natürlich braucht jede Schnittstelle unterschiedliche Parameter und gibt unterschiedliche Antworten. Aber du kannst dich immer an unserem Operational Reporting for Procurement Beispiel orientieren und kommst dann bestimmt ans Ziel.

Solltest du noch Fragen zu SAP Ariba oder der zugehörigen Schnittstellen haben, dann nutze doch gerne die Kommentarfunktion oder schreibe mir direkt per Mail (paul.holst@cgi.com).

Über den Autor

Paul Holst

Liebe SAP'ler, Ich bin Paul, studierter Wirtschaftsingenieur und arbeite bei CGI als SAP-Consultant. Falls ihr irgendwelche Fragen oder Anregungen habt, dann freue ich mich über eure Kommentare. :-)

Kommentar verfassen