Batch inputs 1-14

Anuncio
Batch inputs
1-14
Lección 1
Tratamiento de sesiones Batch input
El batch input nace de la necesidad de introducir datos en una transacción dentro
del repositorio de SAP, emulando acciones que un usuario debería hacer en cada
una de las pantallas que se le presentan, por lo que, en resumen es una
herramienta muy útil que sirve para cargar en una transacción cualquiera, datos de
forma masiva asegurándose, eso si, de que los chequeos y controles que la
transacción hace por defecto se cumplan consiguiendo la integridad de los datos.
Por ejemplo, tenemos una transacción (la xk01) en la cual se tienen que rellenar
una gran cantidad de datos y en muchas pantallas diferentes.
Rellenar cada campo de forma manual sería demasiado tedioso y desesperante. Un
batch input rellena todos esos datos en todas las pantallas “automáticamente”.
La técnica se basa en la repetición de una acción mediante una grabación para que
el programa conozca lo que tendrá que hacer tantas veces como campos tenga que
rellenar. O lo que es lo mismo, se rellenan estos campos UNA SOLA VEZ mientras
el programa va grabando y memorizando los pasos del proceso.
Batch inputs
2-14
Digamos que se le va indicando lo que va a tener que hacer él automáticamente
repetidamente.
Para ello, se recomienda generar un archivo externo que contenga los datos a
cargar, por ejemplo un archivo Excel, de tal forma que, el programa cargue esos
datos en una tabla interna y cuando el proceso del BATCH INPUT así lo requiera se
vayan cogiendo de ésta.
El área del Batch input está disponible desde cualquier punto de SAP ya que está en
el menú System (accesible desde cualquier transacción).
SystemÆServicesÆBatch Input.
O directamente con sus transacciones:
•
Sessions
Batch inputs
Æ SM35
3-14
•
Log
Æ SM35P
•
Recorder
Æ SHDB
Dada la austeridad que tan bien caracterizan a estas transacciones, lo mejor es
generar un ejemplo en que se manejen los principales comandos de las mismas
para así entenderlas y poder ponerlas en práctica. Para ello, tomaremos como
ejemplo la transacción xk01.
Lo primero que se debe hacer es familiarizarse o conocer bien que datos se quieren
usar y los pasos a seguir siguiendo siempre un orden lógico así como realizar
varios ejemplos con los datos de los que disponemos y grabar siempre la sesión
con el máximo número de campos a rellenar.
Batch inputs
4-14
Una vez ya familiarizados con la transacción, procedemos a iniciar la transacción
SM35 (Sessions)
En la que se pueden ver todos los batch inputs que se han procesado hasta este
mismo momento.
Para comenzar con la grabación se presiona “Grabación” y “Grabación nueva”.
Batch inputs
5-14
En el campo “grabación” se le ha de dar un nombre identificativo ya que es el que
aparecerá en la lista general. En Cód.transacción se indica la transacción objeto de
la grabación, siguiendo con el ejemplo xk01, y se presiona INTRO.
A partir de aquí se inicia la transacción y el programa estará atento en todo
momento a cada interacción que se tiene con la transacción y todo queda grabado
y registrado.
Tal y como se ha hecho en las pruebas, se debe rellenar los datos de las pantallas
con al mayor número de campos a rellenar así como
pantallas, para emular el
ejemplo más completo posible.
Batch inputs
6-14
Es primordial rellenar siempre todos los campos obligatorios o se generaría un error
no controlado. Respecto al resto de los datos, se le puede
introducir cualquier
cosa, ya que lo que interesa es la acción de rellenar un campo u otro para que el
programa lo conozca, no los datos en sí.
Una vez rellenados los campos queda un código similar al que se muestra:
Si todo es correcto sólo falta pulsar el botón de grabar (icono con forma de
disquete). Automáticamente salta una pantalla donde se muestra todas las
Batch inputs
7-14
interacciones que se ha efectuado con la transacción desde que se empezó la
grabación (en este caso, un total de 12 líneas)
La primera línea indica que transacción se ha elegido para la grabación.
La segunda indica el código de la primera pantalla que ha aparecido al darle a
iniciar grabación
De la tercera a la 5º indica todas las acciones realizadas en la pantalla, en este caso
la posición del cursor, el código del return y el valor que ha tomado el campo
RF02K-KTOKK.
Lo mismo ocurre con las líneas que están entre la 6 y la 12.
Una vez revisado que los datos que aparece son correctos y conforme a lo que sería
la prueba más general se presiona el botón de grabar para que guarde el código
generado que servirá de muestra.
Se genera (en caso de no tenerlo ya) un archivo externo que contenga los datos
que se van a usar revisando cuidadosamente de que por lo menos contenga los
campo obligatorios. Hay que recordar que, el estándar de SAP recomienda que el
archivo externo, en caso de ser un Excel esté guardado “delimitado por
tabulaciones”.
Desde la pantalla de selección de las grabaciones, se selecciona la que se ha creado
para tal fin.
Batch inputs
8-14
El siguiente paso es generar el programa para lo cual se presiona en el botón
“programa” y se introduce el nombre el nombre del programa que se desee, por
ejemplo “ZEJEMPLO1”, recordando así, como ya bien sabemos que los nombres de
programas propios han de empezar por ‘Z’ o por ‘Y’.
Batch inputs
9-14
Una vez en este punto, ya se tiene un programa totalmente ejecutable que tiene la
siguiente forma.
Hay que recordar siempre que lo que se nos ofrece es una solución específica y en
bruto, quedando a cargo del programador cosas como utilizar el pretty printer para
resaltar las palabras claves y por supuesto modificar los valores puestos por defecto
por los valores propios del fichero masivo que se ha creado para tal fin.
Para ello, se genera, por ejemplo, una tabla interna con la siguiente estructura (tal
y como se ha declarado en la Excel.
TYPE: BEGIN OF ty_tabla,
Nombre(30) TYPE c,
Conbus(2)
TYPE c,
Pais(2)
TYPE c,
Idioma(2)
TYPE c,
END OF ty_tabla.
DATA: lt_tabla
lwa_tabla
Batch inputs
TYPE TABLE OF ty_tabla,
LIKE LINE OF lt_tabla.
10-14
También hay que declarar dos parámetros, uno para mostrar el nombre del usuario
con el que se ha idenficidado en SAP y el siguiente para la ruta del archivo con los
datos.
PARAMETERS: p_user LIKE apqi-userid OBLIGATORY DEFAULT sy-uname, "user
p_fich
LIKE rlgrap-filename OBLIGATORY DEFAULT 'C:\datos.txt'.
Dentro del START OF SELECTION se llama a una función de upload para cargar
los datosllamaremos a la función ‘UPLOAD’ que será la encargada de pasar los
datos de nuestro archivo a la tabla interna lt_tabla que se ha declarado:
START-OF-SELECTION.
CALL FUNCTION 'UPLOAD'
EXPORTING
filename = p_fich
filetype = 'DAT'
TABLES
data_tab = lt_tabla
EXCEPTIONS
conversion_error = 1
invalid_table_width = 2
invalid_type = 3
no_batch = 4.
Con los datos ya cargados en la tabla interna “lt_tabla” hay que generar un loop
para recorrer los datos.
PERFORM open_group.
Hay que recordar que la línea 1 del Excel es la cabecera que se le ha puesto.
LOOP AT lt_tabla INTO lwa_tabla FROM 2.
PERFORM bdc_dynpro USING 'SAPMF02K' '0100'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RF02K-KTOKK'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
El valor del campo 'RF02K-KTOKK’ en este caso se toma como algo fijo, y podría
sustituirse por una constante.
PERFORM bdc_field USING 'RF02K-KTOKK' 'zzgz'.
PERFORM bdc_dynpro USING 'SAPMF02K' '0110'.
PERFORM bdc_field USING 'BDC_CURSOR' 'LFA1-SPRAS'.
PERFORM bdc_field USING 'BDC_OKCODE' '=UPDA'.
PERFORM bdc_field USING 'LFA1-NAME1' lwa_tabla-nombre.
PERFORM bdc_field USING 'LFA1-SORTL' lwa_tabla-conbus.
Batch inputs
11-14
PERFORM bdc_field USING 'LFA1-LAND1' lwa_tabla-pais.
PERFORM bdc_field USING 'LFA1-SPRAS' lwa_tabla-idioma.
PERFORM bdc_transaction USING 'XK01'.
ENDLOOP.
PERFORM close_group.
Quedando el código final de la siguiente forma:
REPORT zejemplo1 NO STANDARD PAGE HEADING LINE-SIZE 255.
INCLUDE bdcrecx1.
TYPE: BEGIN OF ty_tabla,
Nombre(30) TYPE c,
Conbus(2)
TYPE c,
Pais(2)
TYPE c,
Idioma(2)
TYPE c,
END OF ty_tabla.
DATA: lt_tabla
TYPE TABLE OF ty_tabla,
lwa_tabla
LIKE LINE OF lt_tabla.
PARAMETERS:p_user LIKE apqi-userid OBLIGATORY DEFAULT sy-uname, "user
p_fich LIKE rlgrap-filename OBLIGATORY DEFAULT 'C:\datos.txt'.
START-OF-SELECTION.
CALL FUNCTION 'UPLOAD'
EXPORTING
filename = p_fich
filetype = 'DAT'
TABLES
data_tab = lt_tabla
EXCEPTIONS
conversion_error = 1
invalid_table_width = 2
invalid_type = 3
no_batch = 4.
PERFORM open_group.
LOOP AT lt_tabla INTO lwa_tabla FROM 2.
PERFORM bdc_dynpro USING 'SAPMF02K' '0100'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RF02K-KTOKK'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_field USING 'RF02K-KTOKK' 'zzgz'.
PERFORM bdc_dynpro USING 'SAPMF02K' '0110'.
PERFORM bdc_field USING 'BDC_CURSOR' 'LFA1-SPRAS'.
Batch inputs
12-14
PERFORM bdc_field USING 'BDC_OKCODE' '=UPDA'.
PERFORM bdc_field USING 'LFA1-NAME1' lwa_tabla-nombre.
PERFORM bdc_field USING 'LFA1-SORTL' lwa_tabla-conbus.
PERFORM bdc_field USING 'LFA1-LAND1' lwa_tabla-pais.
PERFORM bdc_field USING 'LFA1-SPRAS' lwa_tabla-idioma.
PERFORM bdc_transaction USING 'XK01'.
ENDLOOP.
PERFORM close_group.
Si se activa y ejecuta el programa, la pantalla principal muestra el siguiente
aspecto:
En “nombre del juego de” se indica un nombre cualquiera, y se marca la opción
“Conservar juego de dat” para que posteriormente, si ha habido cualquier error se
pueda recuperar.
Si todo ha funcionado correctamente debería aparecer una pantalla como la
siguiente:
Batch inputs
13-14
En este punto sólo queda ejecutar el batch input desde la transacción SM35
y
ejecutar el batch input.
Dentro de la transacción sm35 se puede apreciar el proceso listo para ejecutarse.
En la fase de test es conveniente ejecutarlo en modo visible para ver paso a paso
cómo se rellenan las pantallas con los datos, y cuando se esté seguro de que todo
está correcto se recomienda ejecutarlo en modo visualizar sólo errores o invisible
dependiendo de lo delicado que sea el proceso.
Si no ha habido ningún error se puede ver que el proceso ha pasado a la pestaña
de “Procesado”, y la carga de todos los datos se ha completado.
Para ver el resultado se puede ejecutar la transacción xk03 comprobar que se han
cargado los datos correctamente.
Quedando con esta comprobación por completado el proceso de batch input.
Batch inputs
14-14
Descargar