
✒️ABAP - Batch Input utilizando Juego de Datos
ABAP Batch Input utilizando Juego de Datos
PRIMER BATCH INPUT CON JUEGO DE DATOS
Carga inicial de ZTABLA_USUARIOS. Crear archivo de texto con registros de igual estructura de la tabla, sin mandante. Borrar tabla usuarios previamente a la ejecución.
Paso1- Declaración de datos propios de BI
Declarar tabla interna y estructura de tipo BDCDATA y tabla interna de usuarios:
* 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,
v_jobgroup TYPE btcjobgrp,
v_jobname TYPE btcjob,
v_jobcount TYPE btcjobcnt.
Paso2- Lectura de datos de archivo de entrada
Ejecutar GUI_UPLOAD:
* 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.
Paso3- Apertura de sesión de Juego de Datos
Funcion BDC_OPEN_GROUP, con mandante, grupo y usuario:
v_group = sy-repid.
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.
Paso4- Carga de tabla BDCDATA
Utilizar rutina BDC_FIELD. previamente inicializar tabla interna de BI.
Paso5- Insertar Juego de Datos
Utilizamos la función BDC_INSERT:
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.
ENDIF.
Paso6- Cerrar sesión de Juego de Datos
Utilizamos función BDC_CLOSE_GROUP:
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.
Paso7- Ejecución de Juego de Datos
Transacción SM35, selección de uego de Datos y Ejecutar (Process).
A continuacion seleccionar Invisible (Background) y Ejecutar (Process).
EJECUCION ONLINE DE JUEGO DE DATOS (RSBDCBTC)
Creación de job, submitir ejecución y cierre de 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.
CALL TRANSACTION vs JUEGO DE DATOS
CALL TRANSACTION: Síncrono (online), Transfiere datos a solo a una transacción, no genera Logs.
JUEGO DE DATOS: Asíncrono (batch), Transfiere datos a multiples transacciones, generta Log por cada sesión.