ABAPBROWSERDOWN

  1.  
  2. REPORT ZXX_PRG_BROWSER.
  3.  
  4. INCLUDE ZXX_XX_I_BROWSER_TOP.
  5. INCLUDE ZXX_XX_I_BROWSER_SEL.
  6. INCLUDE ZXX_XX_I_BROWSER_CLS.
  7. INCLUDE ZXX_XX_I_BROWSER_EVE.
  8. INCLUDE ZXX_XX_I_BROWSER_FRM.
  9.  
  1.  
  2. *--[ INCLUDE ZXX_I_BROWSER_TOP.
  3.  
  4.  
  5. CONSTANTS: c_version type string value '02.01'.
  6. *--[ 2.0 - 20241216 + Lavado de código y mejoras
  7. *--[ 2.1 - 20241218 + Botón de Copiar/Pegar + Renombrar
  8.  
  9. types: begin of ty_alv.
  10.     include STRUCTURE EPS2FILI.
  11. types:
  12.  
  13.     Fecha type DatUM,
  14.     hora type uzeit,
  15.     fullname type c LENGTH 1023,
  16.     end of ty_alv.
  17.  
  18. DATA: g_error       TYPE sy-subrc,
  19.       g_okcode      TYPE sy-ucomm,
  20.       g_titulo(255),
  21.       t_fcode TYPE TABLE OF sy-ucomm,
  22.  
  23.       cc_01      TYPE REF TO cl_gui_custom_container,
  24.       G_Split         TYPE REF TO cl_gui_splitter_container,
  25.       g_html_control TYPE REF TO cl_gui_html_viewer,
  26.       cm_01      TYPE scrfname VALUE 'CC_ALV_01',
  27.  
  28.       gs_layout  TYPE lvc_s_layo,
  29.       gs_layout_02  TYPE lvc_s_layo,
  30.       gs_variant TYPE disvariant,
  31.       g_auth     type string,
  32.  
  33.       grid_01    TYPE REF TO cl_gui_alv_grid,
  34.       grid_02    TYPE REF TO cl_gui_alv_grid,
  35.  
  36.       t_tab_01   TYPE STANDARD TABLE OF ty_alv, "EPS2FILI,
  37.       l_tab_01   LIKE LINE OF t_tab_01,
  38.  
  39.       t_fcat_01  TYPE lvc_t_fcat,
  40.  
  41.       gt_toolbar TYPE  ui_functions,
  42.  
  43. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  44. *--[
  45.   end_of_data(1).
  1.  
  2. *--[ INCLUDE ZXX_I_BROWSER_SEL.
  3.  
  4.  
  5. SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME.
  6.   PARAMETERS: p_dir TYPE text255 OBLIGATORY LOWER CASE.
  7.  
  8. SELECTION-SCREEN END OF BLOCK b01.
  9.  
  10. SELECTION-SCREEN BEGIN OF BLOCK b02 WITH FRAME.
  11.   SELECT-OPTIONS: s_mask  for syst-lisel LOWER CASE,
  12.                   s_datum FOR syst-datum,
  13.                   s_uzeit FOR syst-uzeit.
  14. SELECTION-SCREEN END OF BLOCK b02.
  15.  
  16. MODULE pbo_0100 OUTPUT.
  17.   PERFORM pbo_0100.
  18.  
  19. ENDMODULE.
  20.  
  21. MODULE pai_0100 INPUT.
  22.   PERFORM pai_0100.
  23. ENDMODULE.
  1.  
  2. *--[ INCLUDE ZXX_I_BROWSER_CLS
  3. CLASS lcl_event_handler DEFINITION FINAL.
  4.   PUBLIC SECTION .
  5.  
  6. CONSTANTS: c_auth_all     type string VALUE 'ALL',
  7.            c_auth_display type string value 'DISPLAY'.
  8.  
  9.   data: l_auth type string.
  10.  
  11.     METHODS:
  12.  
  13.       handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
  14.         IMPORTING e_object, " e_interactive,
  15.  
  16.       handle_hotspot_click
  17.       FOR EVENT hotspot_click OF cl_gui_alv_grid
  18.       IMPORTING e_row_id e_column_id,
  19.  
  20.       handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
  21.         IMPORTING e_ucomm .
  22.  
  23. ENDCLASS.
  24.  
  25. DATA: G_event_01 TYPE REF TO lcl_event_handler.
  26.  
  27. CLASS lcl_event_handler IMPLEMENTATION .
  28.  
  29.  
  30.   METHOD handle_hotspot_click.
  31.      PERFORM handle_hotspot USING e_row_id e_column_id.
  32.   endmethod.
  33.  
  34.   METHOD handle_toolbar.
  35.     DATA(l_modo) = abap_false.
  36.  
  37.     if l_auth ne c_auth_all.
  38.        l_modo = abap_true.
  39.      endif.
  40.  
  41.     e_object->mt_toolbar = VALUE #( BASE e_object->mt_toolbar
  42.  
  43.                                   ( butn_type = 0
  44.                                     function = 'REFR'
  45.                                     icon = icon_refresh
  46.                                     text = 'Refrescar'
  47.                                     quickinfo = 'Refrescar ficheros del servidor'
  48.                                     disabled  = abap_false )
  49.  
  50.                                   ( butn_type = 0
  51.                                     function = 'DOWN'
  52.                                     icon = icon_cloud_download
  53.                                     text = 'Descargar'
  54.                                     quickinfo = 'Descargar Ficheros desde el servidor'
  55.                                     disabled  = abap_false )
  56.  
  57.                                   ( butn_type = 0
  58.                                     function = 'UPLO'
  59.                                     icon = icon_cloud_upload
  60.                                     text = 'Cargar'
  61.                                     quickinfo = 'Cargar Ficheros al servidor'
  62.                                     disabled  = l_modo )
  63.  
  64.                                   ( butn_type = 0
  65.                                     function = 'RENA'
  66.                                     icon = ICON_RENAME
  67.                                     text = 'Renombrar'
  68.                                     quickinfo = 'Cambiar nombre a los ficheros'
  69.                                     disabled  = l_modo )
  70.  
  71.                                   ( butn_type = 0
  72.                                     function = 'COPY'
  73.                                     icon = ICON_COPY_OBJECT
  74.                                     text = 'Copiar/Mover'
  75.                                     quickinfo = 'Copiar/Mover ficheros'
  76.                                     disabled  = l_modo )
  77.  
  78.                                   ( butn_type = 0
  79.                                     function = 'DELE'
  80.                                     icon = icon_delete
  81.                                     text = 'Borrar'
  82.                                     quickinfo = 'Borrar archivos del servidor'
  83.                                     disabled  = l_modo )
  84.  
  85.  
  86.  
  87.                                   ).
  88.   ENDMETHOD.
  89.  
  90.   METHOD handle_user_command.
  91.     CASE e_ucomm.
  92.       WHEN 'REFR'. PERFORM boton_refrescar.
  93.       WHEN 'DOWN'. PERFORM boton_download.
  94.       WHEN 'UPLO'. PERFORM boton_upload.
  95.       WHEN 'COPY'. PERFORM boton_copy.
  96.       WHEN 'RENA'. PERFORM boton_rename.
  97.       WHEN 'DELE'. PERFORM boton_delete.
  98.     ENDCASE.
  99.  
  100.   ENDMETHOD.
  101.  
  102. ENDCLASS.
  103.  

Hay que incluir en esta parte la clase: Clase Lectura ficheros externos

  1.  
  2. *--[ INCLUDE ZXX_I_BROWSER_EVE.
  3. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_dir.
  4.   perform F4_HOST.
  5.  
  6. at SELECTION-SCREEN OUTPUT.
  7.   perform eve_start_of_selection_o.
  8.  
  9. START-OF-SELECTION.
  10.   PERFORM data_load.
  11.  
  12. end-of-SELECTION.
  13.   PERFORM data_list.
  14.  
  1.  
  2. *--[ INCLUDE ZXX_I_BROWSER_FRM.
  3. FORM data_list.
  4.   CALL SCREEN '0100'.
  5. ENDFORM.
  6.  
  7. FORM eve_start_of_selection_o.
  8.   CHECK sy-tcode CP '* NASA*'.
  9.   LOOP AT SCREEN.
  10.     CHECK screen-name CP '*P_DIR*'.
  11.     screen-input = 0.
  12.     MODIFY SCREEN.
  13.   ENDLOOP.
  14. ENDFORM.
  15.  
  16. FORM data_load.
  17.   DATA: l_name TYPE eps2filnam,
  18.         t_tab  TYPE STANDARD TABLE OF eps2fili.
  19.  
  20.   l_name = p_dir.
  21.   REFRESH t_tab_01.
  22.  
  23.   CALL FUNCTION 'EPS2_GET_DIRECTORY_LISTING'
  24.     EXPORTING
  25.       iv_dir_name            = l_name
  26.       file_mask              = '*.*'
  27. * IMPORTING
  28. *     DIR_NAME               =
  29. *     FILE_COUNTER           =
  30. *     ERROR_COUNTER          =
  31.     TABLES
  32.       dir_list               = t_tab_01
  33.     EXCEPTIONS
  34.       invalid_eps_subdir     = 1
  35.       sapgparam_failed       = 2
  36.       build_directory_failed = 3
  37.       no_authorization       = 4
  38.       read_directory_failed  = 5
  39.       too_many_read_errors   = 6
  40.       empty_directory_list   = 7
  41.       OTHERS                 = 8.
  42.  
  43.   IF sy-subrc <> 0.
  44. * Implement suitable error handling here
  45.   ENDIF.
  46.  
  47.   DELETE t_tab_01 WHERE name = '.' OR name = '..'.
  48.   LOOP AT t_tab_01 ASSIGNING FIELD-SYMBOL(<f>).
  49.     CLEAR sy-subrc.
  50. *20.01.2023 11:12:32
  51. *012345678901234567890
  52.     <f>-fullname = |{ p_dir }/{ <f>-name }|.
  53.     <f>-fecha = <f>-mtim+6(4) && <f>-mtim+3(2) && <f>-mtim+0(2).
  54.     <f>-hora  = <f>-mtim+11(2) && <f>-mtim+14(2) && <f>-mtim+17(2).
  55.   ENDLOOP.
  56.   SORT t_tab_01.
  57.   DELETE t_tab_01 WHERE fecha NOT IN s_datum OR
  58.                         hora NOT IN s_uzeit OR
  59.                         name NOT IN s_mask.
  60.   PERFORM autoriazacion_locales.
  61.   DATA(l_lin) = lines( t_tab_01 ).
  62.   MESSAGE s398(00) WITH 'Entontrados ' l_lin ' ficheros' ''.
  63. ENDFORM.
  64.  
  65. FORM autoriazacion_locales.
  66. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  67. *--[ ESTO ES SOLO PARA AUTORIZACIONES DE CLIENTES
  68.  
  69.   CHECK sy-tcode CP'Z*_XX_TR_NASAFILES'.
  70.  
  71.   DATA: l_au TYPE xfeld.
  72.   CLEAR l_au.
  73. *--[ Verificamos autorizacoines.
  74.   LOOP AT t_tab_01 INTO DATA(l_01).
  75.  
  76.     DATA(l_tabix) = sy-tabix.
  77.  
  78.     DATA(l_nombre) = replace( val = replace( val = l_01-name sub = 'ES.' with = '%.' occ = 0 ) sub = 'CA.' with = '%.' occ = 0 ).
  79.  
  80.     SELECT SINGLE * FROM zgva_eb_infnasa INTO @DATA(li) WHERE nombre_fichero LIKE @l_01-name.
  81.     IF sy-subrc NE 0. DELETE t_tab_01 INDEX l_tabix. CONTINUE. ENDIF.
  82.  
  83.     AUTHORITY-CHECK OBJECT 'ZEB_VERSI' ID 'ZEB_VER' FIELD li-version.   DATA(l_subrc_01) = sy-subrc.
  84.     AUTHORITY-CHECK OBJECT 'ZEB_ORGAN' ID 'ZEB_ORGANI' FIELD li-fcsub1. DATA(l_subrc_02) = sy-subrc.
  85.  
  86.     CHECK l_subrc_01 <> 0 OR l_subrc_02 NE 0.
  87.     l_au = abap_true.
  88.     DELETE t_tab_01 INDEX l_tabix.
  89.     CONTINUE.
  90.  
  91.   ENDLOOP.
  92.   IF l_au = abap_true AND sy-batch IS INITIAL.
  93.     MESSAGE i398(00) WITH TEXT-i01.
  94.   ENDIF.
  95. ENDFORM.
  96.  
  97. FORM pbo_0100.
  98.  
  99.   SET TITLEBAR 'TIT01' WITH p_dir.
  100.  
  101.   IF cc_01 IS INITIAL.
  102.  
  103.     gs_layout_02-cwidth_opt = 'X'.
  104.     gs_layout-sel_mode = 'A'.
  105.     gs_layout_02-zebra = gs_layout-zebra = abap_true.
  106.     gs_variant-report = sy-repid.
  107.  
  108.     cc_01 = NEW cl_gui_custom_container( cm_01 ).
  109.  
  110.     G_SPlIT   = NEW cl_gui_splitter_container( parent = cc_01
  111.                                                rows = 1
  112.                                                columns = 2 ).
  113.  
  114.  
  115. *--[ LHRPADIT_REPO01:36
  116.     grid_01 = NEW cl_gui_alv_grid( i_parent = G_SPlIT->get_container( row = 1 column = 1 ) ).
  117. *    g_html_control = NEW cl_gui_html_viewer( parent = G_SPlIT->get_container( row = 1 column = 2 ) ).
  118.     g_split->set_column_width( id = 2 width = 0  ).
  119.  
  120. *--[ Creamos el FCAT de la tabla
  121.     cl_salv_table=>factory( IMPORTING r_salv_table = DATA(l_alv) CHANGING t_table = t_tab_01 ).
  122.     t_fcat_01 = cl_salv_controller_metadata=>get_lvc_fieldcatalog(
  123.           r_columns      = l_alv->get_columns( )
  124.           r_aggregations  = l_alv->get_aggregations( ) ).
  125.  
  126.     LOOP AT t_fcat_01 ASSIGNING FIELD-SYMBOL(<f>).
  127.       CASE <f>-fieldname.
  128.         WHEN 'NAME'.
  129.           <f>-scrtext_s =
  130.           <f>-scrtext_m =
  131.           <f>-coltext   = <f>-seltext =
  132.           <f>-scrtext_l = TEXT-c01.
  133.           <f>-outputlen = 80.
  134.           <f>-col_opt = abap_true.
  135.           <f>-hotspot = abap_true.
  136.         WHEN 'SIZE'.
  137.           <f>-scrtext_s =
  138.           <f>-scrtext_m =
  139.           <f>-coltext   = <f>-seltext =
  140.           <f>-scrtext_l = TEXT-c02.
  141.           <f>-outputlen = 20.
  142.         WHEN 'MTIM'.
  143.           <f>-scrtext_s =
  144.           <f>-scrtext_m =
  145.           <f>-coltext   = <f>-seltext =
  146.           <f>-scrtext_l = TEXT-c03.
  147.           <f>-no_out = abap_true.
  148.         WHEN 'FECHA'.
  149.           <f>-scrtext_s =
  150.           <f>-scrtext_m =
  151.           <f>-coltext   = <f>-seltext =
  152.           <f>-scrtext_l = 'Fecha'.
  153.           <f>-outputlen = 10.
  154. *          <f>-no_out = abap_true.
  155.         WHEN 'HORA'.
  156.           <f>-outputlen = 10.
  157.           <f>-scrtext_s =
  158.           <f>-scrtext_m =
  159.           <f>-coltext   =
  160.           <f>-seltext =
  161.           <f>-scrtext_l = 'Hora'.
  162. *          <f>-no_out = abap_true.
  163.         WHEN OTHERS.
  164.           <f>-no_out = abap_true.
  165. *
  166.       ENDCASE.
  167.  
  168.     ENDLOOP.
  169.  
  170.     PERFORM alv_remove_buttons.
  171.  
  172.     grid_01->set_table_for_first_display(
  173.       EXPORTING
  174. *       i_structure_name     = 'ZXXX'
  175. *       i_SAVE               = 'A'
  176.         is_variant           = gs_variant
  177.         is_layout            = gs_layout
  178.         it_toolbar_excluding = gt_toolbar
  179.       CHANGING
  180.         it_fieldcatalog      = t_fcat_01 "gt_field
  181.         it_outtab            = t_tab_01 ).
  182.  
  183.     G_event_01 = NEW lcl_event_handler( ).
  184.     PERFORM PBO_0100_autorizaciones.
  185.     SET HANDLER G_event_01->handle_toolbar       FOR grid_01.
  186.     SET HANDLER G_event_01->handle_user_command  FOR grid_01.
  187.     SET HANDLER G_event_01->handle_hotspot_click FOR grid_01.
  188.     grid_01->set_toolbar_interactive( ).
  189.  
  190.   ENDIF.
  191. ENDFORM.
  192.  
  193. FORM PBO_0100_autorizaciones.
  194.   IF sy-tcode = 'SE38'. "<-- Pont tu propia autorización
  195.     g_event_01->l_auth = g_event_01->c_auth_all.
  196.   ELSE.
  197.     g_event_01->l_auth = g_event_01->c_auth_display.
  198.   ENDIF.
  199. ENDFORM.
  200.  
  201. FORM handle_hotspot USING e_row_id  TYPE  lvc_s_row
  202.                         e_column_id TYPE  lvc_s_col.
  203.  
  204.   CASE e_column_id.
  205.  
  206.     WHEN 'NAME'.
  207.       READ TABLE t_tab_01 INTO l_tab_01 INDEX e_row_id-index.
  208.       PERFORM handle_hotspot_view_file.
  209.  
  210.   ENDCASE.
  211. ENDFORM.
  212.  
  213. FORM handle_hotspot_view_file.
  214.  
  215.   DATA: gt_data      TYPE TABLE OF x,
  216.         gt_data_s    TYPE STANDARD TABLE OF string,
  217.         url(1023),
  218.         t_fcat       TYPE lvc_t_fcat,
  219.         gt_dyn_table TYPE REF TO data,
  220.         gw_line      TYPE REF TO data.
  221.  
  222.   FIELD-SYMBOLS: <fst> TYPE table.
  223.  
  224.   CHECK l_tab_01-name IS NOT INITIAL.
  225.  
  226.   DATA(l_name) = |{ p_dir }/{ l_tab_01-name }|.
  227.   DATA(l_filez) = NEW zcl_file_main( i_filez = l_name ).
  228.   l_filez->set_server( ).
  229.  
  230.   IF to_upper( l_name ) CP '*.CSV'.
  231.     l_filez->load( CHANGING p_table = gt_data_s ). "<- Por defecto en ASC
  232.   ELSE.
  233.     l_filez->set_bin( ).
  234.     l_filez->load( CHANGING p_table = gt_data ).
  235.   ENDIF.
  236.  
  237.   CHECK l_filez->get_subrc( ) EQ 0.
  238.  
  239.   DATA(l_ext) = to_upper( l_filez->get_split_ext( ) ).
  240.  
  241.   DATA: l_TYPE(1023),
  242.         l_SUBTYPE(1023).
  243.   l_subtype = l_EXT.
  244.   CASE l_ext.
  245.     WHEN 'PDF'.                                                l_type = 'APPLICATION'.
  246.     WHEN 'TXT' OR 'CSV' OR 'HTM' OR 'HTML' OR 'JSON' OR 'XML'. l_type = 'text/html'.
  247.     WHEN OTHERS.
  248.       MESSAGE s398(00) WITH 'Extensión no implementado' '' '' ''. EXIT.
  249.   ENDCASE.
  250.  
  251.   g_split->set_column_width( id = 2 width = 50  ).
  252.  
  253.   TRY. g_html_control->free( ). CATCH cx_root. ENDTRY.
  254.   TRY. grid_02->free( ). CATCH cx_root. ENDTRY.
  255.   FREE: g_html_control, grid_02.
  256. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  257. *--[ FORMATO: CSV
  258.   IF l_ext = 'CSV'.
  259.  
  260.     DATA(l_num) = count( val = gt_data_S[ 1 ] sub = ';' ).
  261.  
  262.     DO l_num TIMES.
  263.       t_fcat = VALUE lvc_t_fcat( BASE t_fcat ( fieldname = |NAME_{ sy-index }|
  264.                                                coltext   = |FIELD { sy-index }|
  265.                                                col_pos   = sy-index
  266.                                                outputlen = 255 "<-- Tal vez necesita ampliarse
  267.                                                datatype  = 'CHAR'
  268.                                                inttype   = 'C'
  269.                                                intlen    = 255
  270.                                              )
  271.                                ).
  272.     ENDDO.
  273.  
  274.     cl_alv_table_create=>create_dynamic_table(
  275.       EXPORTING
  276.         i_style_table             = abap_true
  277.         it_fieldcatalog           = t_fcat
  278.       IMPORTING
  279.         ep_table                  = gt_dyn_table ).
  280.  
  281.     LOOP AT gt_data_s INTO DATA(ls).
  282.       AT FIRST.
  283.         ASSIGN gt_dyn_table->* TO <fst>.
  284.         CREATE DATA gw_line LIKE LINE OF <fst>.
  285.         ASSIGN gw_line->* TO FIELD-SYMBOL(<wa>).
  286.       ENDAT.
  287.       CLEAR <wa>.
  288.  
  289.       SPLIT ls AT ';' INTO TABLE DATA(t_tab).
  290.       LOOP AT t_tab INTO DATA(l_tab).
  291.         CHECK sy-index <= l_num.
  292.         DATA(l_n) = |<wa>-NAME_{ sy-tabix }|.
  293.         ASSIGN (l_n) TO FIELD-SYMBOL(<fcell>).
  294.         <fcell> = l_tab.
  295.       ENDLOOP.
  296.       APPEND <wa> TO <fst>.
  297.       REFRESH t_tab.
  298.       AT LAST.
  299.         grid_02 = NEW cl_gui_alv_grid( i_parent = G_SPlIT->get_container( row = 1 column = 2 ) ).
  300.         grid_02->set_table_for_first_display(
  301.        EXPORTING
  302.          is_variant           = gs_variant
  303.          is_layout            = gs_layout_02
  304.          it_toolbar_excluding = gt_toolbar
  305.        CHANGING
  306.          it_fieldcatalog      = t_fcat
  307.          it_outtab            = <fst> ).
  308.       ENDAT.
  309.     ENDLOOP.
  310.  
  311. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  312. *--[ Por Defecto, lanzamos un navegador
  313.   ELSE.
  314.     g_html_control = NEW cl_gui_html_viewer( parent = G_SPlIT->get_container( row = 1 column = 2 ) ).
  315.  
  316.     g_html_control->load_data(
  317.            EXPORTING type         = l_type
  318.                      subtype      = l_subtype
  319.            IMPORTING assigned_url = url
  320.            CHANGING  data_table   = gt_data ).
  321.     cl_gui_cfw=>flush( ).
  322.     g_html_control->show_data( EXPORTING url = url ).
  323.   ENDIF.
  324. ENDFORM.
  325.  
  326. FORM alv_remove_buttons.
  327.   CLEAR gt_toolbar.
  328.   APPEND cl_gui_alv_grid=>mc_fg_edit TO gt_toolbar.
  329. *  append CL_GUI_ALV_GRID=>MC_FG_SORT to gt_toolbar.
  330.   APPEND cl_gui_alv_grid=>mc_mb_subtot TO gt_toolbar.
  331.   APPEND cl_gui_alv_grid=>mc_mb_sum    TO gt_toolbar.
  332.   APPEND cl_gui_alv_grid=>mc_mb_variant TO gt_toolbar.
  333.   APPEND cl_gui_alv_grid=>mc_fc_detail TO gt_toolbar.
  334. ENDFORM.
  335.  
  336. FORM pai_0100.
  337.   DATA(l_okcode) = g_okcode.
  338.   CLEAR g_okcode.
  339.   CASE l_okcode.
  340.     WHEN 'BACK' OR '%EX' OR 'RW'.      PERFORM boton_exit_program.
  341.   ENDCASE.
  342. ENDFORM.
  343.  
  344. FORM boton_exit_program.
  345. *--[ Destruir controladores y ALVs
  346. *  data:l_resp(1). perform confirmar_salida using l_resp. check l_resp eq abap_true.
  347.   cc_01->free( ).
  348.  
  349.   FREE: cc_01.
  350.   CLEAR: cc_01, grid_01.
  351.   LEAVE TO SCREEN 0.
  352. ENDFORM.
  353.  
  354. FORM boton_upload.
  355.   DATA: t_files TYPE filetable,
  356.         l_name  TYPE string,
  357.         l_len   TYPE i,
  358.         l_r     TYPE xfeld,
  359.         t_tab   TYPE STANDARD TABLE OF ssfbin,
  360.         e_rc    TYPE sysubrc,
  361.         x_s     TYPE xstring,
  362.         l_fname TYPE string, l_path TYPE string.
  363.  
  364.   CALL METHOD cl_gui_frontend_services=>file_open_dialog
  365.     EXPORTING
  366.       window_title            = 'Subir ficheros'
  367.       multiselection          = abap_true
  368.     CHANGING
  369.       file_table              = t_files
  370.       rc                      = e_rc
  371. *     user_action             = l_action
  372. *     file_encoding           =
  373.     EXCEPTIONS
  374.       file_open_dialog_failed = 1
  375.       cntl_error              = 2
  376.       error_no_gui            = 3
  377.       not_supported_by_gui    = 4
  378.       OTHERS                  = 5.
  379.  
  380.   LOOP AT t_files INTO DATA(l_files).
  381.     l_name = l_files-filename.
  382.  
  383.     REFRESH t_tab.
  384.  
  385.     DATA(l_filez) = NEW zcl_file_main( i_filez = l_name ).
  386.     l_filez->set_bin( ).
  387.     l_filez->load( CHANGING p_table = t_tab ).
  388.     l_filez->set_server( ).
  389.     l_name = |{  p_dir }/{ l_filez->get_split_name( ) }|.
  390.     l_name = replace( val = l_name sub = '//' with = '/' occ = 0 ).
  391.     l_FILEZ->set_filename( l_name ).
  392.     l_filez->save( CHANGING p_table = t_tab ).
  393.  
  394.     AT LAST.
  395.       PERFORM data_load.
  396.       grid_01->refresh_table_display( ).
  397.     ENDAT.
  398.   ENDLOOP.
  399.  
  400. ENDFORM.
  401.  
  402. FORM boton_rename.
  403.   DATA: index_rows TYPE lvc_t_row,
  404.         l_ans(1),
  405.         t_bin      TYPE STANDARD TABLE OF ssfbin,
  406.         l_name     TYPE string.
  407.   grid_01->get_selected_rows( IMPORTING et_index_rows = index_rows ).
  408.   IF lines( index_rows ) = 1.
  409.     READ TABLE t_tab_01 INDEX index_rows[ 1 ]-index INTO l_tab_01.
  410.  
  411.     SELECT tabname, fieldname FROM DD03l INTO @DATA(l_random)
  412.       UP TO 1 ROWS
  413.       WHERE tabname LIKE 'T%' AND inttype = 'C' AND intlen  = 200. ENDSELECT.
  414.     DATA(t_fields) = VALUE ty_sval( ( tabname  = l_random-tabname
  415.                                   fieldname = l_random-fieldname
  416.                                   fieldtext = 'Nombre'
  417.                                   value = l_tab_01-name
  418.                                   field_obl = abap_true
  419.                                  )
  420.                                 ).
  421.     DO.
  422.       CALL FUNCTION 'POPUP_GET_VALUES'
  423.         EXPORTING
  424.           popup_title     = 'Renombrar'
  425. *         START_COLUMN    = '5'
  426. *         START_ROW       = '5'
  427.         IMPORTING
  428.           returncode      = l_ans
  429.         TABLES
  430.           fields          = t_fields
  431.         EXCEPTIONS
  432.           error_in_fields = 1
  433.           OTHERS          = 2.
  434.       IF sy-subrc EQ 0 AND l_ans IS INITIAL.
  435.         IF l_tab_01-name = t_fields[ 1 ]-value OR t_fields[ 1 ]-value IS INITIAL.
  436. *--[ Bucle
  437.           t_fields[ 1 ]-value = l_tab_01-name.
  438.           MESSAGE s398(00) WITH 'El nombre debe ser diferente'.
  439.         ELSE.
  440. *--[ Renombramos... sería mejor hacerlo desde el sistema operativo, pero
  441. *--[ Los clientes no dejan hacer estas cosas :'(
  442.           REFRESH t_bin.
  443.           DATA(l_destino) = NEW zcl_file_main( i_filez = CONV string( |{ p_dir }/{ t_fields[ 1 ]-value }| ) ).
  444.           DATA(l_origen)  = NEW zcl_file_main( i_filez = CONV string( l_tab_01-fullname ) ).
  445.           l_destino->set_bin( ).
  446.           l_destino->set_server( ).
  447.           l_origen->set_bin( ).
  448.           l_origen->set_server( ).
  449.           l_destino->load( CHANGING p_table = t_bin ).
  450.           IF l_destino->get_subrc( ) NE 0.
  451.             REFRESH t_bin.
  452.             l_origen->load( CHANGING p_table = t_bin ).
  453.             l_destino->set_filesize( l_origen->get_filesize( ) ).
  454.             l_destino->save( CHANGING p_table = t_bin ).
  455.  
  456.             PERFORM data_load.
  457.             grid_01->refresh_table_display( ).
  458.             EXIT.
  459.           ELSE.
  460.             MESSAGE s398(00) WITH 'El nombre del fichero ya existe' '' '' ''.
  461.           ENDIF.
  462.         ENDIF.
  463.       ELSE.
  464.         EXIT.
  465.       ENDIF.
  466.     ENDDO.
  467.   ELSE.
  468.     MESSAGE s398(00) WITH 'Debe seleccionar un registro' '' '' ''.
  469.   ENDIF.
  470. ENDFORM.
  471.  
  472. FORM boton_copy.
  473.   DATA: index_rows TYPE lvc_t_row,
  474.         l_ans(1),
  475.         t_bin      TYPE STANDARD TABLE OF ssfbin,
  476.         l_name     TYPE string.
  477.   grid_01->get_selected_rows( IMPORTING et_index_rows = index_rows ).
  478.  
  479.   IF lines( index_rows ) >= 1.
  480.     l_name = |&#191;Desea Copiar o Mover los { lines( index_rows ) } fichero(s)?|.
  481.     CALL FUNCTION 'POPUP_TO_CONFIRM'
  482.       EXPORTING
  483.         titlebar              = 'Copiar/Mover'
  484.         text_question         = l_name
  485.         text_button_1         = 'Copiar'
  486.         text_button_2         = 'Mover'
  487.         display_cancel_button = abap_true
  488.       IMPORTING
  489.         answer                = l_ans
  490. *     TABLES
  491. *       PARAMETER             =
  492.       EXCEPTIONS
  493.         text_not_found        = 1
  494.         OTHERS                = 2.
  495.     CHECK sy-subrc EQ 0 AND l_ans CA '12'.
  496.  
  497. *--[ Escoger directorio de destin
  498.     DATA: i_filez TYPE string.
  499.     IF g_event_01->l_auth = g_event_01->c_auth_all.
  500.       i_filez = '/'. "<-- ROOT
  501.     ELSE.
  502.       i_filez = p_dir.
  503.     ENDIF.
  504.  
  505.     DATA(l_filez) = NEW zcl_file_main( i_filez = CONV string( l_tab_01-fullname ) ).
  506.     l_filez->set_bin( ).
  507.     l_filez->set_server( ).
  508.     l_filez->help_me( EXPORTING i_mask = '*.' CHANGING i_filez = i_filez ).
  509.     IF i_filez IS NOT INITIAL AND l_filez->get_subrc( ) IS INITIAL.
  510.  
  511. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  512. *--[ Esto debería hacerse con una llamada al sistema operativo
  513. *--[ pero hay clientes muy rudos
  514. *--[
  515.       LOOP AT index_rows INTO DATA(l_i).
  516.         READ TABLE t_tab_01 INTO l_tab_01 INDEX l_i-index.
  517.         REFRESH t_bin.
  518.         l_filez->set_filename( CONV string( l_tab_01-fullname ) ).
  519.         l_filez->load( CHANGING p_table = t_bin ).
  520.         l_filez->set_filename( |{ i_filez }/{ l_filez->get_split_name( ) }| ).
  521.         l_filez->save( CHANGING p_table = t_bin ).
  522.         IF l_filez->get_subrc( ) IS NOT INITIAL.
  523.           MESSAGE s398(00) WITH 'Error al copiar/mover' i_filez '' ''.
  524.           EXIT.
  525.         ENDIF.
  526.         IF l_ans = '2'. " -> MOVER
  527.           l_filez->set_filename( CONV string( l_tab_01-fullname ) ).
  528.           l_filez->delete( ).
  529.         ENDIF.
  530.         AT LAST.
  531.           MESSAGE s398(00) WITH 'Se han copiado/movido los ficheros a' i_filez '' ''.
  532.           IF l_ans = '2'.
  533.             PERFORM data_load.
  534.             grid_01->refresh_table_display( ).
  535.           ENDIF.
  536.         ENDAT.
  537.       ENDLOOP.
  538.  
  539.     ENDIF.
  540.  
  541.   ELSE.
  542.     MESSAGE s398(00) WITH 'Debe seleccionar al menos un registro' '' '' ''.
  543.   ENDIF.
  544. ENDFORM.
  545.  
  546. FORM boton_delete.
  547.   DATA: index_rows TYPE lvc_t_row,
  548.         l_1s       TYPE xfeld,
  549.         l_ans(1).
  550.   DATA: l_name TYPE string.
  551.  
  552.   CLEAR l_1s.
  553.  
  554.   grid_01->get_selected_rows( IMPORTING et_index_rows = index_rows ).
  555.  
  556.   IF lines( index_rows ) >= 1.
  557.     SORT index_rows BY index DESCENDING.
  558.     l_name = |&#191;Está seguro de querer borrar { lines( index_rows ) } fichero(s)?|.
  559.     CALL FUNCTION 'POPUP_TO_CONFIRM'
  560.       EXPORTING
  561.         titlebar       = 'Confirmación'
  562.         text_question  = l_name
  563.         text_button_1  = 'Sí'
  564.         text_button_2  = 'No'
  565.       IMPORTING
  566.         answer         = l_ans
  567. *     TABLES
  568. *       PARAMETER      =
  569.       EXCEPTIONS
  570.         text_not_found = 1
  571.         OTHERS         = 2.
  572.     CHECK sy-subrc EQ 0 AND l_ans = '1'.
  573.     .
  574.     IF sy-subrc <> 0.
  575. *--[ Nothing ToDo ... yet
  576.     ENDIF.
  577.  
  578.     LOOP AT index_rows INTO DATA(l_i).
  579.       READ TABLE t_tab_01 INTO l_tab_01 INDEX l_i-index.
  580.       CHECK sy-subrc EQ 0.
  581.       DATA(l_tabix) = sy-tabix.
  582.  
  583.       DATA(lcl) = NEW zcl_file_main( i_filez = CONV string( l_tab_01-fullname ) ).
  584.       lcl->set_server( ).
  585.       lcl->delete( ).
  586.       DELETE t_tab_01 INDEX  l_i-index.
  587.       AT LAST.
  588.         l_tabix = lines( index_rows ).
  589.         MESSAGE s398(00) WITH 'Ficheros borrados:' l_tabix.
  590.         grid_01->refresh_table_display( ).
  591.       ENDAT.
  592.     ENDLOOP.
  593.   ELSE.
  594.     MESSAGE s398(00) WITH 'Debe seleccionar al menos un registro' '' '' ''.
  595.   ENDIF.
  596. ENDFORM.
  597.  
  598. FORM boton_refrescar.
  599.   PERFORM data_load.
  600.   grid_01->refresh_table_display( ).
  601. ENDFORM.
  602.  
  603. FORM boton_download.
  604.   DATA: index_rows TYPE lvc_t_row,
  605.         l_ix       TYPE string,
  606.         l_1s       TYPE xfeld,
  607.         lx         TYPE xstring,
  608.         lx_a       TYPE xstring,
  609.         l_action   TYPE i,
  610.         t_bin      TYPE STANDARD TABLE OF ssfbin.
  611.  
  612.   CLEAR l_1s.
  613.  
  614.   grid_01->get_selected_rows( IMPORTING et_index_rows = index_rows ).
  615.  
  616.   IF lines( index_rows ) >= 1.
  617.     LOOP AT index_rows INTO DATA(l_i).
  618.       READ TABLE t_tab_01 INTO l_tab_01 INDEX l_i-index.
  619.       DATA: l_name TYPE string,
  620.             l_01   TYPE string,
  621.             l_02   TYPE string,
  622.             l_03   TYPE string.
  623.  
  624.       l_name = l_tab_01-name.
  625.       IF l_1s = abap_true.
  626.         l_03 = l_02 && l_name.
  627.       ELSE.
  628.         CLEAR: l_01, l_02, l_03.
  629.         CALL METHOD cl_gui_frontend_services=>file_save_dialog
  630.           EXPORTING
  631.             window_title              = 'Descargar'
  632.             default_file_name         = l_name
  633.             prompt_on_overwrite       = 'X'
  634.           CHANGING
  635.             filename                  = l_01
  636.             path                      = l_02
  637.             fullpath                  = l_03
  638.             user_action               = l_action
  639. *           file_encoding             =
  640.           EXCEPTIONS
  641.             cntl_error                = 1
  642.             error_no_gui              = 2
  643.             not_supported_by_gui      = 3
  644.             invalid_default_file_name = 4
  645.             OTHERS                    = 5.
  646.         IF l_action IS NOT INITIAL.
  647.           EXIT.
  648.         ENDIF.
  649.       ENDIF.
  650.  
  651.       IF NOT l_03 IS INITIAL AND sy-subrc EQ 0.
  652.  
  653.         REFRESH t_bin.
  654.         DATA(l_filez) = NEW zcl_file_main( i_filez = CONV string( l_tab_01-fullname ) ).
  655.         l_filez->set_bin( ).
  656.         l_filez->set_server( ).
  657.         l_filez->load( CHANGING p_table = t_bin ).
  658.         l_filez->set_local( ).
  659.         l_FILEZ->set_filename( l_03 ).
  660.         l_filez->save( CHANGING p_table = t_bin ).
  661.  
  662.       ENDIF.
  663.  
  664.       IF sy-subrc <> 0.
  665.  
  666.         MESSAGE i398(00) WITH TEXT-s02 l_03.
  667.         CONTINUE.
  668.       ELSE.
  669.         MESSAGE s398(00) WITH 'Descargado:'(001) l_03.
  670.         l_ix = l_03.
  671.         TRANSLATE l_ix TO UPPER CASE.
  672.         IF l_ix CP '*.PDF'.
  673.           "<-- Se abriran sólo si has seleccionado máx 5
  674.           IF lines( index_rows ) <= 5.
  675.             CALL METHOD cl_gui_frontend_services=>execute
  676.               EXPORTING
  677.                 application            = l_03
  678.               EXCEPTIONS
  679.                 cntl_error             = 1
  680.                 error_no_gui           = 2
  681.                 bad_parameter          = 3
  682.                 file_not_found         = 4
  683.                 path_not_found         = 5
  684.                 file_extension_unknown = 6
  685.                 error_execute_failed   = 7
  686.                 synchronous_failed     = 8
  687.                 not_supported_by_gui   = 9
  688.                 OTHERS                 = 10.
  689.  
  690.             IF sy-subrc <> 0.
  691. *--[ Nothing ToDo ... yet
  692.             ENDIF.
  693.           ENDIF.
  694.  
  695.         ENDIF.
  696.  
  697.       ENDIF.
  698.       l_1s = abap_true.
  699.  
  700.     ENDLOOP.
  701.   ELSE.
  702.     MESSAGE s398(00) WITH TEXT-e01 DISPLAY LIKE 'E'.
  703.   ENDIF.
  704.  
  705. ENDFORM.
  706.  
  707. FORM f4_host.
  708.   DATA: i_filez TYPE string.
  709.   CHECK sy-tcode = 'SE38'. "<-- Sólo desde Local
  710.   DATA(lcl) = NEW zcl_file_main( ).
  711.   lcl->set_server( ).
  712.   i_filez = p_dir.
  713.   lcl->help_me( EXPORTING i_mask = '*.' CHANGING i_filez = i_filez ).
  714.  
  715.   p_dir = i_filez.
  716. ENDFORM.