SAP On-premise

Setup SM59 Connection

  1. Login into Renda developer portal

  2. Subscribe to HTML->PDF service

  3. Copy API Service URL to notepad

  4. Go to transaction SM59

    1. Create a new HTTP Connection to External Server - Type G

    2. Key in RENDA.IO in RFC Destination field

    3. Enter description as Renda.io connection for HTML transformation

    4. Under Technical Settings tab - Paste region specific API Service URL(from

    5. Enter Service No. as 443

    6. 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) TYPE  STRING
*"     VALUE(IM_HTML) TYPE  STRING
*"     VALUE(IM_ENCRYPTION_KEY) TYPE  STRING OPTIONAL
*"     VALUE(IM_LANDSCAPE) TYPE  STRING OPTIONAL
*"     VALUE(IM_FORMAT) TYPE  STRING OPTIONAL
*"     VALUE(IM_MARGIN_TOP) TYPE  STRING OPTIONAL
*"     VALUE(IM_MARGIN_RIGHT) TYPE  STRING OPTIONAL
*"     VALUE(IM_MARGIN_BOTTOM) TYPE  STRING OPTIONAL
*"     VALUE(IM_MARGIN_LEFT) TYPE  STRING OPTIONAL
*"  EXPORTING
*"     VALUE(EX_SUBRC) TYPE  SYSUBRC
*"     VALUE(EX_MESS) TYPE  STRING
*"     VALUE(EX_PDF) TYPE  XSTRING
*"----------------------------------------------------------------------
*
  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   " 15 Seconds
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2.
*
  IF sy-subrc IS NOT INITIAL.
*
    ex_mess = 'HTTP Post error. Process aborted'.
    ex_subrc = 4.
*
    CALL METHOD lo_http_client->close
      EXCEPTIONS
        http_invalid_state = 1
        OTHERS             = 2.
*
    FREE lo_http_client.
    RETURN.
*
  ENDIF.
*
* Read the Response
*
  CALL METHOD lo_http_client->receive
    EXCEPTIONS
      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' OF STRUCTURE <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.
*
  CALL METHOD lo_http_client->close
    EXCEPTIONS
      http_invalid_state = 1
      OTHERS             = 2.
*
  FREE lo_http_client.
*
ENDFUNCTION.

Last updated