Para los abapers es común que nos pidan hacer programas para descargar información que generalmente se procesa y analiza luego en Excel, dicho archivo debe guardarse en algún lugar de la computadora de la persona que desea descargar el archivo. En estos casos debemos mostrar el cuadro de dialogo “Guardar Como …” para que la persona pueda seleccionar la carpeta y el nombre del archivo que desea utilizar.Para hacer esto podemos hacer uso de las funciones file_save_dialog y GUI_DOWNLOAD, como se muestra a continuación:
DATA: ld_filename TYPE string,
ld_path TYPE string,
ld_fullpath TYPE string,
ld_result TYPE i,
file TYPE string.
"Tabla interna con los datos que deseamos grabar en archivo de texto
DATA: it_xml LIKE STANDARD TABLE OF line WITH HEADER LINE.
"Función para mostrar ventana para seleccionar archivo
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title = 'Guardar archivo' "Titulo del dialogo
default_extension = 'TXT' "Extension predeterminada
default_file_name = 'File' "Nombre predeterminado del archivo
initial_directory = 'C:\' "Directorio inicial
CHANGING
filename = ld_filename
path = ld_path
fullpath = ld_fullpath
user_action = ld_result.
file = ld_fullpath.
"Función para descargar archivos
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = file "Nombre del archivo
filetype = 'ASC' "Tipo de archivo (texto)
TABLES
data_tab = it_xml "Tabla interna con los datos
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.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
Mostrar dialogo (ventana) para guardar archivo en ABAP.