Modificar dinámicamente el "binding" entre un Workflow y sus tareas en SAP
Aprenda una manera de leer y modificar los “Containers” del Workflow en el momento del “binding” entre el Workflow y sus tareas en SAP. (Programmed Binding)
Muchas veces ocurre que a la hora de construir un Workflow (WF) en algún sistema SAP se dispone de muchas tareas (TS) tanto estándar como Z para ser utilizadas como toolkits. También suele ocurrir que estos utilitarios no cumplen con la interfaz que dicho Workflow desearía.
Por ejemplo, si existen discrepancias entre órdenes de compra y facturas de logística, es común que se disponga de una TS que en base a la diferencia, realice varias acciones. El problema se presenta cuando el Workflow sobre el que se trabaja no conoce dichos valores, sino solamente los objetos de negocio.
Una solución rápida para esta situación es crear un nueva TS que calcule discrepancias. Pero siguiendo este criterio se podría llegar a la situación de estar creando una nueva TS por cada dato desconocido sólo para adaptarse a la interfaz de otra TS. Uno de los problemas que este procedimiento trae aparejado es la complejidad creciente de los Workflows así como la dificultad para su mantenimiento y un aumento sostenido de la cantidad de métodos en los objetos de negocio (Business Objects - BO -).
Este artículo presenta una alternativa capaz de adaptar los Containers propios de un Workflow a los requeridos por cualquier TS que se especifique al momento de ejecutar el binding entre ambos.
Pasos para modificar el binding WF-TS/TS-WF
1. Una vez dentro del Workflow Builder (transacciones PFTC o SWDM), hacer doble click en la TS que va a recibir los datos modificados, ir a la solapa Control y luego click en Binding.
2. En la pantalla obtenida, completar con los containers requeridos a excepción del/los que se van a modificar. Luego hacer click en el Pushbutton de alguna línea vacía.
3. En el POP-UP seleccionar el Radiobutton “Container-->Container”, y en el ComboBox seleccionar la opción “Programmed Binding (Container IF)”. Luego, debajo de la etiqueta “Exit Function Module” se podrá ver un campo en blanco, en él se debe escribir en nombre de la función que contendrá el código responsable de modificar los Containers durante el binding.
Suponiendo que aún no se creó dicha función, en el campo vacío escribir el nombre “SWA_BINDING_TEMPLATE” y hacer click en el botón Copy . De esta manera se hace una copia del template a una nueva función Z. (Esta metodología es similar a la utilizada en el caso de las BTE). En el ejemplo el nombre del módulo de función final será “ZWF_TEST_BINDING_001”.
Finalmente, luego de confirmar la operación, el binding tendrá el siguiente aspecto.
4. Una vez creada la Función, editarla a través de la transacción SE37. Se puede ver que el sistema ya generó código y que dividió la función en dos secciones a través de una sentencia IF, una para el binding WF->TS y otra para TS-WF. Es importante respetar esta separación para evitar Runtime Errors.
Es aquí donde se puede codificar la lógica necesaria para calcular los datos que recibirá la TS. En el ejemplo se utilizará el ID de aeropuerto ubicado en un container del Workflow para calcular la cantidad de vuelos que partieron de él y enviárselos a una TS de decisión para que muestre este número.
En la sección siguiente se detallan las herramientas que se pueden utilizar para extraer y escribir información en los containers.
Cómo obtener/cambiar la información almacenada en los Containers
Se puede observar en la función recién copiada que ésta tiene una serie de parámetros de IMPORTING. De ellos, se van a considerar SOURCE_CONTAINER y TARGET_CONTAINER, ambos del tipo SWFPARACNT, los cuales representan TODOS los containers del Workflow y TODOS los containers de la TS en cuestión, respectivamente. Es decir que hay visibilidad sobre el 100% de ellos a pesar de que no figuren en el binding.
El tipo de datos SWFPARACNT corresponde a un objeto que respeta la interfaz IF_SWF_IFS_PARAMETER_CONTAINER, la cual permite ejecutar una serie de métodos sobre los mismos
- Leer un Container: Para ello se puede ejecutar el método “GET” sobre el objeto SOURCE_CONTAINER. Como parámetro de EXPORTING completar “NAME”, que representa el nombre del Container que se quiere leer del Workflow. Y como IMPORTING sólo recibir “VALUE” que representa el contenido. Se debe tener especial cuidado al escribir el nombre del Container ya que de otra manera el sistema dejará el Workflow en estado erróneo, a menos que se capture la excepción.
- Escribir un Container: Para ello se puede ejecutar el método “SET” sobre el objeto TARGET_CONTAINER. Como parámetros de EXPORTING completar “NAME” y “VALUE” teniendo en cuenta lo mencionado en el punto anterior.
Consideraciones importantes a tener en cuenta:
- En la sentencia IF principal, en la porción correspondiente a “dataflow_event = swfbn_dataflow_export”, sólo se puede escribir sobre los Containers de la TS, y en la otra porción sólo se puede escribir sobre los Containers del Workflow. De otro modo provocará un error.
- El binding se ejecuta de forma secuencial, Container por Container en el orden en que figuran, es decir que si en esta función se llegara a modificar el contenido de un Container que fue “bindeado” en una línea anterior, entonces se sobrescribirá con ese nuevo valor. Del mismo modo, si esta función modifica un Container que también figura en una línea posterior del binding, entonces dicho Container adoptará el último valor.
&NUMBEROFFLIGHTS& es el Container que modifica la función en este caso, luego es sobrescrito en la ultima línea del binding.
Ejemplo:
El siguiente código ABAP ejecuta correctamente en un sistema SAP Netweaver AS ABAP 7.0. El código ejemplo detalla el uso de los métodos responsables de extraer y escribir información en diferentes containers.
- Especialista ABAP y Workflow |
Copyright 2012 - Teknoda S.A.
IMPORTANTE: “Notas técnicas de SAP ABAP" se envía con frecuencia variable y sin cargo como servicio a nuestros clientes SAP. Contiene notas/tutoriales/artículos técnicos desarrollados en forma totalmente objetiva e independiente. Teknoda es una organización de servicios de tecnología informática y NO comercializa hardware, software ni otros productos. |
FICHA TECNICA: Notas técnicas – Tips de SAP Netweaver ABAP ”Modificar dinámicamente el "binding" entre un Workflow y sus tareas en SAP"
Tema: Programación ABAP, Workflow, Programmed Binding. Descripción: Aprenda una manera de leer y modificar los “Containers” del Workflow en el momento del “binding” entre el Workflow y sus tareas en SAP. (Programmed Binding)