This is a test message to test the length of the message box.
Login
ABAP Tipp POST Request
Erstellt von Software-Heroes

ABAP Tipp - POST Request erzeugen

Wie kannst du ganz leicht einen POST Request auf eine Domain absetzen und das Ergebnis verarbeiten? Wir zeigen dir wie die REST Anbindung ganz leicht funktioniert.

Werbung

Die Durchführung von POST Requests wird normalerweise bei der Ausführung in einem SAP System nicht benötigt, da für die Anbindung von Schnittstellen zahlreiche andere und sicherere Möglichkeiten zur Verfügung stehen. Der folgende Code sollte dir lediglich zum Üben und Ausprobieren dienen.

 

Kernbestandteil

Für den Kern des Aufrufs verwenden wir die folgenden drei Standardklassen von SAP. Mit diesen kannst du die wichtigsten Aufrufe durchführen und das Ergebnis der Anfrage wieder entgegen nehmen:

  • CL_HTTP_CLIENT
  • CL_HTTP_REQUEST
  • CL_HTTP_RESPONSE
     

 

Durchführung

Für die Anfrage benötigst du zuerst den Client, dem wir schon einmal die Aufruf-URL übergeben. Per Inline-Deklaration können wir den Client direkt bei Rückgabe im Report anlegen.


" Client erzeugen
cl_http_client=>create_by_url(
  EXPORTING
    url                = 'http://software-heroes.com/api/core'
  IMPORTING
    client             = DATA(lo_client)
  EXCEPTIONS
    argument_not_found = 1
    plugin_not_active  = 2
    internal_error     = 3
    OTHERS             = 4 ).

 

Als nächsten Schritt musst du die Parameter der URL versorgen. In dem Fall der Vorschau API mit der Methode die ausgeführt werden soll und einem Datenpaket welches die Testdaten enthält. Ebenfalls setzen wir die Methode auf POST, damit auch ein POST Request für die API erzeugt wird. Sind alle Daten versorgt, kannst du über den Client den Send absetzen und die Ziel-URL wird aufgerufen.


" Datenpaket
DATA(ld_data) = CONV string( '{"id_head":"Kopfzeile","id_short":"Kurz","id_article":"Ein Text"}' ).

" Request vorbereiten
lo_client->request->set_method( if_http_request=>co_request_method_post ).
lo_client->request->set_form_field( name = 'meth' value = 'GEN_PREVIEW' ).
lo_client->request->set_form_field( name = 'data' value = ld_data ).

" Request senden
lo_client->send(
  EXCEPTIONS
    http_communication_failure = 1
    http_invalid_state         = 2
    http_processing_failed     = 3
    OTHERS                     = 4 ).

 

Nach der Anfrage sollte das Ergebnis eingelesen werden. Über die Antwort Instanz können die Daten in Character Form eingelesen werden, die Daten sind dann Lesbar und nicht in binärer Form.


" Ergebnis aufnehmen
lo_client->receive(
  EXCEPTIONS
    http_communication_failure = 1
    http_invalid_state         = 2
    http_processing_failed     = 3
    OTHERS                     = 4 ).

" Daten abholen
DATA(ld_stream) = lo_client->response->get_cdata( ).

 

Zum Abschluss der Verarbeitung muss die Verbindung des Client geschlossen werden und ist damit abgeschlossen. Es können aber ebenso weitere Anfragen an die URL geschickt werden, wenn weitere Kommunikation nötig ist.


" Verbindung schließen
lo_client->close( ).

Komplettes Beispiel

Hier ist das vollständige Beispiel, von dem oberen Teil. Vielleicht wirst du Probleme haben unseren Endpunkt aufzurufen, weil die System Einstellungen nicht passen oder der Handshake mit dem Backend nicht funktioniert. Hier gibt es auch jede Menge freie REST Endpunkte zum Probieren, wie hier zum Beispiel.

" Client erzeugen
cl_http_client=>create_by_url(
  EXPORTING
    url                = 'http://software-heroes.com/api/core'
  IMPORTING
    client             = DATA(lo_client)
  EXCEPTIONS
    argument_not_found = 1
    plugin_not_active  = 2
    internal_error     = 3
    OTHERS             = 4 ).

" Datenpaket
DATA(ld_data) = CONV string( '{"id_head":"Kopfzeile","id_short":"Kurz","id_article":"Ein Text"}' ).

" Request vorbereiten
lo_client->request->set_method( if_http_request=>co_request_method_post ).
lo_client->request->set_form_field( name = 'meth' value = 'GEN_PREVIEW' ).
lo_client->request->set_form_field( name = 'data' value = ld_data ).

" Request senden
lo_client->send(
  EXCEPTIONS
    http_communication_failure = 1
    http_invalid_state         = 2
    http_processing_failed     = 3
    OTHERS                     = 4 ).

" Ergebnis aufnehmen
lo_client->receive(
  EXCEPTIONS
    http_communication_failure = 1
    http_invalid_state         = 2
    http_processing_failed     = 3
    OTHERS                     = 4 ).

" Daten abholen
DATA(ld_stream) = lo_client->response->get_cdata( ).

" Verbindung schließen
lo_client->close( ).

 

Fazit

Nach Rückgabe der Anfrage muss das Ergebnis noch entsprechend als JSON oder XML aufbereitet werden, damit der Report die Daten weiter verarbeiten kann. Beim Aufruf unserer Schnittstelle wird das Ergebnis als JSON zurückgegeben. Wie man in SAP einen JSON String in ein richtiges Format überführt, werden wir dir in einem anderen Tipp zeigen.


Enthaltene Themen:
TippPOST Request
Kommentare (0)
Werbung

ABAP Tipp - Verarbeitung in neuem Task

Kategorie - ABAP

In diesem Tipp geht es um die asynchrone Verarbeitung in einem neuen Prozess und auf was du dabei achten solltest.

07.01.2022

ABAP Tipp - Konvertierung JSON nach Intern

Kategorie - ABAP

In diesem kleinen Tipp gehen wir darauf ein, wie du einen JSON Stream in ein internes Format konvertierst und dann ordentlich verwenden kannst.

10.12.2021

ABAP Tipp - Externe Währung nach Intern

Kategorie - ABAP

Ein kleiner Tipp um Daten aus einer Excel oder CSV-Datei in das korrekte interne Währungsformat zu konvertieren. Eine einfach Konvertierung kann schnell zu Fehlern führen.

03.12.2021

ABAP Unit - Tipps

Kategorie - ABAP

Zum Abschluss der Serie noch ein paar Tipps die wir dir mit auf den Weg geben wollen. Hier geht es um Shortcuts und allgemeine Hinweise zu den Tests.

12.11.2021

ABAP Tipp - Aufbau von Testdaten

Kategorie - ABAP

Welche Herausforderungen hat man beim Aufbau von Testtabellen und Testdaten und wie kann dir die maschinelle Verarbeitung dabei helfen.

25.06.2021