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