✒️ABAP El Batch Input utilizando el Juego de datos
ABAP El Batch Input utilizando el Juego de datos
Batch Input utilizando Juego de Datos
1. Mi primer Batch Input utilizando Juego de Datos.
Vamos a crear nuestro primero Batch Input utilizando la técnica juego de datos. El objetivo de BI será la carga inicial de datos de la tabla ZTABLA_USUARIOS.
Para ello, vamos a crear un archivo de texto con registro que cumplan con la estructura de la tabla antes mencionada, sin tener en cuenta el campo mandante.
A) Declaración de los datos propios del Batch Input
Declaramos una tabla interna y una estructura, ambas del tipo DBCDATA y otra tabla interna de usuarios que contendrá los registros que levantemos del archivo de entrada.
* Tabla del BI con la estructura de BDCDATA
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.
B) Lectura de datos de archivo de entrada
Ejecutamos el método GUI_UPLOAD para levantar el archivo de entrada con la información para generar el Batch Input.
* Se abre el archivo de entrada para lectura
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.
IF sy-subrc NE 0.
MESSAGE e000(z_prueba) WITH text-004.
ENDIF.
C) Apertura de la sesión del Juego de Datos.
Para realizar la apertura de la sesión del Juego de Datos, vamos a utilizar la función BDC_OPEN_GROUP, especificando el mandante, el grupo y el usuario.
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.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
D) Carga de la tabla BDCDATA
Para cargar la tabla BDCDATA utilizaremos la Subrutina BDC_FIELDm que vimos en la leccion dos. Antes debemos inicializar la tabla interna del Batch Input.
E). Inserción del Juego de Datos
Para realizar la inserción del Juego de Datos vamos a utilizar la función BDC_INSERT, tal como vemos a continuación.
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.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
F) Cierre de la sesión del Juego de Datos
Para cerrar el juego de datos vamos a utilizar la función DBC_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.
G) Ejecutamos el Juego de Datos.
Para realizar la ejecución del Juego de Datos vamos a entrar ala transacción SM35. Vamos a seleccionar el juego de datos y lo ejecutamos presionando el boton ejecutar.
En la siguiente ventana de diálogo marcamos al opción Invisible(BACKGROUND) y presionamos Ejecutar.
Finalmente la sesión cambiara de status dependiendo del resultado de la ejecución y los datos se actualizaran en la tabla ZTABLA_USUARIOS.
2. Utilización del programa RSBDCBTC para la ejecución del juego de datos.
Podemos ejecutar el juego de datos en forma Online mediante la ejecución del programa estandar RSBDCBTC. Para ello vamos a tener que crear un job, submitir la ejecución del programa RSBDCBTC y cerrar el job tal como vemos a continuación.
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.
Luego si vamos a la transacción SM35, vemos que el juego de datos se procesó sin la necesidad de hacerlo manualmente.
Nota Importante: las principales diferencias entre las técnicas de CALL TRANSACTION y juego de datos son: mediante call transaction el procesamiento es sincrono, es decir online en cambio con juegos de datos el procesamiento es asincrono es decir de fondo, mediante call transaction se transfieren datos sólo a una transacción Mediante Call Transaction, en cambio mediante juego de datos se transfieren datos a múltiples transacciones y otra diferencia es que mediante Call Transaction no se generan Log en cambio con juego datos se generados Log por cada sesión.
 
 
 
Sobre el autor
Publicación académica de Edward Henry Rosario Piezal, en su ámbito de estudios para la Carrera Consultor ABAP.
Edward Henry Rosario Piezal
Profesión: Ingeniero en Sistema - Republica Dominicana - Legajo: FM99R
✒️Autor de: 68 Publicaciones Académicas
🎓Egresado de los módulos:
Disponibilidad Laboral: FullTime
Certificación Académica de Edward Rosario