download_payload_file

in src/zrest/zcl_rest_utility_class.clas.abap [0:0]


  METHOD download_payload_file.

    TYPES : BEGIN OF ty_string,
              line TYPE string,
            END OF ty_string.

    DATA : wa_payload TYPE zrest_mo_payload,
           wa_string  TYPE ty_string,
           it_string  TYPE STANDARD TABLE OF ty_string,
           output     TYPE xstring.

*   Check if user has the authority to call.
*   Begin of changes for VSTF# 2163894 | DGDK903413
*    TRY.
*        check_authority( ).
*      CATCH zcx_http_client_failed INTO DATA(lv_textid).
*        DATA(lv_text2) = lv_textid->if_t100_message~t100key.
*        RAISE EXCEPTION TYPE zcx_http_client_failed EXPORTING textid = lv_text2.
*    ENDTRY.
*   End of changes for VSTF 2163894 | DGDK903413

    SELECT SINGLE * FROM zrest_mo_payload INTO wa_payload WHERE messageid EQ message_id.

    AUTHORITY-CHECK OBJECT 'ZREST_AUTH'
        ID 'ZBOOLEAN' FIELD 'X'.
    IF sy-subrc NE 0 AND check_obfuscation_needed( inetrface_in = wa_payload-interface_id ) EQ abap_true.
      output = obfuscate( input = wa_payload-payload ).
      wa_payload-payload = output.
    ENDIF.

    CALL FUNCTION 'ECATT_CONV_XSTRING_TO_STRING'
      EXPORTING
        im_xstring  = wa_payload-payload
        im_encoding = 'UTF-8'
      IMPORTING
        ex_string   = wa_string-line.

    APPEND wa_string TO it_string.
    CLEAR wa_string.

    DATA gv_filename TYPE string.
    DELETE it_string WHERE line IS INITIAL.
    IF it_string IS INITIAL.
      MESSAGE 'Payload not found' TYPE 'I'.
      RETURN.
    ENDIF.

    CALL FUNCTION 'GUI_FILE_SAVE_DIALOG'
      IMPORTING
        fullpath = gv_filename.

    CALL FUNCTION 'GUI_DOWNLOAD'
      EXPORTING
        filename                = gv_filename
        filetype                = 'ASC'
      TABLES
        data_tab                = it_string
      EXCEPTIONS
        file_write_error        = 1
        no_batch                = 2
        gui_refuse_filetransfer = 3
        invalid_type            = 4
        no_authority            = 5
        unknown_error           = 6
        header_not_allowed      = 7
        separator_not_allowed   = 8
        filesize_not_allowed    = 9
        header_too_long         = 10
        dp_error_create         = 11
        dp_error_send           = 12
        dp_error_write          = 13
        unknown_dp_error        = 14
        access_denied           = 15
        dp_out_of_memory        = 16
        disk_full               = 17
        dp_timeout              = 18
        file_not_found          = 19
        dataprovider_exception  = 20
        control_flush_error     = 21
        OTHERS                  = 22.
    IF sy-subrc <> 0.
* Implement suitable error handling here
    ENDIF.