✒️ABAP El Batch Input utilizando el Juego de datos
ABAP El Batch Input utilizando el Juego de datos
Primero se tiene un archivo de texto con registros que cumplan con la estructura de la tabla base de datos ztabla_usuarios.
1. Declarar los datos propios del Batch Input.
Se declaran el tipo de datos ty_bdcdata y con este tipo se declara la tabla interna y la estructura bdcdata y otra tabla interna de usuario que tendrá los registros que se levantarán del archivo de entrada.
TYPES: BEGIN OF ty_bdcdata,
program TYPE bdc_prog,
dynpro TYPE bdc_dynr,
dynbegin TYPE bdc_start,
fnam TYPE fnam____4,
fval TYPE bdc fval,
END OF ty_bdcdata.
DATA: ti_bdcdata TYPE STANDARD TABLE OF ty_bdcdata.
wa_bdcdata LIKE LINE OF bdcdata.
DATA: ti_archivo TYPE STANDARD TABLE OF ztabla_usuarios.
wa_archivo LIKE LINE OF ti_archivo.
DATA: v_campo (35) TYPE c,
v_indice (2) TYPE c,
v_qid TYPE apq_quid,
v_group TYPE apq_grpn.
CONSTANTS: c_x (1) TYPE c VALUE 'X',
c_sm30 (20) TYPE c VALUE 'SM30'.
2. Lectura de datos del archivo de entrada.
Se ejecuta el método GUI_UPLOAD de la clase CL_GUI_FRONTEND_SERVICES para levantar el archivo de entrada con la información para generar el batch input.
3. Apertura de sesión del juego de datos.
Se usa el módulo de funciones bdc_open_group especificando el mandante, el grupo y el usuario, así:
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
client = sy-mandt
group = v_group
keep = = 'x'
user = v_qui
EXCEPTIONS
...
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy- msgv1 sy- msgv2 sy- msgv3 sy- msgv4
ENDIF.
4. Apertura de sesión del juego de datos.
Para cargar la tabla BDCDATA se utiliza la subrutina llenar_tabla_bdcdata. Antes de debe inicializar la tabla interna batch input.
FORM llenar_tabla_bdcdata USING p_dynpro TYPE c
p_campo1
p_campo2.
CLEAR wa_bdcdata.
IF p_dynpro EQ c_x.
wa_bdcdata-dynbegin = p_dynpro.
wa_bdcdata-program = p_campo1.
wa_bdcdata-dynpro = p_campo2.
ELSE
wa_bdcdata-fnam = p_campo1.
wa_bdcdata-fval = p_campo2.
ENDIF
APPEND wa_bdcdata TO ti_bdcdata.
ENDFORM
5. Inserción del juego de datos.
Se usa el módulo de funciones bdc_insert, así:
FORM insertar_jd.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
tcode = c_sm30
TABLES
dynprotab = ti_bdcdata
EXCEPTIONS
...
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy- msgv1 sy- msgv2 sy- msgv3 sy- msgv4
ELSEMESSAGE s000 (z_prueba) WIHT text-010.
ENDIF.
ENDFORM
6. Cierre de la sesión del juego de datos.
Se usa el módulo de funciones bdc_close_gruop, así:
FORM cerrar_jd.
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
ELSEMESSAGE s000 (z_prueba) WIHT text-010.
ENDIF.
ENDFORM
7. Ejecución del juego de datos.
Se ejecuta y se ingresa a la transacción SM 35, dónde se selecciona el juego de datos y se pulsa el botón ejecutar / Se marca la opción invisible en modo de procesamiento y ejecutar /
Mediante call transacción el procesamiento es sincrónico o en línea, se transfieren datos solo a una transacción, no se generar locks y en juego de datos es asincrónico o de fondo, se transfieren datos a múltiples transacciones y se generan locks por cada sesión.
Es posible ejecutar el juego de datos en línea mediante la ejecución del programa estándar RSBDCBTC (y otra con RSBDCSUB). Para ello se crea un job mediante el módulo de funciones job_open, así:
FORM procesar_online.
v_jobname = 'ZPRUEBA_ABAP'
v_jobgroup = v_jobname.
CALL FUNCTION 'JOB_OPEN'
EXPORTING
jobgroup = v_jobgroup
jobname = v_jobname.
IMPORTING
jobcount = v_jobcount
EXCEPTIONS
cant_creat_job = 1
invalid_job_data = 2
jobname_missing = 3
OTHERS = 4
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy- msgv1 sy- msgv2 sy- msgv3 sy- msgv4
ENDIF
Luego se sumbmite la ejecución del programa estándar RSBDCBTC, así:
SUBMIT rsbdcbtc
USER sy-uname
VIA JOB v_jobgroup
NUMBER v_jobcount
WITH queue_id = v_qid
WITH mappe = v_jobgroup
WITH modus = c_n
WITH logall = ' '
AND RETURN
Y cerrar el job mediante la ejecución del módulo de funciones job_close, así:
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = v_jobcount
jobname = v_jobname.
strtimmed = c_x
EXCEPTIONS
....
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy- msgv1 sy- msgv2 sy- msgv3 sy- msgv4
ENDIF
ENDFORM
Y finalmente se ejecuta el programa / Vamos a la transacción SM35 y el juego de datos se ejecuto solo, sin la intervención manual.
 
 
 
Sobre el autor
Publicación académica de Linda Carolina Zambrano León, en su ámbito de estudios para la Carrera Consultor ABAP.
Linda Carolina Zambrano León
Profesión: Agente - Peru - Legajo: XR55P
✒️Autor de: 63 Publicaciones Académicas
🎓Egresado del módulo:
Certificación Académica de Linda Zambrano