✒️ABAP El Batch Input utilizando el Juego de datos
ABAP El Batch Input utilizando el Juego de datos
Haremos un Batch Input utilizando la técnica de Juego de Datos. Lo primero que tenemos que hacer es crear un archivo que cumpla con la estructura de la tabla ZTABLA_USUARIOS, sin tener en cuenta el campo mandante.
21567432Joaquin Perez ALarreo Alvarez 3454 134512081967S 31987623Barbara Pereira ALavalleja 543 145623091987S 27982134Eugenia Herrera AGuido 56 167507041979S
Igual que en los ejemplos anteriores, borraremos la tabla para la carga inicial y seguiremos los pasos de la siguiente manera.
DECLARACIÓN DE LOS DATOS PROPIOS DEL BATCH INPUT.
Se declara una tabla interna y una estructura, del tipo BDCDATA, y otra tabla interna que de usuarios que contendrá los registros que levantemos del archivo de entrada.
DATA: BEGIN OF ti_bdc_data OCCURS 0. INCLUDE STRUCTURE bdcdata. DATA: END OF ti_bdc_data. Estructura del BI DATA: st_bdc_data TYPE bdcdata. Tabla de usuarios DATA: BEGIN OF ti_archivo OCCURS 0, dni(8) TYPE c, "Dni nombre_ape(35) TYPE c, "Nombre y Apellido estado_usu(1) TYPE c, "Estado del usuario direccion(30) TYPE c, "Dirección codigo_postal(4) TYPE c, "Código Postal f_nacimiento(8) TYPE c, "Fecha Nacimiento estado_civil(1) TYPE c, "Estado civil END OF ti_archivo. DATA: st_archivo LIKE LINE OF ti_archivo. Variables DATA: v_campo(35) TYPE c, v_indice(2) TYPE c, v_qid TYPE apq_quid, v_group TYPE apq_grpn.
LECTURA DE DATOS DEL ARCHIVO DE ENTRADA
CALL METHOD cl_gui_frontend_services=>gui_upload EXPORTING filename = vl_file filetype = 'ASC' has_field_separator = '' CHANGING data_tab = ti_archivo[] 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.
APERTURA DE LA SESIÓN DEL JUEGO DE DATOS:
CALL FUNCTION 'BDC_OPEN_GROUP' EXPORTING client = sy-mandt group = v_group keep = 'X' user = sy-uname IMPORTING qid = v_qid EXCEPTIONS client_invalid = 1 destination_invalid = 2 group_invalid = 3 group_is_locked = 4 holddate_invalid = 5 internal_error = 6 queue_error = 7 running = 8 system_lock_error = 9 user_invalid = 10 OTHERS = 11.
CARGA DE LA TABLA BDCDATA.
Debemos utilizar la subrutina BDC_FIELD, antes debemos inicializar la tabla del Batch Input.
INSERCIÓN DEL JUEGO DE DATOS.
CALL FUNCTION 'BDC_INSERT' EXPORTING tcode = 'SM30' TABLES dynprotab = ti_bdc_data EXCEPTIONS internal_error = 1 not_open = 2 queue_error = 3 tcode_invalid = 4 printing_invalid = 5 posting_invalid = 6 OTHERS = 7.
CIERRE DE LA SESIÓN DEL JUEGO DE DATOS
Se utiliza la función BDC_CLOSE_GROUP, tal como vemos a continuación.
CALL FUNCTION 'BDC_CLOSE_GROUP' EXCEPTIONS not_open = 1 queue_error = 2 OTHERS = 3. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF.
EJECUCIÓN DEL JUEGO DE DATOS:
Ingresamos a la transacción SM35, seleccionamos el Juego de Datos y lo ejecutamos presionando el botón ejecutar.
En la siguiente ventana marcamos la opción invisible y presionamos ejecutar.
Finalmente la sesión cambiará de status dependiendo del resultado de la ejecución y los datos se actualizarán en la tabla ZTABLA_USUARIOS.
La principal diferencia son: mediante call transacción siempre es online, mientras que en juego de datos el procesamiento es asíncrono. Mediante call transactiom se transfieren daros a solo una transacción, mientras que en Juego de Datos se transfieren datos múltiples transacciones. Otra diferencia es que mediante Call Transaction no se general Logs mientras que Juego de Datos se generan Logs por cada sesión.
UTILIZACIÓN DEL PROGRAMA RSBDCBTC PARA LA EJECUCIÓN DEL JUEGO DE DATOS.
Podemos ejecutar el Juego de Datos en forma On Line mediante la ejecución del programa estándar RSBDCBTC. Para ello vamos a tener que crear un Job, submitir la ejecución del programa RSBDCBTC y cerrar el Job.
SUBMIT rsbdcbtc USER sy-uname VIA JOB v_jobgroup NUMBER v_jobcount WITH queue_id = v_qid WITH mappe = v_jobgroup WITH modus = 'N' "No display WITH logall = '' AND RETURN.
Si regresamos a la transacción SM35 veremos que el Juego de Datos se procesó sin la necesidad de hacerlo manualmente.
 
 
 
Sobre el autor
Publicación académica de Jose Alberto Rivera Gonzalez, en su ámbito de estudios para la Carrera Consultor ABAP.
Jose Alberto Rivera Gonzalez
Profesión: Técnico Informático - Mexico - Legajo: LG32F
✒️Autor de: 102 Publicaciones Académicas
🎓Egresado de los módulos:
Certificación Académica de Jose Rivera