W Pub: ABAP Rut Externos

  1. report znadar_file_subr.
  2.  
  3. selection-screen begin of block b01 with frame.
  4. parameter: filez type string LOWER CASE,
  5.            f_pc radiobutton group bol,
  6.            f_ho radiobutton group bol.
  7. selection-screen end of block b01.
  8.  
  9. data: itab(12) occurs 0 with header line.
  10.  
  11. CLASS z_cl_filez DEFINITION.
  12.  
  13.   PUBLIC SECTION.
  14.     DATA: to_from_pc   TYPE xfeld,
  15.           to_from_host TYPE xfeld,
  16.           my_tab       TYPE STANDARD TABLE OF string,
  17.           filename     TYPE string,
  18.           filesize     TYPE i,
  19.           filetype     TYPE char10.
  20.  
  21.     METHODS: load CHANGING p_table TYPE table,
  22.              save CHANGING p_table TYPE table,
  23.              constructor IMPORTING i_filez TYPE string.
  24.  
  25.   PRIVATE SECTION.
  26.     METHODS: load_from_pc CHANGING p_table TYPE table,
  27.              load_from_host CHANGING p_table TYPE table,
  28.              save_to_pc CHANGING p_table TYPE table,
  29.              save_to_host CHANGING p_table TYPE table,
  30.              open_dialog.
  31. ENDCLASS.
  32.  
  33. CLASS z_cl_filez IMPLEMENTATION.
  34.  
  35.   METHOD constructor.
  36.     IF NOT i_filez IS INITIAL.
  37.       me->filename = i_filez.
  38.     ENDIF.
  39.     me->filetype = 'ASC'. "<- Por defecto siempre en ASCII
  40.     me->to_from_pc = 'X'. "<- Por Defecto en local
  41.   ENDMETHOD.
  42.  
  43.   METHOD load.
  44.     CASE 'X'.
  45.       WHEN me->to_from_pc.   me->load_from_pc( CHANGING p_table = p_table ).
  46.       WHEN me->to_from_host. me->load_from_host( CHANGING p_table = p_table ).
  47.     ENDCASE.
  48.   ENDMETHOD.
  49.  
  50.   METHOD save.
  51.     CASE 'X'.
  52.       WHEN me->to_from_pc.   me->save_to_pc( CHANGING p_table = p_table ).
  53.       WHEN me->to_from_host. me->save_to_host( CHANGING p_table = p_table ).
  54.     ENDCASE.
  55.   ENDMETHOD.
  56.  
  57.  
  58.   METHOD open_dialog.
  59.     DATA: lv_file_table TYPE filetable,
  60.           lv_rc TYPE i.
  61.     IF me->filename IS INITIAL.
  62.       CALL METHOD cl_gui_frontend_services=>file_open_dialog
  63. *         EXPORTING
  64. *           WINDOW_TITLE            =
  65. *           DEFAULT_EXTENSION       =
  66. *           DEFAULT_FILENAME        =
  67. *           FILE_FILTER             =
  68. *           WITH_ENCODING           =
  69. *           INITIAL_DIRECTORY       =
  70. *           MULTISELECTION          =
  71.         CHANGING
  72.           file_table              = lv_file_table
  73.           rc                      = lv_rc
  74.         EXCEPTIONS
  75.           file_open_dialog_failed = 1
  76.           cntl_error              = 2
  77.           error_no_gui            = 3
  78.           not_supported_by_gui    = 4
  79.           OTHERS                  = 5.
  80.       READ TABLE lv_file_table INTO me->filename INDEX 1.
  81.  
  82.     ENDIF.
  83.   ENDMETHOD.
  84.  
  85.   METHOD: load_from_pc.
  86.     me->open_dialog( ).
  87.     CHECK sy-subrc EQ 0.
  88.     CALL METHOD cl_gui_frontend_services=>gui_upload
  89.       EXPORTING
  90.         filename                = me->filename
  91.         filetype                = me->filetype
  92.       IMPORTING
  93.         filelength              = me->filesize
  94. *       HEADER                  =
  95.       CHANGING
  96.         data_tab                = p_table
  97.       EXCEPTIONS
  98.         file_open_error         = 1
  99.         file_read_error         = 2
  100.         no_batch                = 3
  101.         gui_refuse_filetransfer = 4
  102.         invalid_type            = 5
  103.         no_authority            = 6
  104.         unknown_error           = 7
  105.         bad_data_format         = 8
  106.         header_not_allowed      = 9
  107.         separator_not_allowed   = 10
  108.         header_too_long         = 11
  109.         unknown_dp_error        = 12
  110.         access_denied           = 13
  111.         dp_out_of_memory        = 14
  112.         disk_full               = 15
  113.         dp_timeout              = 16
  114.         not_supported_by_gui    = 17
  115.         error_no_gui            = 18
  116.         OTHERS                  = 19.
  117.   ENDMETHOD.
  118.  
  119.   METHOD: save_to_pc.
  120.     me->open_dialog( ).
  121.     CHECK sy-subrc EQ 0.
  122.     IF me->filetype NE 'BIN'.
  123.       CLEAR me->filesize.
  124.     ENDIF.
  125.     CALL METHOD cl_gui_frontend_services=>gui_download
  126.       EXPORTING
  127.         bin_filesize            = me->filesize
  128.         filename                = me->filename
  129.         filetype                = me->filetype
  130.       IMPORTING
  131.         filelength              = me->filesize
  132.       CHANGING
  133.         data_tab                = p_table
  134.       EXCEPTIONS
  135.         file_write_error        = 1
  136.         no_batch                = 2
  137.         gui_refuse_filetransfer = 3
  138.         invalid_type            = 4
  139.         no_authority            = 5
  140.         unknown_error           = 6
  141.         header_not_allowed      = 7
  142.         separator_not_allowed   = 8
  143.         filesize_not_allowed    = 9
  144.         header_too_long         = 10
  145.         dp_error_create         = 11
  146.         dp_error_send           = 12
  147.         dp_error_write          = 13
  148.         unknown_dp_error        = 14
  149.         access_denied           = 15
  150.         dp_out_of_memory        = 16
  151.         disk_full               = 17
  152.         dp_timeout              = 18
  153.         file_not_found          = 19
  154.         dataprovider_exception  = 20
  155.         control_flush_error     = 21
  156.         not_supported_by_gui    = 22
  157.         error_no_gui            = 23
  158.         OTHERS                  = 24.
  159.   ENDMETHOD.
  160.  
  161.  
  162.   METHOD load_from_host.
  163.     DATA: lv_s TYPE REF TO data.
  164.     FIELD-SYMBOLS: <lv_s> TYPE any.
  165.  
  166.     CREATE DATA lv_s LIKE LINE OF p_table.
  167.     ASSIGN lv_s->* TO <lv_s>.
  168.  
  169.     CHECK NOT me->filename IS INITIAL.
  170.     IF me->filetype = 'BIN'.
  171.       OPEN DATASET me->filename FOR INPUT IN BINARY MODE.
  172.     ELSE.
  173.       OPEN DATASET me->filename FOR INPUT IN TEXT MODE ENCODING DEFAULT.
  174.     ENDIF.
  175.     CHECK sy-subrc EQ 0.
  176.     DO.
  177.       READ DATASET me->filename INTO <lv_s>.
  178.       IF sy-subrc NE 0. EXIT. ENDIF.
  179.       APPEND <lv_s> TO p_table.
  180.     ENDDO.
  181.     CLOSE DATASET me->filename.
  182.   ENDMETHOD.
  183.  
  184.   METHOD save_to_host.
  185.     DATA: lv_s TYPE REF TO data.
  186.     FIELD-SYMBOLS: <lv_s> TYPE any.
  187.     CREATE DATA lv_s LIKE LINE OF p_table.
  188.     ASSIGN lv_s->* TO <lv_s>.
  189.  
  190.     CHECK NOT me->filename IS INITIAL.
  191.     IF me->filetype = 'BIN'.
  192.       OPEN DATASET me->filename FOR OUTPUT IN BINARY MODE.
  193.     ELSE.
  194.       OPEN DATASET me->filename FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
  195.     ENDIF.
  196.     LOOP AT p_table INTO <lv_s>.
  197.       TRANSFER <lv_s> TO me->filename.
  198.     ENDLOOP.
  199.     CLOSE DATASET me->filename.
  200.   ENDMETHOD.
  201.  
  202. ENDCLASS.
  203.  
  204. at selection-screen on value-request for filez.
  205.   perform help_me changing filez.
  206.  
  207. end-of-selection.
  208.  
  209. *--[ Ejemplo de USO
  210. DATA: l_filez type REF TO Z_CL_FILEZ,
  211.      my_tab type STANDARD TABLE OF string.
  212.  
  213.    BREAK-POINT.
  214.    CREATE OBJECT l_filez EXPORTING i_filez = filez.
  215.    l_filez->LOAD( CHANGING p_table = my_tab ).
  216.    l_filez->filename = 't:\salida.txt'.
  217.    l_filez->save( CHANGING p_table = my_tab ).
  218.    BREAK-POINT.
  219.  
  220. form help_me changing p_filez type string.
  221. data: lv_file  like rlgrap-filename.
  222.   lv_file = p_filez.
  223.   CALL FUNCTION 'WS_FILENAME_GET'
  224.     EXPORTING
  225.       def_filename     = lv_file
  226.       mask             = ',all files,*.*,data files,*.dat,text files,*.txt.'
  227.       mode             = 'o'
  228.       title            = 'Selecciona un fichero...'
  229.     IMPORTING
  230.       filename         = lv_file
  231.     EXCEPTIONS
  232.       inv_winsys       = 04
  233.       no_batch         = 04
  234.       selection_cancel = 04
  235.       selection_error  = 04.
  236.     p_filez = lv_file.
  237. endform.