This is a test message to test the length of the message box.
Login
ABAP Quick POST Request
Created by Software-Heroes

ABAP Quick - Create POST Request

How can you easily create a POST request on a domain and process the result? We'll show you how the REST connection works very easily.

Advertising

The execution of POST requests is normally not required when working in a SAP system, since numerous other and more secure options are available for interfaces. The following code should serve you only for practicing and trying out new possible ways to work.

 

Core classes

For the core of the call we use the following three standard classes of SAP. With these you can make the most important calls and accept the result of the request again:

  • CL_HTTP_CLIENT
  • CL_HTTP_REQUEST
  • CL_HTTP_RESPONSE
     

 

Execution

For the request, you first need the client to whom we already pass the call URL. By inline declaration, we can create the client directly in the report upon return.


" Create client
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 ).

 

The next step is to supply the parameters of the URL. In the case of the preview API with the method to be executed and a data packet containing the test data. We also set the method to POST to generate a POST request for the API. Once all the data has been supplied, you can send the request via the client and the destination URL is called.


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

" Prepare request
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 ).

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

 

After the request, the result should be read. Through the response instance, the data can be read in character form, the data is readable and not in binary form.


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

" Catch data
DATA(ld_stream) = lo_client->response->get_cdata( ).

 

At the end of processing, the client's connection must be closed and completed. However, other requests can also be sent to the URL if further communication is necessary.


" Close connection
lo_client->close( ).

 

Full Example

Here is the full example from above. Maybe you will run in some trouble calling the REST endpoint, because of your systems setting or handshake problems. Here you can play around with other examples from the web.

" Create client
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 ).

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

" Prepare request
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 ).

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

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

" Catch data
DATA(ld_stream) = lo_client->response->get_cdata( ).

" Close connection
lo_client->close( ).

 

Conclusion

After the request has been returned, the result must be processed as JSON or XML so that the report can process the data further. When calling our interface, the result is returned as JSON. How to convert a JSON string into a correct format in SAP, we will show you in another quick tip.


Included topics:
QuickPOST Request
Comments (2)
Advertising

ABAP Quick - Creation of test data

Category - ABAP

What challenges do you have when setting up test tables and test data and how can machine processing help you?

06/25/2021

ABAP Unit Quick Guide

Category - ABAP

Our current e-book is now available on Amazon, we would like to briefly show you what you can expect in the book and what it will bring you in the end.

05/28/2021

ABAP Quick - RFC Buffer

Category - ABAP

Here is a little tip from us about what can go wrong with the buffer when reading via RFC and what you should definitely pay attention to.

04/23/2021

ABAP Quick - Wait for task

Category - ABAP

Today a tip for asynchronous processing or if you want to put processing in a separate task in special situations. What happens afterwards?

03/05/2021

ABAP Quick - Performance INSERT vs VALUE

Category - ABAP

In this article we take a look at the performance of the insert operations APPEND, INSERT and VALUE with regard to tables and evaluate the performance and stability during development.

02/26/2021