ABAPBROWSERDOWN
- REPORT ZXX_PRG_BROWSER.
- INCLUDE ZXX_XX_I_BROWSER_TOP.
- INCLUDE ZXX_XX_I_BROWSER_SEL.
- INCLUDE ZXX_XX_I_BROWSER_CLS.
- INCLUDE ZXX_XX_I_BROWSER_EVE.
- INCLUDE ZXX_XX_I_BROWSER_FRM.
- *--[ INCLUDE ZXX_I_BROWSER_TOP.
- CONSTANTS: c_version type string value '02.01'.
- *--[ 2.0 - 20241216 + Lavado de código y mejoras
- *--[ 2.1 - 20241218 + Botón de Copiar/Pegar + Renombrar
- types: begin of ty_alv.
- include STRUCTURE EPS2FILI.
- types:
- Fecha type DatUM,
- hora type uzeit,
- fullname type c LENGTH 1023,
- end of ty_alv.
- DATA: g_error TYPE sy-subrc,
- g_okcode TYPE sy-ucomm,
- g_titulo(255),
- t_fcode TYPE TABLE OF sy-ucomm,
- cc_01 TYPE REF TO cl_gui_custom_container,
- G_Split TYPE REF TO cl_gui_splitter_container,
- g_html_control TYPE REF TO cl_gui_html_viewer,
- cm_01 TYPE scrfname VALUE 'CC_ALV_01',
- gs_layout TYPE lvc_s_layo,
- gs_layout_02 TYPE lvc_s_layo,
- gs_variant TYPE disvariant,
- g_auth type string,
- grid_01 TYPE REF TO cl_gui_alv_grid,
- grid_02 TYPE REF TO cl_gui_alv_grid,
- t_tab_01 TYPE STANDARD TABLE OF ty_alv, "EPS2FILI,
- l_tab_01 LIKE LINE OF t_tab_01,
- t_fcat_01 TYPE lvc_t_fcat,
- gt_toolbar TYPE ui_functions,
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[
- end_of_data(1).
- *--[ INCLUDE ZXX_I_BROWSER_SEL.
- SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME.
- PARAMETERS: p_dir TYPE text255 OBLIGATORY LOWER CASE.
- SELECTION-SCREEN END OF BLOCK b01.
- SELECTION-SCREEN BEGIN OF BLOCK b02 WITH FRAME.
- SELECT-OPTIONS: s_mask for syst-lisel LOWER CASE,
- s_datum FOR syst-datum,
- s_uzeit FOR syst-uzeit.
- SELECTION-SCREEN END OF BLOCK b02.
- MODULE pbo_0100 OUTPUT.
- PERFORM pbo_0100.
- ENDMODULE.
- MODULE pai_0100 INPUT.
- PERFORM pai_0100.
- ENDMODULE.
- *--[ INCLUDE ZXX_I_BROWSER_CLS
- CLASS lcl_event_handler DEFINITION FINAL.
- PUBLIC SECTION .
- CONSTANTS: c_auth_all type string VALUE 'ALL',
- c_auth_display type string value 'DISPLAY'.
- data: l_auth type string.
- METHODS:
- handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
- IMPORTING e_object, " e_interactive,
- handle_hotspot_click
- FOR EVENT hotspot_click OF cl_gui_alv_grid
- IMPORTING e_row_id e_column_id,
- handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
- IMPORTING e_ucomm .
- ENDCLASS.
- DATA: G_event_01 TYPE REF TO lcl_event_handler.
- CLASS lcl_event_handler IMPLEMENTATION .
- METHOD handle_hotspot_click.
- PERFORM handle_hotspot USING e_row_id e_column_id.
- endmethod.
- METHOD handle_toolbar.
- DATA(l_modo) = abap_false.
- if l_auth ne c_auth_all.
- l_modo = abap_true.
- endif.
- e_object->mt_toolbar = VALUE #( BASE e_object->mt_toolbar
- ( butn_type = 0
- function = 'REFR'
- icon = icon_refresh
- text = 'Refrescar'
- quickinfo = 'Refrescar ficheros del servidor'
- disabled = abap_false )
- ( butn_type = 0
- function = 'DOWN'
- icon = icon_cloud_download
- text = 'Descargar'
- quickinfo = 'Descargar Ficheros desde el servidor'
- disabled = abap_false )
- ( butn_type = 0
- function = 'UPLO'
- icon = icon_cloud_upload
- text = 'Cargar'
- quickinfo = 'Cargar Ficheros al servidor'
- disabled = l_modo )
- ( butn_type = 0
- function = 'RENA'
- icon = ICON_RENAME
- text = 'Renombrar'
- quickinfo = 'Cambiar nombre a los ficheros'
- disabled = l_modo )
- ( butn_type = 0
- function = 'COPY'
- icon = ICON_COPY_OBJECT
- text = 'Copiar/Mover'
- quickinfo = 'Copiar/Mover ficheros'
- disabled = l_modo )
- ( butn_type = 0
- function = 'DELE'
- icon = icon_delete
- text = 'Borrar'
- quickinfo = 'Borrar archivos del servidor'
- disabled = l_modo )
- ).
- ENDMETHOD.
- METHOD handle_user_command.
- CASE e_ucomm.
- WHEN 'REFR'. PERFORM boton_refrescar.
- WHEN 'DOWN'. PERFORM boton_download.
- WHEN 'UPLO'. PERFORM boton_upload.
- WHEN 'COPY'. PERFORM boton_copy.
- WHEN 'RENA'. PERFORM boton_rename.
- WHEN 'DELE'. PERFORM boton_delete.
- ENDCASE.
- ENDMETHOD.
- ENDCLASS.
Hay que incluir en esta parte la clase: Clase Lectura ficheros externos
- *--[ INCLUDE ZXX_I_BROWSER_EVE.
- AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_dir.
- perform F4_HOST.
- at SELECTION-SCREEN OUTPUT.
- perform eve_start_of_selection_o.
- START-OF-SELECTION.
- PERFORM data_load.
- end-of-SELECTION.
- PERFORM data_list.
- *--[ INCLUDE ZXX_I_BROWSER_FRM.
- FORM data_list.
- CALL SCREEN '0100'.
- ENDFORM.
- FORM eve_start_of_selection_o.
- CHECK sy-tcode CP '* NASA*'.
- LOOP AT SCREEN.
- CHECK screen-name CP '*P_DIR*'.
- screen-input = 0.
- MODIFY SCREEN.
- ENDLOOP.
- ENDFORM.
- FORM data_load.
- DATA: l_name TYPE eps2filnam,
- t_tab TYPE STANDARD TABLE OF eps2fili.
- l_name = p_dir.
- REFRESH t_tab_01.
- CALL FUNCTION 'EPS2_GET_DIRECTORY_LISTING'
- EXPORTING
- iv_dir_name = l_name
- file_mask = '*.*'
- * IMPORTING
- * DIR_NAME =
- * FILE_COUNTER =
- * ERROR_COUNTER =
- TABLES
- dir_list = t_tab_01
- EXCEPTIONS
- invalid_eps_subdir = 1
- sapgparam_failed = 2
- build_directory_failed = 3
- no_authorization = 4
- read_directory_failed = 5
- too_many_read_errors = 6
- empty_directory_list = 7
- OTHERS = 8.
- IF sy-subrc <> 0.
- * Implement suitable error handling here
- ENDIF.
- DELETE t_tab_01 WHERE name = '.' OR name = '..'.
- LOOP AT t_tab_01 ASSIGNING FIELD-SYMBOL(<f>).
- CLEAR sy-subrc.
- *20.01.2023 11:12:32
- *012345678901234567890
- <f>-fullname = |{ p_dir }/{ <f>-name }|.
- <f>-fecha = <f>-mtim+6(4) && <f>-mtim+3(2) && <f>-mtim+0(2).
- <f>-hora = <f>-mtim+11(2) && <f>-mtim+14(2) && <f>-mtim+17(2).
- ENDLOOP.
- SORT t_tab_01.
- DELETE t_tab_01 WHERE fecha NOT IN s_datum OR
- hora NOT IN s_uzeit OR
- name NOT IN s_mask.
- PERFORM autoriazacion_locales.
- DATA(l_lin) = lines( t_tab_01 ).
- MESSAGE s398(00) WITH 'Entontrados ' l_lin ' ficheros' ''.
- ENDFORM.
- FORM autoriazacion_locales.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ ESTO ES SOLO PARA AUTORIZACIONES DE CLIENTES
- CHECK sy-tcode CP'Z*_XX_TR_NASAFILES'.
- DATA: l_au TYPE xfeld.
- CLEAR l_au.
- *--[ Verificamos autorizacoines.
- LOOP AT t_tab_01 INTO DATA(l_01).
- DATA(l_tabix) = sy-tabix.
- DATA(l_nombre) = replace( val = replace( val = l_01-name sub = 'ES.' with = '%.' occ = 0 ) sub = 'CA.' with = '%.' occ = 0 ).
- SELECT SINGLE * FROM zgva_eb_infnasa INTO @DATA(li) WHERE nombre_fichero LIKE @l_01-name.
- IF sy-subrc NE 0. DELETE t_tab_01 INDEX l_tabix. CONTINUE. ENDIF.
- AUTHORITY-CHECK OBJECT 'ZEB_VERSI' ID 'ZEB_VER' FIELD li-version. DATA(l_subrc_01) = sy-subrc.
- AUTHORITY-CHECK OBJECT 'ZEB_ORGAN' ID 'ZEB_ORGANI' FIELD li-fcsub1. DATA(l_subrc_02) = sy-subrc.
- CHECK l_subrc_01 <> 0 OR l_subrc_02 NE 0.
- l_au = abap_true.
- DELETE t_tab_01 INDEX l_tabix.
- CONTINUE.
- ENDLOOP.
- IF l_au = abap_true AND sy-batch IS INITIAL.
- MESSAGE i398(00) WITH TEXT-i01.
- ENDIF.
- ENDFORM.
- FORM pbo_0100.
- SET TITLEBAR 'TIT01' WITH p_dir.
- IF cc_01 IS INITIAL.
- gs_layout_02-cwidth_opt = 'X'.
- gs_layout-sel_mode = 'A'.
- gs_layout_02-zebra = gs_layout-zebra = abap_true.
- gs_variant-report = sy-repid.
- cc_01 = NEW cl_gui_custom_container( cm_01 ).
- G_SPlIT = NEW cl_gui_splitter_container( parent = cc_01
- rows = 1
- columns = 2 ).
- *--[ LHRPADIT_REPO01:36
- grid_01 = NEW cl_gui_alv_grid( i_parent = G_SPlIT->get_container( row = 1 column = 1 ) ).
- * g_html_control = NEW cl_gui_html_viewer( parent = G_SPlIT->get_container( row = 1 column = 2 ) ).
- g_split->set_column_width( id = 2 width = 0 ).
- *--[ Creamos el FCAT de la tabla
- cl_salv_table=>factory( IMPORTING r_salv_table = DATA(l_alv) CHANGING t_table = t_tab_01 ).
- t_fcat_01 = cl_salv_controller_metadata=>get_lvc_fieldcatalog(
- r_columns = l_alv->get_columns( )
- r_aggregations = l_alv->get_aggregations( ) ).
- LOOP AT t_fcat_01 ASSIGNING FIELD-SYMBOL(<f>).
- CASE <f>-fieldname.
- WHEN 'NAME'.
- <f>-scrtext_s =
- <f>-scrtext_m =
- <f>-coltext = <f>-seltext =
- <f>-scrtext_l = TEXT-c01.
- <f>-outputlen = 80.
- <f>-col_opt = abap_true.
- <f>-hotspot = abap_true.
- WHEN 'SIZE'.
- <f>-scrtext_s =
- <f>-scrtext_m =
- <f>-coltext = <f>-seltext =
- <f>-scrtext_l = TEXT-c02.
- <f>-outputlen = 20.
- WHEN 'MTIM'.
- <f>-scrtext_s =
- <f>-scrtext_m =
- <f>-coltext = <f>-seltext =
- <f>-scrtext_l = TEXT-c03.
- <f>-no_out = abap_true.
- WHEN 'FECHA'.
- <f>-scrtext_s =
- <f>-scrtext_m =
- <f>-coltext = <f>-seltext =
- <f>-scrtext_l = 'Fecha'.
- <f>-outputlen = 10.
- * <f>-no_out = abap_true.
- WHEN 'HORA'.
- <f>-outputlen = 10.
- <f>-scrtext_s =
- <f>-scrtext_m =
- <f>-coltext =
- <f>-seltext =
- <f>-scrtext_l = 'Hora'.
- * <f>-no_out = abap_true.
- WHEN OTHERS.
- <f>-no_out = abap_true.
- *
- ENDCASE.
- ENDLOOP.
- PERFORM alv_remove_buttons.
- grid_01->set_table_for_first_display(
- EXPORTING
- * i_structure_name = 'ZXXX'
- * i_SAVE = 'A'
- is_variant = gs_variant
- is_layout = gs_layout
- it_toolbar_excluding = gt_toolbar
- CHANGING
- it_fieldcatalog = t_fcat_01 "gt_field
- it_outtab = t_tab_01 ).
- G_event_01 = NEW lcl_event_handler( ).
- PERFORM PBO_0100_autorizaciones.
- SET HANDLER G_event_01->handle_toolbar FOR grid_01.
- SET HANDLER G_event_01->handle_user_command FOR grid_01.
- SET HANDLER G_event_01->handle_hotspot_click FOR grid_01.
- grid_01->set_toolbar_interactive( ).
- ENDIF.
- ENDFORM.
- FORM PBO_0100_autorizaciones.
- IF sy-tcode = 'SE38'. "<-- Pont tu propia autorización
- g_event_01->l_auth = g_event_01->c_auth_all.
- ELSE.
- g_event_01->l_auth = g_event_01->c_auth_display.
- ENDIF.
- ENDFORM.
- FORM handle_hotspot USING e_row_id TYPE lvc_s_row
- e_column_id TYPE lvc_s_col.
- CASE e_column_id.
- WHEN 'NAME'.
- READ TABLE t_tab_01 INTO l_tab_01 INDEX e_row_id-index.
- PERFORM handle_hotspot_view_file.
- ENDCASE.
- ENDFORM.
- FORM handle_hotspot_view_file.
- DATA: gt_data TYPE TABLE OF x,
- gt_data_s TYPE STANDARD TABLE OF string,
- url(1023),
- t_fcat TYPE lvc_t_fcat,
- gt_dyn_table TYPE REF TO data,
- gw_line TYPE REF TO data.
- FIELD-SYMBOLS: <fst> TYPE table.
- CHECK l_tab_01-name IS NOT INITIAL.
- DATA(l_name) = |{ p_dir }/{ l_tab_01-name }|.
- DATA(l_filez) = NEW zcl_file_main( i_filez = l_name ).
- l_filez->set_server( ).
- IF to_upper( l_name ) CP '*.CSV'.
- l_filez->load( CHANGING p_table = gt_data_s ). "<- Por defecto en ASC
- ELSE.
- l_filez->set_bin( ).
- l_filez->load( CHANGING p_table = gt_data ).
- ENDIF.
- CHECK l_filez->get_subrc( ) EQ 0.
- DATA(l_ext) = to_upper( l_filez->get_split_ext( ) ).
- DATA: l_TYPE(1023),
- l_SUBTYPE(1023).
- l_subtype = l_EXT.
- CASE l_ext.
- WHEN 'PDF'. l_type = 'APPLICATION'.
- WHEN 'TXT' OR 'CSV' OR 'HTM' OR 'HTML' OR 'JSON' OR 'XML'. l_type = 'text/html'.
- WHEN OTHERS.
- MESSAGE s398(00) WITH 'Extensión no implementado' '' '' ''. EXIT.
- ENDCASE.
- g_split->set_column_width( id = 2 width = 50 ).
- TRY. g_html_control->free( ). CATCH cx_root. ENDTRY.
- TRY. grid_02->free( ). CATCH cx_root. ENDTRY.
- FREE: g_html_control, grid_02.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ FORMATO: CSV
- IF l_ext = 'CSV'.
- DATA(l_num) = count( val = gt_data_S[ 1 ] sub = ';' ).
- DO l_num TIMES.
- t_fcat = VALUE lvc_t_fcat( BASE t_fcat ( fieldname = |NAME_{ sy-index }|
- coltext = |FIELD { sy-index }|
- col_pos = sy-index
- outputlen = 255 "<-- Tal vez necesita ampliarse
- datatype = 'CHAR'
- inttype = 'C'
- intlen = 255
- )
- ).
- ENDDO.
- cl_alv_table_create=>create_dynamic_table(
- EXPORTING
- i_style_table = abap_true
- it_fieldcatalog = t_fcat
- IMPORTING
- ep_table = gt_dyn_table ).
- LOOP AT gt_data_s INTO DATA(ls).
- AT FIRST.
- ASSIGN gt_dyn_table->* TO <fst>.
- CREATE DATA gw_line LIKE LINE OF <fst>.
- ASSIGN gw_line->* TO FIELD-SYMBOL(<wa>).
- ENDAT.
- CLEAR <wa>.
- SPLIT ls AT ';' INTO TABLE DATA(t_tab).
- LOOP AT t_tab INTO DATA(l_tab).
- CHECK sy-index <= l_num.
- DATA(l_n) = |<wa>-NAME_{ sy-tabix }|.
- ASSIGN (l_n) TO FIELD-SYMBOL(<fcell>).
- <fcell> = l_tab.
- ENDLOOP.
- APPEND <wa> TO <fst>.
- REFRESH t_tab.
- AT LAST.
- grid_02 = NEW cl_gui_alv_grid( i_parent = G_SPlIT->get_container( row = 1 column = 2 ) ).
- grid_02->set_table_for_first_display(
- EXPORTING
- is_variant = gs_variant
- is_layout = gs_layout_02
- it_toolbar_excluding = gt_toolbar
- CHANGING
- it_fieldcatalog = t_fcat
- it_outtab = <fst> ).
- ENDAT.
- ENDLOOP.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ Por Defecto, lanzamos un navegador
- ELSE.
- g_html_control = NEW cl_gui_html_viewer( parent = G_SPlIT->get_container( row = 1 column = 2 ) ).
- g_html_control->load_data(
- EXPORTING type = l_type
- subtype = l_subtype
- IMPORTING assigned_url = url
- CHANGING data_table = gt_data ).
- cl_gui_cfw=>flush( ).
- g_html_control->show_data( EXPORTING url = url ).
- ENDIF.
- ENDFORM.
- FORM alv_remove_buttons.
- CLEAR gt_toolbar.
- APPEND cl_gui_alv_grid=>mc_fg_edit TO gt_toolbar.
- * append CL_GUI_ALV_GRID=>MC_FG_SORT to gt_toolbar.
- APPEND cl_gui_alv_grid=>mc_mb_subtot TO gt_toolbar.
- APPEND cl_gui_alv_grid=>mc_mb_sum TO gt_toolbar.
- APPEND cl_gui_alv_grid=>mc_mb_variant TO gt_toolbar.
- APPEND cl_gui_alv_grid=>mc_fc_detail TO gt_toolbar.
- ENDFORM.
- FORM pai_0100.
- DATA(l_okcode) = g_okcode.
- CLEAR g_okcode.
- CASE l_okcode.
- WHEN 'BACK' OR '%EX' OR 'RW'. PERFORM boton_exit_program.
- ENDCASE.
- ENDFORM.
- FORM boton_exit_program.
- *--[ Destruir controladores y ALVs
- * data:l_resp(1). perform confirmar_salida using l_resp. check l_resp eq abap_true.
- cc_01->free( ).
- FREE: cc_01.
- CLEAR: cc_01, grid_01.
- LEAVE TO SCREEN 0.
- ENDFORM.
- FORM boton_upload.
- DATA: t_files TYPE filetable,
- l_name TYPE string,
- l_len TYPE i,
- l_r TYPE xfeld,
- t_tab TYPE STANDARD TABLE OF ssfbin,
- e_rc TYPE sysubrc,
- x_s TYPE xstring,
- l_fname TYPE string, l_path TYPE string.
- CALL METHOD cl_gui_frontend_services=>file_open_dialog
- EXPORTING
- window_title = 'Subir ficheros'
- multiselection = abap_true
- CHANGING
- file_table = t_files
- rc = e_rc
- * user_action = l_action
- * file_encoding =
- EXCEPTIONS
- file_open_dialog_failed = 1
- cntl_error = 2
- error_no_gui = 3
- not_supported_by_gui = 4
- OTHERS = 5.
- LOOP AT t_files INTO DATA(l_files).
- l_name = l_files-filename.
- REFRESH t_tab.
- DATA(l_filez) = NEW zcl_file_main( i_filez = l_name ).
- l_filez->set_bin( ).
- l_filez->load( CHANGING p_table = t_tab ).
- l_filez->set_server( ).
- l_name = |{ p_dir }/{ l_filez->get_split_name( ) }|.
- l_name = replace( val = l_name sub = '//' with = '/' occ = 0 ).
- l_FILEZ->set_filename( l_name ).
- l_filez->save( CHANGING p_table = t_tab ).
- AT LAST.
- PERFORM data_load.
- grid_01->refresh_table_display( ).
- ENDAT.
- ENDLOOP.
- ENDFORM.
- FORM boton_rename.
- DATA: index_rows TYPE lvc_t_row,
- l_ans(1),
- t_bin TYPE STANDARD TABLE OF ssfbin,
- l_name TYPE string.
- grid_01->get_selected_rows( IMPORTING et_index_rows = index_rows ).
- IF lines( index_rows ) = 1.
- READ TABLE t_tab_01 INDEX index_rows[ 1 ]-index INTO l_tab_01.
- SELECT tabname, fieldname FROM DD03l INTO @DATA(l_random)
- UP TO 1 ROWS
- WHERE tabname LIKE 'T%' AND inttype = 'C' AND intlen = 200. ENDSELECT.
- DATA(t_fields) = VALUE ty_sval( ( tabname = l_random-tabname
- fieldname = l_random-fieldname
- fieldtext = 'Nombre'
- value = l_tab_01-name
- field_obl = abap_true
- )
- ).
- DO.
- CALL FUNCTION 'POPUP_GET_VALUES'
- EXPORTING
- popup_title = 'Renombrar'
- * START_COLUMN = '5'
- * START_ROW = '5'
- IMPORTING
- returncode = l_ans
- TABLES
- fields = t_fields
- EXCEPTIONS
- error_in_fields = 1
- OTHERS = 2.
- IF sy-subrc EQ 0 AND l_ans IS INITIAL.
- IF l_tab_01-name = t_fields[ 1 ]-value OR t_fields[ 1 ]-value IS INITIAL.
- *--[ Bucle
- t_fields[ 1 ]-value = l_tab_01-name.
- MESSAGE s398(00) WITH 'El nombre debe ser diferente'.
- ELSE.
- *--[ Renombramos... sería mejor hacerlo desde el sistema operativo, pero
- *--[ Los clientes no dejan hacer estas cosas :'(
- REFRESH t_bin.
- DATA(l_destino) = NEW zcl_file_main( i_filez = CONV string( |{ p_dir }/{ t_fields[ 1 ]-value }| ) ).
- DATA(l_origen) = NEW zcl_file_main( i_filez = CONV string( l_tab_01-fullname ) ).
- l_destino->set_bin( ).
- l_destino->set_server( ).
- l_origen->set_bin( ).
- l_origen->set_server( ).
- l_destino->load( CHANGING p_table = t_bin ).
- IF l_destino->get_subrc( ) NE 0.
- REFRESH t_bin.
- l_origen->load( CHANGING p_table = t_bin ).
- l_destino->set_filesize( l_origen->get_filesize( ) ).
- l_destino->save( CHANGING p_table = t_bin ).
- PERFORM data_load.
- grid_01->refresh_table_display( ).
- EXIT.
- ELSE.
- MESSAGE s398(00) WITH 'El nombre del fichero ya existe' '' '' ''.
- ENDIF.
- ENDIF.
- ELSE.
- EXIT.
- ENDIF.
- ENDDO.
- ELSE.
- MESSAGE s398(00) WITH 'Debe seleccionar un registro' '' '' ''.
- ENDIF.
- ENDFORM.
- FORM boton_copy.
- DATA: index_rows TYPE lvc_t_row,
- l_ans(1),
- t_bin TYPE STANDARD TABLE OF ssfbin,
- l_name TYPE string.
- grid_01->get_selected_rows( IMPORTING et_index_rows = index_rows ).
- IF lines( index_rows ) >= 1.
- l_name = |¿Desea Copiar o Mover los { lines( index_rows ) } fichero(s)?|.
- CALL FUNCTION 'POPUP_TO_CONFIRM'
- EXPORTING
- titlebar = 'Copiar/Mover'
- text_question = l_name
- text_button_1 = 'Copiar'
- text_button_2 = 'Mover'
- display_cancel_button = abap_true
- IMPORTING
- answer = l_ans
- * TABLES
- * PARAMETER =
- EXCEPTIONS
- text_not_found = 1
- OTHERS = 2.
- CHECK sy-subrc EQ 0 AND l_ans CA '12'.
- *--[ Escoger directorio de destin
- DATA: i_filez TYPE string.
- IF g_event_01->l_auth = g_event_01->c_auth_all.
- i_filez = '/'. "<-- ROOT
- ELSE.
- i_filez = p_dir.
- ENDIF.
- DATA(l_filez) = NEW zcl_file_main( i_filez = CONV string( l_tab_01-fullname ) ).
- l_filez->set_bin( ).
- l_filez->set_server( ).
- l_filez->help_me( EXPORTING i_mask = '*.' CHANGING i_filez = i_filez ).
- IF i_filez IS NOT INITIAL AND l_filez->get_subrc( ) IS INITIAL.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ Esto debería hacerse con una llamada al sistema operativo
- *--[ pero hay clientes muy rudos
- *--[
- LOOP AT index_rows INTO DATA(l_i).
- READ TABLE t_tab_01 INTO l_tab_01 INDEX l_i-index.
- REFRESH t_bin.
- l_filez->set_filename( CONV string( l_tab_01-fullname ) ).
- l_filez->load( CHANGING p_table = t_bin ).
- l_filez->set_filename( |{ i_filez }/{ l_filez->get_split_name( ) }| ).
- l_filez->save( CHANGING p_table = t_bin ).
- IF l_filez->get_subrc( ) IS NOT INITIAL.
- MESSAGE s398(00) WITH 'Error al copiar/mover' i_filez '' ''.
- EXIT.
- ENDIF.
- IF l_ans = '2'. " -> MOVER
- l_filez->set_filename( CONV string( l_tab_01-fullname ) ).
- l_filez->delete( ).
- ENDIF.
- AT LAST.
- MESSAGE s398(00) WITH 'Se han copiado/movido los ficheros a' i_filez '' ''.
- IF l_ans = '2'.
- PERFORM data_load.
- grid_01->refresh_table_display( ).
- ENDIF.
- ENDAT.
- ENDLOOP.
- ENDIF.
- ELSE.
- MESSAGE s398(00) WITH 'Debe seleccionar al menos un registro' '' '' ''.
- ENDIF.
- ENDFORM.
- FORM boton_delete.
- DATA: index_rows TYPE lvc_t_row,
- l_1s TYPE xfeld,
- l_ans(1).
- DATA: l_name TYPE string.
- CLEAR l_1s.
- grid_01->get_selected_rows( IMPORTING et_index_rows = index_rows ).
- IF lines( index_rows ) >= 1.
- SORT index_rows BY index DESCENDING.
- l_name = |¿Está seguro de querer borrar { lines( index_rows ) } fichero(s)?|.
- CALL FUNCTION 'POPUP_TO_CONFIRM'
- EXPORTING
- titlebar = 'Confirmación'
- text_question = l_name
- text_button_1 = 'Sí'
- text_button_2 = 'No'
- IMPORTING
- answer = l_ans
- * TABLES
- * PARAMETER =
- EXCEPTIONS
- text_not_found = 1
- OTHERS = 2.
- CHECK sy-subrc EQ 0 AND l_ans = '1'.
- .
- IF sy-subrc <> 0.
- *--[ Nothing ToDo ... yet
- ENDIF.
- LOOP AT index_rows INTO DATA(l_i).
- READ TABLE t_tab_01 INTO l_tab_01 INDEX l_i-index.
- CHECK sy-subrc EQ 0.
- DATA(l_tabix) = sy-tabix.
- DATA(lcl) = NEW zcl_file_main( i_filez = CONV string( l_tab_01-fullname ) ).
- lcl->set_server( ).
- lcl->delete( ).
- DELETE t_tab_01 INDEX l_i-index.
- AT LAST.
- l_tabix = lines( index_rows ).
- MESSAGE s398(00) WITH 'Ficheros borrados:' l_tabix.
- grid_01->refresh_table_display( ).
- ENDAT.
- ENDLOOP.
- ELSE.
- MESSAGE s398(00) WITH 'Debe seleccionar al menos un registro' '' '' ''.
- ENDIF.
- ENDFORM.
- FORM boton_refrescar.
- PERFORM data_load.
- grid_01->refresh_table_display( ).
- ENDFORM.
- FORM boton_download.
- DATA: index_rows TYPE lvc_t_row,
- l_ix TYPE string,
- l_1s TYPE xfeld,
- lx TYPE xstring,
- lx_a TYPE xstring,
- l_action TYPE i,
- t_bin TYPE STANDARD TABLE OF ssfbin.
- CLEAR l_1s.
- grid_01->get_selected_rows( IMPORTING et_index_rows = index_rows ).
- IF lines( index_rows ) >= 1.
- LOOP AT index_rows INTO DATA(l_i).
- READ TABLE t_tab_01 INTO l_tab_01 INDEX l_i-index.
- DATA: l_name TYPE string,
- l_01 TYPE string,
- l_02 TYPE string,
- l_03 TYPE string.
- l_name = l_tab_01-name.
- IF l_1s = abap_true.
- l_03 = l_02 && l_name.
- ELSE.
- CLEAR: l_01, l_02, l_03.
- CALL METHOD cl_gui_frontend_services=>file_save_dialog
- EXPORTING
- window_title = 'Descargar'
- default_file_name = l_name
- prompt_on_overwrite = 'X'
- CHANGING
- filename = l_01
- path = l_02
- fullpath = l_03
- user_action = l_action
- * file_encoding =
- EXCEPTIONS
- cntl_error = 1
- error_no_gui = 2
- not_supported_by_gui = 3
- invalid_default_file_name = 4
- OTHERS = 5.
- IF l_action IS NOT INITIAL.
- EXIT.
- ENDIF.
- ENDIF.
- IF NOT l_03 IS INITIAL AND sy-subrc EQ 0.
- REFRESH t_bin.
- DATA(l_filez) = NEW zcl_file_main( i_filez = CONV string( l_tab_01-fullname ) ).
- l_filez->set_bin( ).
- l_filez->set_server( ).
- l_filez->load( CHANGING p_table = t_bin ).
- l_filez->set_local( ).
- l_FILEZ->set_filename( l_03 ).
- l_filez->save( CHANGING p_table = t_bin ).
- ENDIF.
- IF sy-subrc <> 0.
- MESSAGE i398(00) WITH TEXT-s02 l_03.
- CONTINUE.
- ELSE.
- MESSAGE s398(00) WITH 'Descargado:'(001) l_03.
- l_ix = l_03.
- TRANSLATE l_ix TO UPPER CASE.
- IF l_ix CP '*.PDF'.
- "<-- Se abriran sólo si has seleccionado máx 5
- IF lines( index_rows ) <= 5.
- CALL METHOD cl_gui_frontend_services=>execute
- EXPORTING
- application = l_03
- EXCEPTIONS
- cntl_error = 1
- error_no_gui = 2
- bad_parameter = 3
- file_not_found = 4
- path_not_found = 5
- file_extension_unknown = 6
- error_execute_failed = 7
- synchronous_failed = 8
- not_supported_by_gui = 9
- OTHERS = 10.
- IF sy-subrc <> 0.
- *--[ Nothing ToDo ... yet
- ENDIF.
- ENDIF.
- ENDIF.
- ENDIF.
- l_1s = abap_true.
- ENDLOOP.
- ELSE.
- MESSAGE s398(00) WITH TEXT-e01 DISPLAY LIKE 'E'.
- ENDIF.
- ENDFORM.
- FORM f4_host.
- DATA: i_filez TYPE string.
- CHECK sy-tcode = 'SE38'. "<-- Sólo desde Local
- DATA(lcl) = NEW zcl_file_main( ).
- lcl->set_server( ).
- i_filez = p_dir.
- lcl->help_me( EXPORTING i_mask = '*.' CHANGING i_filez = i_filez ).
- p_dir = i_filez.
- ENDFORM.