14
Batch inputs 1-14

Batch inputs 1-14 - formacion.desarrollando.netformacion.desarrollando.net/.../Curso_390/SAP-09.pdf · del repositorio de SAP, emulando acciones que un usuario debería hacer en cada

Embed Size (px)

Citation preview

Batch inputs 1-14

Batch inputs 2-14

Lecc ión 1

Tratamiento de ses iones 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 3-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 SM35

Batch inputs 4-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 5-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 6-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 7-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 8-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 9-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 10-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 TYPE TABLE OF ty_tabla,

lwa_tabla LIKE LINE OF lt_tabla.

Batch inputs 11-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 12-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 13-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 14-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.