7.4. - Batch input utilizando “Call Transaction”
7.4.1. - Mi primer Batch Input utilizando CALL TRANSACTION
El objetivo del Batch Input será la carga inicial de datos de la tabla Usuarios. Para ello, hay que crear un archivo de texto con registros que cumplan con la estructura de la tabla Usuarios, sin tener en cuenta al campo mandante. Se realizará una carga incial de la tabla usuarios, por lo que se borrará el contenido antes de la ejecución del ejemplo.
EJ ARCHIVO DE CARGA DE USUARIOS
00121567432Joaquin Perez ALarreo Alvarez 3454 134512081967S
00131987623Barbara Pereira ALavalleja 543 145623091987S
00127982134Eugenia Herrera AGuido 56 167507041979S
1er Paso: Declaración de datos propios del batch input
Hay que declarar una tabla interna y una estructura, ambas del tipo BDCDATA, otra tabla interna del tipo BDCMSGCOLL, con su estructura, que servirán para almacenar los mensajes que se produzcan cuando se ejecute el “CALL TRANSACTION”, una tabla interna de usuarios, que contendrá los datos que se levanten del archivo de entrada y una tabla para mostrar por pantalla los errores entre otras declaraciones.
2º Paso: Lectura de datos de archivo de entrada
Hay que ejecutar el método estático “GUI_UPLOAD”, que se encuentra en la clase “CL_GUI_FRONTEND_SERVICES”, para levantar el archivo de entrada con la información para generar el Batch Input.
3º Paso: Carga de la tabla BDCDATA
Para cargar la tabla BDCDATA, se utiliza la subrutina “BDC_FIELD”. Antes, hay que inicializar la tabla interna del Batch Input y la de los mensajes. Como se va a añadir más de un registro, hay que utilizar índices para saber en qué fila de la pantalla se están cargando los datos. Esto se soluciona concatenando al nombre del campo el número de fila que le corresponde en la pantalla entre paréntesis.
4º Paso: Ejecución de la sentencia “Call Transaction”
Hay que ejecutar la sentencia “Call transaction”, que tiene la sintaxis:
CALL TRANSACTION v_cod_trans USING ti_bdc_data
MODE v_modo
UPDATE v_update
MESSAGES INTO ti_messages.
IF NOT sy-subrc IS INITIAL.
v_error = 'X'.
ENDIF.
1. USING
a. Se especifica la tabla BDCDATA que se utilizará
2. MODE
a. Determina el modo de procesamiento que utilizará el Batch input.
i. Es recomendable utilizar una variable para asignar el modo de procesamiento a un Batch Input.
ii. De esta forma, se podrá modificar su valor dinámicamente durante la ejecución del programa.
b. Los posibles modos de procesamiento son
i. A
1. Procesamiento con la visualización de todas las pantallas. Es el valor por defecto.
2. En caso de error en los datos introducidos en la tabla BDCDATA, el procesamiento se detendrá en la pantalla correspondiente al error. Una vez corregido el error, se puede modificar a modo “N”.
ii. E
1. Procesamiento donde se muestran las pantallas solo si ocurre un error.
2. Si se alcanza un breakpoint, se termina el procesamiento con:
a. SY-SUBRC = 1001.
b. SY-MSGTY contendrá “S”.
c. SY-MSGID contendrá “00”.
d. SY-MSGNO contendrá “344”.
e. SY-MSGV1 contendrá “SAPMSSY3”.
f. SY-MSGV2 contendrá “0131”
iii. N.
1. Procesamiento donde no se muestran las pantallas
iv. P
1. Procesamiento donde no se muestran las pantallas
2. Si se alcanza un breakpoint, se pasa el control al debugger.
3. UPDATE
a. Determina el modo de actualización de los cambios que producirá el Batch Input. Los modos posibles son:
i. A
1. Actualización Asíncrona
2. Se produce de igual forma a la que sucede si se utiliza la sentencia “COMMIT WORK”.
3. Es el valor por defecto
ii. S
1. Actualización síncrona.
2. Se produce de igual forma a la que sucede si se utiliza la sentencia “COMMIT WORK AND WAIT”.
iii. L
1. Actualización local.
4. MESSAGES INTO
a. Todos los mensajes generados durante el procesamiento del batch input, son almacenados en una tabla interna de tipo “BDCMSGCOLL”.
b. Para armar los mensajes se utiliza la función “MESSAGE_PREPARE”.
c.
Ejecutados todos los pasos, se ejecuta el batch input en modo de procesamiento “A”. Se accede a la transacción SM30 con el nombre de la tabla y se pulsa en “Actualizar”. Luego se pulsa en el botón de entradas nuevas
Se cargan todos los campos del registro y se presiona grabar. Por último, se sale de la transacción y se repite la secuencia por cuantos registros de usuario se añadan a la tabla.
La sentencia “CALL TRANSACTION” también es muy utilizada en reportes para acceder a una transacción determinada, a partir de los datos presionados por pantalla, con el añadido de la cláusula “AND SKIP FIRST SCREEN”.