Un Batch Input es una forma segura y confiable de transferir cantidades de datos en masa al sistema SAP, tanto para dar alta como modificar y borrar datos, mediante la simulación Online de algún proceso o transacción propia del sistema.
El uso principal para esto, es evitar realizar de forma manual algún proceso de grandes cantidades de datos.
Ventajas:
- Forma segura (Contiene las validaciones necesarias en caso de ser una transacción estandar del sistema).
- Grandes cantidades de datos.
- Pueden integrarse varios procesos en un solo programa ABAP.
Desventajas:
- Al ser Online puede ser un proceso lento, comparando con (Direct Inputs, LSMW)
- Sí se aplica un parche al módulo, puede causar problemas por algún cambio de la transacción usada.
- Sí existe un cambio de configuración en transacción usada, puede afectar al batch input.
En otras palabras y dando una definición sencilla, el batch input toma una simulación de alguna transacción dentro del sistema y tiene la capacidad de procesarla cuantas veces quiera uno.
Ahora les explicaré de forma breve el proceso de creación de un Batch Input.
Paso 1. Grabación de Transacción (Es preferente, que esta grabación sea hecha por un consultor o una persona que conozca de forma integral la transacción a usar).
Imagen 1, SHDB Grabación Nueva. |
- Entrar a SHDB.
- Elegir Grabación Nueva.
- Llenar campos necesarios (Imagen 1).
- En este momento la transacción comenzará a ejecutarse y tendran que llenar todo lo necesario en ella.
Paso 2. Llenar el catalogo para ejecución de transacción desde nuestro programa ABAP, esto se realiza llenando la estructura: BDCDATA, esta estructura tiene los campos:
- PROGRAM BCD Modulpool
- DYNPRO BDC Número de Dynpro
- DYNBEGIN BCD Inicial un Dynpro
- FNAM Nombre campo
- FVAL BDC Valor del campo
Para poder usarlos en nuestro programa deben ser declarados, yo recomiendo usar tablas sin cabecera, y aparte usar una estructura, como lo realizo aquí:
data: WA_BDCDATA type bdcdata, "Declaro la linea o estructura del tipo tabla BDCDATA TI_BDCDATA type table of bdcdata. "Declaro la tabla tipo BDCDATA
Para llenar esta estructura yo utilizo el siguiente código:
form batch_encabezado using p_program p_dynpro p_dynbegin. "Llenar encabezado clear wa_bdcdata. wa_bdcdata-program = p_program. "entrego el nombre del programa a usar wa_bdcdata-dynpro = p_dynpro. " entrego el numero de dynpro usado wa_bdcdata-dynbegin = p_dynbegin. " entrego el valor 'X' para indicar que es una nueva pantalla insert wa_bdcdata into TABLE ti_bdcdata.endform. " BATCH_ENCABEZADO
form batch_body using p_fnam p_fval . "Llenar Cuerpo clear wa_bdcdata. wa_bdcdata-fnam = p_fnam. "entrego el nombre del campo sobre el dynpro wa_bdcdata-fval = p_fval. "entrego el valor del campo a ingresarse insert wa_bdcdata into TABLE ti_bdcdata.endform. " BATCH_BODY
Con lo anterior tan solo tengo que llamar mediante un Perform (llamada de una subrutina) e ingresar los valores conseguidos mediante la grabación, un ejemplo es:
perform batch_encabezado using 'PROGRAMA' 'DYNPRO' 'X'. "Entra a programa y dynpro. perform batch_body using 'BDC_OKCODE' '/00'. "Codigo Ok_Code a ejecutar
perform batch_body using 'BDC_CURSOR' 'BR_BUKRS-LOW'. " En donde Posiciona el Cursor
perform batch_body using 'BR_BUKRS-LOW' P_BUKRS. "lleno el campo con el valor de P_BUKRS el cual es una variable
Paso 3. Ejecutar el Call Transacion.
Esta instrucción es básicamente para llamar una transacción con diferentes opciones de ejecución, mas información para utilizarla en el (ENLACE).
La forma básica de utilizarla es Call Transaction 'Transaction Code' Using TI_BDCDATA MODE 'TIPO_MODO'
- En "Transacción" debe de ir el código de transacción, este puede ser un campo o entre comillas simples se puede usar directamente el código como 'F.80'.
- En Using se usa la tabla que contiene la grabación con los datos para la ejecución del Batch Input.
- En Mode se utiliza el modo a ejecutar.
Valores posibles del MODE:
- A = Mostrar Paso a Paso.
- E = Mostrar solo cuando haya errores.
- N = No mostrar nada mientras se ejecuta.
Yo personalmente, prefiero este tipo de Batch Inputs de forma Manual, ya que podemos tener un control preciso de lo que se agrega y tenemos mas flexibilidad que el crearlos de forma automática.
Espero les sea de ayuda esta información, cualquier duda háganla mediante comentarios.
Espero les sea de ayuda esta información, cualquier duda háganla mediante comentarios.