Create a new HTTP Connection to External Server - Type G
Key in RENDA.IO in RFC Destination field
Enter description as Renda.io connection for HTML transformation
Under Technical Settings tab - Paste region specific API Service URL(from
Enter Service No. as 443
Test Connection
You should receive a HTTP 200 success code if everything is setup successfully.
Please remember to whitelist API Service URL from within your corporate firewall. This will enable outbound calls to be made from your SAP system to Renda engine in the cloud.
Invoking REST API
The following code demonstrates how Renda can be invoked from ABAP function to convert HTML output to PDF document
FUNCTION zgenerate_pdf.*"----------------------------------------------------------------------*"*"Local Interface:*"IMPORTING*" VALUE(IM_RFCDEST) TYPE RFCDEST*"VALUE(IM_API_KEY)TYPESTRING*" VALUE(IM_HTML) TYPE STRING*"VALUE(IM_ENCRYPTION_KEY)TYPESTRINGOPTIONAL*" VALUE(IM_LANDSCAPE) TYPE STRING OPTIONAL*"VALUE(IM_FORMAT)TYPESTRINGOPTIONAL*" VALUE(IM_MARGIN_TOP) TYPE STRING OPTIONAL*"VALUE(IM_MARGIN_RIGHT)TYPESTRINGOPTIONAL*" VALUE(IM_MARGIN_BOTTOM) TYPE STRING OPTIONAL*"VALUE(IM_MARGIN_LEFT)TYPESTRINGOPTIONAL*" EXPORTING*"VALUE(EX_SUBRC)TYPESYSUBRC*" VALUE(EX_MESS) TYPE STRING*"VALUE(EX_PDF)TYPEXSTRING*"----------------------------------------------------------------------* DATA: lo_http_client TYPE REF TO if_http_client, lv_http_rc TYPE i, lv_response TYPE string, lv_json TYPE /ui2/cl_json=>json, lr_data TYPE REF TO data.* FIELD-SYMBOLS: <data> TYPE data, <field> TYPE any.** Setup IF_HTTP_Client object* CALL METHOD cl_http_client=>create_by_destination EXPORTING destination = im_rfcdest IMPORTING client = lo_http_client EXCEPTIONS argument_not_found = 1 plugin_not_active = 2 internal_error = 3 OTHERS = 4.* IF sy-subrc IS NOT INITIAL. ex_mess = 'Error creating new IF_HTTP_Client object. Process aborted.'. ex_subrc = 4. RETURN. ENDIF.** Set protocol version* lo_http_client->request->set_version( if_http_request=>co_protocol_version_1_1 ).** Set request header fields* lo_http_client->request->set_header_field( name = 'Accept' value = 'application/pdf' ).* lo_http_client->request->set_header_field( name = 'Content-Type' value = 'application/x-www-form-urlencoded' ).* lo_http_client->request->set_header_field( name = 'x-api-key' value = im_api_key ).** Set form fields/attributes* lo_http_client->request->if_http_entity~set_form_field( name = 'inputPayload' value = im_html ).* IF im_encryption_key IS NOT INITIAL.* lo_http_client->request->if_http_entity~set_form_field( name = 'encryptionKey' value = im_encryption_key ).* ENDIF.* IF im_landscape IS NOT INITIAL.* lo_http_client->request->if_http_entity~set_form_field( name = 'landscape' value = im_landscape ).* ENDIF.* IF im_format IS NOT INITIAL.* lo_http_client->request->if_http_entity~set_form_field( name = 'format' value = im_format ).* ENDIF.* IF im_margin_top IS NOT INITIAL.* lo_http_client->request->if_http_entity~set_form_field( name = 'marginTop' value = im_margin_top ).* ENDIF.* IF im_margin_right IS NOT INITIAL.* lo_http_client->request->if_http_entity~set_form_field( name = 'marginRight' value = im_margin_right ).* ENDIF.* IF im_margin_bottom IS NOT INITIAL.* lo_http_client->request->if_http_entity~set_form_field( name = 'marginBottom' value = im_margin_bottom ).* ENDIF.* IF im_margin_left IS NOT INITIAL.* lo_http_client->request->if_http_entity~set_form_field( name = 'marginLeft' value = im_margin_left ).* ENDIF.* lo_http_client->request->set_method( 'POST' ).* lo_http_client->propertytype_logon_popup = lo_http_client->co_disabled.** Send request* CALL METHOD lo_http_client->send EXPORTING timeout = 60 "15SecondsEXCEPTIONS http_communication_failure =1 http_invalid_state =2.*IF sy-subrc ISNOT INITIAL.* ex_mess ='HTTP Post error. Process aborted'. ex_subrc =4.*CALLMETHOD lo_http_client->closeEXCEPTIONS http_invalid_state =1 OTHERS =2.*FREE lo_http_client. RETURN.* ENDIF.**Read the Response*CALLMETHOD lo_http_client->receiveEXCEPTIONS http_communication_failure =1 http_invalid_state =2 http_processing_failed =3.* lo_http_client->response->get_status( IMPORTING code = lv_http_rc ). lo_http_client->response->get_status( IMPORTING reason = ex_mess ). lv_response = lo_http_client->response->get_cdata( ).*IF lv_http_rc NE '200'.**Get error message back from Renda* ex_subrc =4. lv_json = lv_response. lr_data =/ui2/cl_json=>generate( json = lv_json ).*IF lr_data IS BOUND.ASSIGN lr_data->*TO<data>.ASSIGN COMPONENT 'MESSAGE'OFSTRUCTURE<data>TO<field>.IF<field>IS ASSIGNED. lr_data =<field>.ASSIGN lr_data->*TO<data>. ex_mess =<data>. ENDIF. ENDIF.* ELSE.* ex_pdf = lo_http_client->response->get_data( ).* ENDIF.*CALLMETHOD lo_http_client->closeEXCEPTIONS http_invalid_state =1 OTHERS =2.*FREE lo_http_client.*ENDFUNCTION.