*--[ INCLUDE ZXX_I_BROWSER_FRM.
FORM data_list.
CALL SCREEN '0100'.
ENDFORM.
FORM eve_start_of_selection_o..
LOOP AT SCREEN.
IF sy-tcode CP '*NASA*'.
IF screen-name CP '*P_DIR*'.
screen-input = 0.
MODIFY SCREEN.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM.
FORM eve_initialization.
ENDFORM.
form f4_dir CHANGING p_dir.
endform.
FORM data_load.
DATA: l_name TYPE eps2filnam,
t_tab TYPE STANDARD TABLE OF eps2fili.
*" VALUE(FROMLINE) TYPE I DEFAULT 0
*" VALUE(NRLINES) TYPE I DEFAULT 1000
*" TABLES
*" FILE_TBL STRUCTURE SALFLDIR
l_name = p_dir.
* CALL FUNCTION 'RZL_READ_DIR_LOCAL'
* EXPORTING
* name = l_name
** FROMLINE = 0
** NRLINES = 1000
* TABLES
* file_tbl = t_tab_01[]
* EXCEPTIONS
* argument_error = 1
* not_found = 2
* no_admin_authority = 3
* OTHERS = 4.
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>-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.
PERFORM autoriazacion_nasa.
ENDFORM.
FORM autoriazacion_nasa.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ ESTO ES SOLO PARA NASA
CHECK sy-tcode = 'ZGVA_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.
SELECT SINGLE * FROM zgva_eb_infnasa INTO @DATA(li)
WHERE nombre_fichero = @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.
IF sy-subrc <> 0.
l_au = abap_true.
DELETE t_tab_01 INDEX l_tabix. CONTINUE.
ENDIF.
AUTHORITY-CHECK OBJECT 'ZEB_ORGAN'
ID 'ZEB_ORGANI' FIELD li-fcsub1.
IF sy-subrc <> 0.
l_au = abap_true.
DELETE t_tab_01 INDEX l_tabix.
CONTINUE.
ENDIF.
ENDLOOP.
IF l_au = abap_true AND sy-batch IS INITIAL.
MESSAGE i398(00) WITH TEXT-i01.
ENDIF.
ENDFORM.
FORM pbo_0100.
IF sy-tcode = 'SE38'.
REFRESH t_fcode.
ELSE.
APPEND 'UPLO' TO t_fcode.
append 'DELE' to t_fcode.
ENDIF.
SET PF-STATUS 'MAIN0100' EXCLUDING t_fcode.
SET TITLEBAR 'TIT01' WITH p_dir.
IF cc_01 IS INITIAL.
* gs_layout-cwidth_opt = 'X'.
gs_layout-sel_mode = 'A'.
gs_variant-report = sy-repid.
CREATE OBJECT cc_01
EXPORTING
container_name = cm_01
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5.
CREATE OBJECT grid_01 EXPORTING i_parent = cc_01.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = 'EPS2FILI'
i_buffer_active = abap_false
*" VALUE(I_STRUCTURE_NAME) LIKE DD02L-TABNAME OPTIONAL
i_client_never_display = abap_true
i_bypassing_buffer = abap_true
* I_INTERNAL_TABNAME = 'T_TAB_01'
CHANGING
ct_fieldcat = t_fcat_01[]
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
DATA: ls_fcat LIKE LINE OF t_fcat_01.
CLEAR ls_fcat.
ls_fcat-fieldname = 'FECHA'.
* ls_fcat-ref_table = 'SCARR'.
* ls_fcat-type = 'DAT'.
ls_fcat-col_pos = lines( t_fcat_01 ) + 1.
* insert new line before CARRID (do not forget MANDT!).
* insert ls_fcat into p_fieldcat index 1.
APPEND ls_fcat TO t_fcat_01.
CLEAR ls_fcat.
ls_fcat-fieldname = 'HORA'.
* ls_fcat-ref_table = 'SCARR'.
* ls_fcat-type = 'DAT'.
ls_fcat-col_pos = lines( t_fcat_01 ) + 1.
* insert new line before CARRID (do not forget MANDT!).
* insert ls_fcat into p_fieldcat index 1.
APPEND ls_fcat TO t_fcat_01.
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 = 100.
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.
*
* MODIFY t_fcat_01 INDEX sy-tabix FROM lfc.
ENDLOOP.
* t_fcat_01[]. "<-- Mismo catálogo
PERFORM alv_remove_buttons.
CALL METHOD grid_01->set_table_for_first_display
EXPORTING
* i_structure_name = 'ZAVL_CP_ALV_ALV_ADMIN'
* 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.
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 'DOWN'. PERFORM boton_download.
WHEN 'UPLO'. PERFORM boton_upload.
WHEN 'DELE'. PERFORM boton_delete.
WHEN 'BYEBYE' . PERFORM boton_byebye.
WHEN 'BACK'. PERFORM boton_exit_program.
* WHEN 'SAVE'. PERFORM DaTA_save.
ENDCASE.
ENDFORM.
FORM add_bi_d USING p_fnam p_fval.
t_bi = VALUE #( BASE t_bi ( fnam = p_fnam fval = p_fval ) ).
ENDFORM.
FORM add_bi_p USING p_program p_dyn.
t_bi = VALUE #( BASE t_bi ( program = p_program
dynpro = p_dyn
dynbegin = 'X' ) ).
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_byebye.
cc_02->free( ).
FREE cc_02.
CLEAR grid_02.
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.
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 =
* 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.
CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
filename = l_name
filetype = 'BIN'
IMPORTING
filelength = l_len
* header =
CHANGING
data_tab = t_tab
* isscanperformed = SPACE
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
not_supported_by_gui = 17
error_no_gui = 18
OTHERS = 19.
.
IF sy-subrc EQ 0.
DATA: x_s TYPE xstring.
CLEAR x_s.
CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
EXPORTING
input_length = l_len
* FIRST_LINE = 0
* LAST_LINE = 0
IMPORTING
buffer = x_s
TABLES
binary_tab = t_tab
EXCEPTIONS
failed = 1
OTHERS = 2.
IF sy-subrc EQ 0.
DATA: l_fname TYPE string, l_path TYPE string.
CLEAR: l_fname, l_path.
CALL FUNCTION 'SO_SPLIT_FILE_AND_PATH'
EXPORTING
full_name = l_name
IMPORTING
stripped_name = l_fname
file_path = l_path
EXCEPTIONS
x_error = 1
OTHERS = 2.
IF sy-subrc EQ 0.
CONCATENATE p_dir '/' l_fname INTO l_name.
REPLACE ALL OCCURRENCES OF '//' IN l_name WITH '/' .
OPEN DATASET l_name FOR OUTPUT IN BINARY MODE.
IF sy-subrc EQ 0.
TRANSFER x_s TO l_name.
l_r = abap_true.
ENDIF.
CLOSE DATASET l_name.
ENDIF.
ENDIF.
ENDIF.
AT LAST.
IF l_r = abap_true.
PERFORM data_load.
grid_01->refresh_table_display( ).
ENDIF.
ENDAT.
ENDLOOP.
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.
CALL METHOD grid_01->get_selected_rows
IMPORTING
et_index_rows = index_rows.
IF lines( index_rows ) >= 1.
SORT index_rows BY index DESCENDING.
l_name = lines( index_rows ).
concatenate '¿Está seguro de querer borrar' l_name ' fichero(s)?'
into l_name SEPARATED BY ' '.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
TITLEBAR = 'Confirmación'
* DIAGNOSE_OBJECT = ' '
text_question = l_name
TEXT_BUTTON_1 = 'Sí'
* ICON_BUTTON_1 = ' '
TEXT_BUTTON_2 = 'No'
* ICON_BUTTON_2 = ' '
* DEFAULT_BUTTON = '1'
* DISPLAY_CANCEL_BUTTON = 'X'
* USERDEFINED_F1_HELP = ' '
* START_COLUMN = 25
* START_ROW = 6
* POPUP_TYPE =
* IV_QUICKINFO_BUTTON_1 = ' '
* IV_QUICKINFO_BUTTON_2 = ' '
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.
* Implement suitable error handling here
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.
l_name = l_tab_01-name.
CONCATENATE p_dir '/' l_name INTO l_name.
REPLACE ALL OCCURRENCES OF '//' IN l_name WITH '/' .
OPEN DATASET l_name FOR INPUT IN BINARY MODE.
IF sy-subrc EQ 0.
CLOSE DATASET l_name.
DELETE DATASET l_name.
DELETE t_tab_01 INDEX l_tabix.
l_1s = abap_true.
ENDIF.
ENDLOOP.
IF l_1s = abap_true.
grid_01->refresh_table_display( ).
ENDIF.
ENDIF.
ENDFORM.
FORM boton_download.
DATA: index_rows TYPE lvc_t_row,
l_1s TYPE xfeld.
CLEAR l_1s.
CALL METHOD 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_extension =
default_file_name = l_name
* with_encoding =
* file_filter =
* initial_directory =
prompt_on_overwrite = 'X'
CHANGING
filename = l_01
path = l_02
fullpath = l_03
* user_action =
* file_encoding =
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
invalid_default_file_name = 4
OTHERS = 5.
ENDIF.
IF NOT l_03 IS INITIAL AND sy-subrc EQ 0.
CONCATENATE p_dir '/' l_name INTO l_name.
* REFRESH: t_bi, t_mess.
* l_opt-dismode = 'E'.
* PERFORM add_bi_p USING 'SAPLC13Z' '1010'.
* PERFORM add_bi_d USING 'BDC_OKCODE' '=EEXO'.
* PERFORM add_bi_d USING 'RCGFILETR-FTAPPL' l_name.
* PERFORM add_bi_d USING 'RCGFILETR-FTFRONT' l_03.
* PERFORM add_bi_d USING 'RCGFILETR-IEFOW' 'X'.
* PERFORM add_bi_d USING 'RCGFILETR-FTFTYPE' 'BIN'.
*
* PERFORM add_bi_p USING 'SAPLC13Z' '1010'.
* PERFORM add_bi_d USING 'BDC_OKCODE' '/EECAN'.
*
* CALL TRANSACTION 'CG3Y' USING t_bi OPTIONS FROM l_opt MESSAGES INTO t_mess.
* IF sy-subrc EQ 0.
* MESSAGE s398(00) WITH TEXT-s01 l_03.
* ENDIF.
*
DATA lt_buffer TYPE TABLE OF string.
DATA lv_buffer TYPE string.
CLEAR lt_buffer.
* Opening the File
OPEN DATASET l_name FOR INPUT IN TEXT MODE
ENCODING DEFAULT WITH SMART LINEFEED IGNORING CONVERSION ERRORS.
IF sy-subrc <> 0.
MESSAGE i398(00) WITH TEXT-s02 l_03.
CONTINUE.
ENDIF.
DO.
READ DATASET l_name INTO lv_buffer.
IF sy-subrc <> 0.
EXIT.
ENDIF.
APPEND lv_buffer TO lt_buffer.
ENDDO.
ENDIF.
CLOSE DATASET l_name.
CALL METHOD cl_gui_frontend_services=>gui_download
EXPORTING
filename = l_03
CHANGING
data_tab = lt_buffer
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
not_supported_by_gui = 22
error_no_gui = 23
OTHERS = 24.
IF sy-subrc <> 0.
MESSAGE i398(00) WITH TEXT-s02 l_03.
CONTINUE.
ELSE.
MESSAGE s398(00) WITH 'Descargado:'(001) l_03.
ENDIF.
l_1s = abap_true.
ENDLOOP.
ELSE.
MESSAGE s398(00) WITH TEXT-e01 DISPLAY LIKE 'E'.
ENDIF.
ENDFORM.