Skip to content
Skip to content
Menu
SAP ABAP DWIMAN
  • About
SAP ABAP DWIMAN

SAP ABAP – Macro #1

By juananda.satria on November 23, 2023

MACRO_UDF_DOWNLOAD

Sometimes we need to download our internal table to local computer.

I got this code from old code by Fredy Santoso. All credits to him.

All we need to call this macro is 1 line like this

macro_udf_download filename 'ASC' itab.

Declaration variables:

DATA: d_udf_totalrecords TYPE i,
      d_udf_tab          TYPE x VALUE '09',
      d_udf_subrc        LIKE sy-subrc,
      d_udf_fsize        TYPE i,
      d_udf_memid        LIKE sy-cprog,
      d_udf_chkfl        VALUE 'X',           " Need to check file ?
      d_udf_fname        LIKE rlgrap-filename,
      d_udf_drcty        LIKE pcfile-path,
      d_udf_drive        LIKE pcfile-drive,
      d_udf_filnm        LIKE rlgrap-filename,
      d_udf_extns(8),
      d_udf_dspms        VALUE 'X',           "Flags to display error message
      d_udf_dsn_msg(50).

DATA: d_udf_lngth TYPE i,
      d_udf_count TYPE i,
      d_udf_start TYPE i,
      d_udf_nchar,
      d_udf_xchar TYPE x.

*-----------------------------------------------------------------------
* @form        MACRO_UDF_DOWNLOAD
* @description download data from SAP
* @param       &1
* @par-desc    filename used, if no file given then call save as file
*              dialog selected
* @param       &2
* @par-desc    download data type
* @par-val     'ASC' for ascii file
*              'DAT' for dat file
*              see WS_DOWNLOAD documentation for filetype
* @param       &3
* @par-desc    itab to download
*-----------------------------------------------------------------------
DEFINE macro_udf_download.
  IF &1 EQ space.
    PERFORM f_udf_get_filename USING 'S' &1.
  ENDIF.
  IF &1 NE space.
    CALL FUNCTION 'GUI_DOWNLOAD'
     EXPORTING
*       bin_filesize                  = d_udf_fsize
       filename                      = &1
       filetype                      = &2
       write_field_separator         = 'X'
       dat_mode                      = 'X'
     TABLES
       data_tab                      = &3
     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.
    d_udf_subrc = sy-subrc.
    IF d_udf_subrc NE 0 AND d_udf_dspms NE space.
      CASE sy-subrc.
        WHEN  1. MESSAGE i000(zamd) WITH 'File write error !'.
        WHEN  2. MESSAGE i000(zamd) WITH 'No Batch !'.
        WHEN  3. MESSAGE i000(zamd) WITH 'GUI refuse file transfer !'.
        WHEN  4. MESSAGE i000(zamd) WITH 'Invalid type !'.
        WHEN  5. MESSAGE i000(zamd) WITH 'No authority !'.
        WHEN  6. MESSAGE i000(zamd) WITH 'Unknown error !'.
        WHEN  7. MESSAGE i000(zamd) WITH 'Header not allowed !'.
        WHEN  8. MESSAGE i000(zamd) WITH 'Separator not allowed !'.
        WHEN  9. MESSAGE i000(zamd) WITH 'File size not allowed !'.
        WHEN 10. MESSAGE i000(zamd) WITH 'Header too long !'.
        WHEN 11. MESSAGE i000(zamd) WITH 'DP error created !'.
        WHEN 12. MESSAGE i000(zamd) WITH 'DP error send !'.
        WHEN 13. MESSAGE i000(zamd) WITH 'DP error write !'.
        WHEN 14. MESSAGE i000(zamd) WITH 'Unknown DP error !'.
        WHEN 15. MESSAGE i000(zamd) WITH 'Access denied !'.
        WHEN 16. MESSAGE i000(zamd) WITH 'DP out of memory !'.
        WHEN 17. MESSAGE i000(zamd) WITH 'Disk full !'.
        WHEN 18. MESSAGE i000(zamd) WITH 'DP time out !'.
        WHEN 19. MESSAGE i000(zamd) WITH 'File not found !'.
        WHEN 20. MESSAGE i000(zamd) WITH 'Data provider exception !'.
        WHEN 21. MESSAGE i000(zamd) WITH 'Control flush error !'.
        WHEN 22. MESSAGE i000(zamd) WITH 'Other unknown error !'.
      ENDCASE.
    ENDIF.
  ENDIF.
END-OF-DEFINITION.

*-----------------------------------------------------------------------
* @form        F_UDF_GET_FILENAME
* @description query to window system and show file dialog to choose
*              a file
* @param       FU_TYPE
* @par-desc    type for dialog file
* @par-val     'O' for 'open' file dialog
*              'S' for 'save as' file dialog
* @param       FC_FNAME
* @par-desc    filename selected
*-----------------------------------------------------------------------
FORM f_udf_get_filename USING fu_type
                        CHANGING fc_fname.
  DATA: ld_filename  LIKE rlgrap-filename,
        ld_title(20),
        ld_length    TYPE i,
        ld_path(80).
  FIELD-SYMBOLS: <lf_symbol>.
  ld_path = fc_fname.
  IF ld_path NE space.                 "I-BAK010299

    ld_length = strlen( ld_path ) - 1.
    ASSIGN ld_path+ld_length(1) TO <lf_symbol>.
    IF <lf_symbol> EQ '/' OR <lf_symbol> EQ '\'.
      ld_path = ld_path(ld_length).
    ENDIF.
  ENDIF.

  IF fu_type EQ 'O'.
    ld_title = 'Open file'.
  ELSEIF fu_type EQ 'F'.
    ld_title = 'Select file'.
  ELSE.
    ld_title = 'Save as'.
  ENDIF.

  DATA: directory TYPE string,
        filetable TYPE filetable,
        line      TYPE LINE OF filetable,
        rc        TYPE i,
        ld_window TYPE string.
  CALL METHOD cl_gui_frontend_services=>get_temp_directory
    CHANGING
      temp_dir = directory.

* Build Filter for Fileselektor]
  ld_window = ld_title.
  CALL METHOD cl_gui_frontend_services=>file_open_dialog
    EXPORTING
      window_title      = ld_window
      initial_directory = directory
*     file_filter       = '*.xml'
      multiselection    = ' '
    CHANGING
      file_table        = filetable
      rc                = rc.
  IF rc = 1.
    READ TABLE filetable INDEX 1 INTO line.
    ld_filename = line-filename.
  ENDIF.

  d_udf_subrc = sy-subrc.
  CHECK d_udf_subrc = 0.
  fc_fname = ld_filename.
  CHECK d_udf_chkfl IS INITIAL.
  PERFORM f_udf_get_path_name USING fc_fname.
  CONCATENATE d_udf_drive ':' d_udf_drcty INTO fc_fname.
ENDFORM.                    "f_udf_get_filename


*$*$--------------------------------------------------------------------
*$*$ Lib internal use Subroutines
*$*$--------------------------------------------------------------------
*&---------------------------------------------------------------------*
*&      Form  F_UDF_GET_PATH_NAME
*&---------------------------------------------------------------------*
FORM f_udf_get_path_name USING fu_fname.
  DATA: ld_char,
        ld_length    TYPE i,
        ld_position  TYPE i,
        ld_count     TYPE i,
        ld_directory LIKE pcfile-path.

  ld_directory = fu_fname.
  CALL FUNCTION 'PC_SPLIT_COMPLETE_FILENAME'
    EXPORTING
      complete_filename = ld_directory
*     CHECK_DOS_FORMAT  =
    IMPORTING
      drive             = d_udf_drive
      extension         = d_udf_extns
      name              = d_udf_filnm
      name_with_ext     = d_udf_fname
      path              = d_udf_drcty
    EXCEPTIONS
      invalid_drive     = 1
      invalid_extension = 2
      invalid_name      = 3
      invalid_path      = 4
      OTHERS            = 5.
  d_udf_subrc = sy-subrc.
ENDFORM.                               " F_UDF_GET_PATH_NAME

Thank you. I hope this post give us more inspiration and not only copy paste. Regards. 🙂

Post navigation

SAP ABAP – Simple Interface FTP Inbound (SAP Consume File From FTP)
SAP ABAP – Send Email with Smartforms Attachment

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Recent Posts

  • SAP ABAP – Generate Fiori URL
  • SAP ABAP – Workflow Agents CDS
  • SAP ABAP – Workflow Level with Table Function
  • SAP ABAP – Download ALV to Excel with Total and Subtotal
  • SAP ABAP – BDC Template

Recent Comments

  1. SAP ABAP – Simple Interface FTP Inbound (SAP Consume File From FTP) – SAP ABAP DWIMAN on SAP ABAP – String Encode & Decode BASE64
  2. Upload file – SAP ABAP DWIMAN on F4 Search Help File

Archives

  • May 2025
  • August 2024
  • June 2024
  • May 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • May 2023
  • April 2023

Categories

  • Uncategorized
©2026 SAP ABAP DWIMAN | WordPress Theme by SuperbThemes.com