Está en la página 1de 6

BATCH - INPUTS

8.1. INTRODUCCIN 8.2. FASE DE GENERACIN 8.3. OPERACIONES 8.4. FASE DE PROCESAMIENTO

8.1. INTRODUCCIN:

Un batch-input es un mtodo seguro, fiable y rpido de transferir grandes cantidades de datos a un sistema SAP, para hacer muchas altas, modificaciones o borrados. Se simula un proceso on-line (transaccin donde interacciona el usuario), para someter a los datos a todos los chequeos yvalidaciones que sufriran si se metieran manualmente, para salvaguardar la integridad de los mismos (cosa que no ocurrira con un MODIFY directo a una tabla del D.D., eso es lo importante de los batch-inputs). Pero en cambio no requieren interaccin. Hay 2 mtodos de batch-input: clsico y call transaction. En el mtodo clsico se genera una sesin batch-input. Se tiene un fichero con los datos, y un programa Abap/4 de conversin que crea la sesin (datos, pantallas, transacciones, comandos, .. es un juego de datos), que simulan la existencia de un usuario que introducira los datos), que se almacena y se puede procesar. Este mtodo es asncrono: se procesan los datos ahora pero se actualizan ms tarde. Permite mltiples transacciones. Se genera un log para cada sesin, pero no se pueden generar en paralelo desde el mismo programa (slo puede abrirse un juego de datos cuando se cierra el anterior). En el mtodo call transaction los datos se crean on-line al ejecutar el programa de conversin, en lugar de crear una sesin. Es mucho ms rpido, pero poco til para gran cantidad de datos (se perderan datos si hay errores, pues no se guardan en la sesin batch-input). Se usa para dar de alta rpidamente pocos datos. Es un mtodo sncrono, vlido para una transaccin, rpido, pero no se genera log, ni pueden tratarse errores a posteriori. El proceso tiene 2 fases: o Fase de Generacin: Un programa abap/4 genera un lote batch-input con los datos a cargar o modificar (llamado juego de datos). La base de datos todava no se modifica. Subtareas de esta fase: Anlisis de los datos a transferir (saber qu datos hay que cargar), generacin de estructuras en D.D. para los nuevos datos (opcional), creacin de un fichero de texto plano con los datos, desarrollo de un programa batchinput para la lectura, conversin y procesado de los datos. En las primeras tareas colabora el cliente. o Fase de Procesamiento:El lote de batch-input se procesa, es decir, se ejecuta el batch-input (el juego de datos), hacindose efectivas las modificaciones en la base de datos. Subtareas: Procesado de los datos con el programa batch-input anterior, lanzamiento del juego de datos (esta tarea no existe con el mtodo call transaction), anlisis de los resultados y posibles errores (mucho ms sencillo con el mtodo batchinput clsico).

8.2. FASE DE GENERACIN:

Es necesario codificar un programa Abap/4 de carga para que use, de forma automtica y con los datos que se deseen, la transaccin SAP que se necesita utilizar en cada caso para la carga o modificacin masiva de los datos. Pero antes hay que asegurarse de que no exista ya en SAP un programa estndar (IBIP) que haga lo mismo, para as usar ste directamente. Se le llama desde la transaccin IBIP. Puede generarse un juego de datos real, o un testeo con datos de prueba. Necesita como entrada un fichero de texto con los datos a cargar, con un formato especial dado. Debe indicarse por qu IBIPs se va pasardo, en orden, y qu transacciones. La informacin que se requiere conocer para escribir este programa es: identificacin de la transaccin a usar (para conocer su cdigo, pulsar en cualquier dynpro de la misma en Sistema Status Datos repository Transaccin), nombre del(os) programa(s) que ejecuta(n) la transaccin, dynpros (pantallas) que se atraviesan (para conocer su cdigo, pulsar en cada una de ellas en Sistema Status. Tambin veremos el nombre delmodule pool), ylos campos que se utilizan (para conocer sus nombres tcnicos, situarse sobre ellos y pulsar F1 Datos tcnicos, y leer el nombre de campo para batch-input). Para obtener toda esta informacin hay que seguir todos los pasos que hara el usuario. Hacer una prueba e ir anotando los nombres de los comandos, dynpros, que se usan. Esto para cada pantalla a procesar. Lo mismo si aparece una ventana de dilogo (pop-up). El tipo y la longitud de un campose consigue mirando en la tabla correspondiente, a la que se llega haciendo doble clic sobre dicho campo. Los cdigos para pasar de una pantalla a otra pueden ser un ENTER, un botn, Se ven pulsando F1 Datos tcnicos Cdigo de funcin. Otra forma de conseguir la informacin es a travs del Screen Painter, viendo la lista de campos de cada dynpro. En el programa hay que declarar (para ambos mtodos de batch-input) una tabla interna con una estructura especial para ir guardando en ella toda la informacin anterior, que estructura los datos a transferir. Es como un registro de todas las pantallas y campos por los que va a ir avanzando la simulacin de la transaccin. Debe tener la misma estructura de la estructura SAP delDiccionario de Datos llamada BDCDATA:

DATA BEGIN OF tabla OCCURS 0. INCLUDE STRUCTURE BDCDATA. DATA END OF tabla.

Los campos que componen esta tabla / estructura son 5: PROGRAM (8 caracteres. Nombre del module pool de la transaccin), DYNPRO (4 caracteres. Su nmero), DYNBEGIN(1 carcter. Una 'X' indica nueva pantalla), FNAM(35 caracteres. Nombre del campo de la pantalla), FVAL (80 caracteres. Valor para dicho campo de la pantalla). Hay que guardar una entrada por cada dynpro, rellenando PROGRAM, DYNPRO y DYNBEGIN, y luego usar APPEND. Y por cada campo de pantalla que se use en la transaccin hay que guardar otra entrada, rellenando los campos FNAM y FVAL, y luego usar APPEND oCOLLECT. Relleno de esta tabla: Para indicar nueva pantalla (o la primera), guardar el nombre del programa (en PROGRAM), n dynpro (en DYNPRO) y X enDYNBEGIN (los otros 2 campos en blanco) Y para cada campo de esa pantalla rellenar su nombre tcnico (en FNAM) y su valor (en FVAL), que es uno

de los datos a transferir al sistema. En la ltima entrada de por cada pantalla (salvo la ltima) se guarda el comando BDC_OKCODE en FNAM, y enFVAL el cdigo para pasar a la pantalla siguiente, como EXIT, /2 (para F2), ... Tras cada APPEND tabla hay que hacer un CLEAR tabla, para no dejar valores basura para la siguiente entrada. Caso especial: campos repetidos varias veces en una dynpro (tienen el mismo nombre). Para especificar qu campo concreto se debe rellenar, indicar entre parntesis el n de lnea donde est. Ejemplo: MOVE sbook-connid(3) TO tabla-fnam. Conviente crear una subrutina para rellenar la tabla. Llamada tpica:

PERFORM llenardynpro USING 'SAPM38M' '0100' 'X'.

Ejemplo de tabla.

PROGRAM SAPM38M

DYNPRO 0100

DYNBEGIN X

FNAM RS38M-program BDC_OKCODE ...

FVAL ZBCA07F1 '/2' ... ...

SAPM38M

0200

X ...

8.3. OPERACIONES:
o
Abrir sesin:Para abrir o crear una sesin de batch-input (es decir, crear un juego de datos nuevo, vaco) se usa el mdulo de funcinBDC_OPEN_GROUP. En el include BDCRECXX hay subrutinas como la OPEN_GROUP ya preparadas que llaman a estas funciones. En el programa no se puede abrir otra sesin si hay alguna ya abierta. Hay que usarlo antes de insertar ningn dato.

CALL FUNCTION 'BDC_OPEN_GROUP' * EXPORTING * CLIENT = "mandante sobre el que se ejecutar el batchinput. * GROUP = "nombre de sesin, con el que se identifica el juego de datos * HOLDDATE = "no se ejecutar la sesin batch-input hasta la fecha indicada, salvo el administrador * KEEP = "si es 'X', la sesin ser retenida, (podr ser borrada por un usuario con permiso)

* USER = propietario de la sesin * EXCEPTIONS * CLIENT_INVALID incorrecto * DESTINATION_INVALID * GROUP_INVALID * HOLDDATE_INVALID * INTERNAL_ERROR * QUEUE_ERROR bloqueo * RUNNING .

"usuario = 1 = = = = = 2 3 4 5 6 "mandante

"error de

= 7

o o

Insertar datos:El mdulo de funcin BDC_INSERT guarda en el juego de datos el contenido de la tabla interna de estructura de BDCDATA, una vez rellena. Hay que realizar esta operacin una vez por cada transaccin a almacenar.

CALL FUNCTION 'BDC_INSERT' * EXPORTING * TCODE = "cdigo de la transaccin a ejecutar pop_local TABLES dynprotab = "tabla interna con estructura BDCDATA * EXCEPTIONS * INTERNAL_ERROR = 1 * NOT_OPEN = 2 * QUEUE_ERROR = 3 * TCODE_INVALID = 4 .

o o
Cerrar sesin:Una vez completado el lote de batch-input, se cierra la sesin con el mdulo de funcin BDC_CLOSE_GROUP, una vez transferidos todos los datos al juego de datos.

* * * *

CALL FUNCTION 'BDC_CLOSE_GROUP' EXCEPTIONS NOT_OPEN = 1 QUEUE_ERROR = 2 OTHERS = 3 .

o o
CALL TRANSACTION cdigo USING bdc_tabla [ MODEA | E | N ] [ UPDATES | A | L ][ MESSAGESINTO tabla_mensajes ].

Para el mtodo call transaction se usa esta sentencia Abap/4. Parmetros:

o o o

MODE: Indica el tipo de ejecucin: A (en visible. Se ven todas las pantallas por las que se pasa. til para testeo), E (visualizacin slo errores), N(invisible). UPDATE: Tipo de actualizacin: A (asncrono), S (sncrono: no continua el proceso hasta que no se actualiza la base de datos), L (local). MESSAGES INTO: Consigue que todos los mensajes que apareceran al hacer la transaccin manualmente (pero que no se ven en batch-input) se guarden en la tabla indicada, para luego mostrarlos o procesarlos (para poder conocer qu errores se han producido). Necesita una tabla interna con la estructura de BDCMSGCDL. Campos de esa tabla: MSGTYP (tipo del mensaje), MSGID (clase del mensaje), MSGVi (parmetro & nmero i), MSGNR (nmero de mensaje).

8.4. FASE DE PROCESAMIENTO:

La transaccin que procesa los lotes de batch-input es la SM35, o bien por men: Sistema Servicios Batch-input Tratar. Con esta transaccin pueden consultarse, eliminarse y procesarse (haciendo doble clic en ella) todas las sesiones batch-input (los juegos de datos, que pueden ser: a procesar, errneos, procesados, en tratamiento y en background). Otra manera de lanzar sesiones batch-input es ejecutar el report RSBDCSUB. Con l es posible procesar un batch-input justo despus de ser generado, llamando a este report con los parmetros adecuados desde el mismo programa abap/4 que ha generado el lote. Antes de procesar una sesin de batch-input puede comprobarse si los datos de entrada y la secuencia de pantallas programada es la esperada. Para ello, desde la transaccin SM35 elegir la sesin a analizar y Pasar a Anlisis Juego de datos. Con doble clic en cada una de las dynpros pueden visualizarse stas. Log: Cuando el sistema ejecuta un batch-input, se va generando un log con el resultado de cada transaccin individual. Se guarda la hora de inicio de la sesin, la hora de inicio de cada transaccin, los mensajes que se generan (los mismos que si se hiciera la transaccin on-line). Al final se generan unas estadsticas: nmero de transacciones que componen el lote, n de ellas procesadas con xito y n de ellas errneas. Cancelarejecucin: Por el men Sistema Servicios Batch-Input Cancelar se puede finalizar la ejecucin de un batch-input (no hay otra forma). Se continuara sta con Siguiente transaccin. Cada de sesin: Si se cae el sistema durante la ejecucin de un batchinput, al rearrancarlo aparecer ste como procesando, pero noest haciendo nada, aunque tampoco hemos perdido los datos. Hay que liberar la sesin, yendo a la transaccin SM35, indicar la sesin en cuestin y elegir Juego de datos Liberar. Entonces ya pueden ejecutarse las transacciones que resten. Tipos de procesamiento de un batch-input: o Visible: Se procesa cada transaccin viendo todas las dynpros por las que se pasa. Hay que pulsar ENTER para pasar de una a otra. Se pueden modificar los valores que automticamente se van introduciendo en los campos. Se puede saltar alguna transaccin que no se desee procesar (poniendo /N en la barra de comandos), o bien para retrasar su ejecucin. o Invisible: El proceso se hace de forma transparente al usuario, en background, sin mostrar ninguna pantalla. Se debe esperar a

que acabe la ejecucin, o bien cancelar sta. Para ver el resultado se debe consultar el log (que tambin se puede ver mientras se est procesando el juego de datos). Visualizacin slo errores: El batch-input se ejecuta en modo invisible salvo cuando se produzca un error: entonces se detiene el proceso en la dynpro que contiene el campo errneo, para as poder corregirlo manualmente, o cancelar esa transaccin individual. Tras esto, continua el proceso en modo invisible (hasta el siguiente error, o hasta acabar).

También podría gustarte