✒️ABAP Los archivos locales y el upload de datos
ABAP Los archivos locales y el upload de datos
Tratamiento de archivos locales
ABAP nos pemite usar métodos predefinidos para hacer el tratamiento de archivos locales. Podemos usar la clase CL_GUI_FRONTEND_SERVICES.
- Para observar los métodos de una clase podemos hacerlo de dos formas diferentes.
- 1. En el editor de código le damos Pattern (modelo) y luego seleccionamos ABAP Object Pattern y le damos Clase/Interface y colocamos CL_GUI_FRONTEND_SERVICES, finalmente le damos en método y en la ayuda de búsqueda seleccionamos para que nos de todos los métodos que tiene esa clase.
- 2. Podemos ver los métodos usando la tcode SE24.
Algunos de los métodos que tenemos son:
- FILE_OPEN_DIALOG: para mostrar la pantalla de navegación que permita al usuario poder seleccionar el archivo del directorio de su PC.
- GUI_DOWNLOAD: para descargar datos de los programas a archivos en la PC.
- GUI_UPLOAD: para bajar datos de los archivos de la PC a nuestros programas.
FILE_OPEN_DIALOG:
En este método tenemos tres parámetros más importantes que son:
1. WINDOW_TITLE: Asinga un nombre a la ventana de búsqueda.
2. DEFAULT_FILENAME: Contiene el nombre del archivo que deseamos buscar en nuestra PC.
3. FILE_TABLE: Contiene la ruta y el nombre del archivo seleccionado.
LECTURA DE DATOS DE LOS ARCHIVOS LOCALES
Para leer datos de los archivos locales en las tablas internas de nuestros programas, utilziaremos el método GUI_UPLOAD.
En el métod GUI_UPLOAD, tenemos dos parámetros importantes que son:
1. FILENAME: Contiene el directorio y nombre del archivo local con el que estamos trabajando.
2. HAS_FIELD_SEPARATOR: Indica que el archivo local tiene separadores.
3. DATA_TAB: es la tabla interna donde almacenaremos los datos del archivo local.
4. FILETYPE: contiene el tipo o extensión del archivo local. Los tipos admitidos son:
- BIN: para archivos binarios.
- ASC: para achivos ASCII.
- DAT: para archivos excel. Las columnas son separadas utilizando tabs. Las líneas son separadas con saltos de línea.
- WK1: para archivos excel y de lotus.
EJERCICIO
Leer la información de los usuarios y posteriormente grabarla en la base de datos. Para ello tendrá que verificar que el estado_civil del usuario sea el correcto. En caso de no ser el indicado por el dominio entonces debemos de detener el programa y no grabar nada.
SOLUCIÓN
*&---------------------------------------------------------------------*
*& Report ZUPLOAD_DATOS
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zupload_datos.
PARAMETERS: p_path LIKE rlgrap-filename.
*DATA: BEGIN OF ti_usuarios OCCURS 0,
* dni LIKE ztabla_usuarios-dni,
* nombre_ape LIKE ztabla_usuarios-nombre_ape,
* estado_usu LIKE ztabla_usuarios-estado_usu,
* direccion LIKE ztabla_usuarios-direccion,
* codigo_postal LIKE ztabla_usuarios-codigo_postal,
* f_nacimiento LIKE ztabla_usuarios-fecha_nac,
* estado_civil LIKE ztabla_usuarios-estado_civil,
* END OF ti_usuarios.
DATA: dni LIKE ztabla_usuarios-dni,
nombre_ape LIKE ztabla_usuarios-nombre_ape,
estado_usu LIKE ztabla_usuarios-estado_usu,
direccion LIKE ztabla_usuarios-direccion,
codigo_postal LIKE ztabla_usuarios-codigo_postal,
fecha_nac LIKE ztabla_usuarios-fecha_nac,
estado_civil LIKE ztabla_usuarios-estado_civil.
DATA: ti_usuarios LIKE ztabla_usuarios OCCURS 0 WITH HEADER LINE.
DATA: wa_user LIKE LINE OF ti_usuarios.
DATA: tmp_table TYPE TABLE OF string,
linea TYPE string.
DATA: domain TYPE string VALUE 'ZZ_ESTADO_CIVIL'.
DATA: ti_estado_civil TYPE TABLE OF ztabla_usuarios-estado_civil.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path.
* Este evento nos permite que cuando seleccionamos el textview se habilite
* un icono que nos pemritira seleccionar el archivo.
PERFORM abrir_dialogo.
START-OF-SELECTION.
PERFORM obtener_dominio USING domain.
PERFORM hacer_upload.
PERFORM llenar_tabla TABLES tmp_table.
PERFORM cargar_base_datos TABLES ti_usuarios.
FORM abrir_dialogo.
DATA: tl_filetable TYPE filetable,
stl_file_table TYPE file_table,
vl_rc TYPE i.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = 'Abrir archivo'
* default_extension =
default_filename = '*'
* file_filter = '.doc'
* with_encoding =
* initial_directory =
* multiselection =
CHANGING
file_table = tl_filetable
rc = vl_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.
READ TABLE tl_filetable INDEX 1 INTO stl_file_table. "Almacena la ruta
IF sy-subrc <> 0.
* Implement suitable error handling here
ELSE.
MOVE stl_file_table TO p_path.
ENDIF.
ENDFORM.
FORM hacer_upload.
DATA: vl_file TYPE string.
IF p_path IS INITIAL.
MESSAGE e000(demo) WITH 'No hay ruta'.
ELSE.
MOVE p_path TO vl_file.
CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
filename = vl_file
filetype = 'ASC'
* has_field_separator = ';'
* header_length = 0
* read_by_line = 'X'
* dat_mode = SPACE
* codepage = SPACE
* ignore_cerr = ABAP_TRUE
* replacement = '#'
* virus_scan_profile =
* IMPORTING
* filelength =
* header =
CHANGING
data_tab = tmp_table
* 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 <> 0.
"implement suitable error handling here
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
IF tmp_table[] IS INITIAL.
MESSAGE: s000(demo) WITH 'Archivo sin datos'.
ENDIF.
ENDIF.
ENDFORM.
FORM llenar_tabla TABLES ti_users.
LOOP AT ti_users INTO linea.
SPLIT linea AT ';' INTO
dni
nombre_ape
estado_usu
direccion
codigo_postal
fecha_nac
estado_civil.
* Verificamos que efectivamente exista el estado civil de lo
* contrario se muestra un mensaje de error.
READ TABLE ti_estado_civil WITH KEY estado_civil TRANSPORTING NO FIELDS.
IF sy-subrc NE 0.
MESSAGE e000(demo) WITH 'El estado civil no es valido'.
ELSE.
ti_usuarios-dni = dni.
ti_usuarios-nombre_ape = nombre_ape.
ti_usuarios-estado_usu = estado_usu.
ti_usuarios-direccion = direccion.
ti_usuarios-codigo_postal = direccion.
ti_usuarios-fecha_nac = fecha_nac.
ti_usuarios-estado_civil = estado_civil.
APPEND ti_usuarios.
CLEAR ti_usuarios.
ENDIF.
ENDLOOP.
ENDFORM.
FORM cargar_base_datos TABLES ti_usuarios.
TRY.
INSERT ztabla_usuarios FROM TABLE ti_usuarios.
CATCH cx_sy_open_sql_db.
MESSAGE e000(demo) WITH 'error al intentar ingresar los datos a la db'.
ENDTRY.
IF sy-subrc <> 0.
MESSAGE e000(demo) WITH 'error al intentar ingresar los datos a la db'.
ELSE.
COMMIT WORK.
ENDIF.
ENDFORM.
FORM obtener_dominio USING VALUE(domain).
"https://www.erpworkbench.com/sap-dictionary/domain-values.htm
* DATA: it_dd07t TYPE STANDARD TABLE OF dd07t,
* wa_dd07t LIKE LINE OF it_dd07t.
* SELECT *
* FROM dd07t
* INTO TABLE it_dd07t
* WHERE domname EQ domain AND ddlanguage EQ sy-langu.
*
* LOOP AT it_dd07t INTO wa_dd07t.
* WRITE:/ wa_dd07t-domvalue_l.
* ENDLOOP.
SELECT domvalue_l
FROM dd07t
INTO TABLE ti_estado_civil
WHERE domname EQ domain AND ddlanguage = sy-langu.
ENDFORM.
 
 
 
Sobre el autor
Publicación académica de Juan Pablo Giron Ruiz, en su ámbito de estudios para la Carrera Consultor ABAP.
Juan Pablo Giron Ruiz
Colombia - Legajo: FG66E
✒️Autor de: 21 Publicaciones Académicas
🎓Egresado de los módulos:
Disponibilidad Laboral: FullTime
Presentación:
Ingeniero electrónico con conocimientos sólidos en ciencias de la computación y magister en ciencias de ingeniería eléctrica. proactivo y amante a los retos profesionales.
Certificación Académica de Juan Giron