Lección 9: Eventos.
1.- Definición de eventos.
Como los Workflow son procesos de negocio, es vital para una aplicación de negocio poder comunicarse con los Workflows.
Para poder comunicarse la aplicación de negocio de negocio utiliza eventos.
Un evento en Workflow representa el cambio de estado de una instancia de un objeto de negocio (business object).
Por ejemplo, cuando un usuario modifica el maestro de materiales para el material XXXY entonces el Business Object XXXY lanzará el evento "Changed".
2.- Creación de Eventos.
Los eventos se crean en el Business Object Repository (Transacción SWO1).
3.- Lanzando eventos desde aplicaciones SAP.
Antes que un evento sea lanzado por una aplicación, la creación del evento debe programarse en el programa de la aplicación.
Afortunadamente en muchos de los programas estándar de SAP, ya están definidos los programas que lanzan los eventos y solo es necesario realizar el event linkage y determinadas configuraciones de customizing.
Sin embargo puede ser que para un proceso en particular tengamos que crear un evento nuevo, en este caso deberemos definir como se lanzará el evento a partir de la aplicación.
En el caso que el evento deba lanzarse desde un programa propio podremos programar el lanzamiento del evento muy fácilmente utilizando las funciones que SAP provee para tal caso, las cuales son:
- A través de documentos de cambio (Change documents).
- A través del sistema de gestión de status.
- A través de control de mensajes.
- Utilizando el sistema de información logística (LIS).
- A través de los datos maestros de HR.
- A través de Business Transaction Events (Solo para finanzas).
- A través de customizing esecifico de cada aplicación.
Los tres primeros son los mas usados, el resto son específicos para determinados módulos (HR-FI) y para casos aislados.
4.- Lanzando eventos con Changed Documents.
Los documentos de cambio definen la operación que provoca el cambio y registran los datos del objeto de negocio que ha cambiado en forma de tablas con el valor antiguo y el nuevo.
Para crear un evento de este tipo utilizamos la transacción SWEC, en la cual debemos indicar:
- El código de documento de cambio.
- El business object.
- El evento.
- Bajo que actividad se lanzará (Creación, Modificación, Borrado).
5.- Lanzando eventos por Cambio de Status.
Si una aplicación de negocio utiliza el sistema de gestión de status, podremos configurar el lanzamiento de eventos a partir de un cambio de status del sistema.
Para crear un evento de este tipo utilizaremos la transacción BSVW.
6.- Unir el evento al Workflow.
Para establecer el inicio automático de un workflow a partir de un evento debemos indicarlo en la configuración del workflow (Transacción SWDD).
En la cabecera indicamos que tipo de objeto y evento lanzarán el Workflow.
Al crear la relación automáticamente aparecerá un binding que pasará datos desde el contenedor del evento al del workflow, podremos modificar el binding para agregar los parámetros que deseemos.
Finalmente deberemos "activar" el binding antre el workflow y el evento.
Esta activación se le denomina "event linkage".
Otra forma de activar el linkage entre el evento y el Workflow es a través de la transacción SWETYPV.
7.- Condiciones de inicio.
SAP provee una manera fácil de limitar el inicio de un workflow al dispararse un evento y esto es a través de condiciones de inicio.
Para configurar condiciones de inicio ejecutamos la transacción SWB_COND.
Para crear la condición seleccionamos el tipo de objeto, aparecerán todos los eventos acoplados con el workflow y seleccionamos uno.
Para verificar los eventos, usamos la transacción SWU0 para simular eventos.
Para crear los eventos usamos la transacción SWUE.
8.- Desarrollos de programas lanza eventos.
El programa que desee disparar un evento deberá utilizar el módulo de funciones SWE_EVENT_CREATE.
La estructura lógica del programa debería ser la siguiente:
- Llenar el contenedor de eventos con los parámetros necesarios.
- Componer la clave del objeto que debe instanciarse para llamar al evento.
- Llamar la función SWE_EVENT_CREATE.
- Controlar las excepciones.
- Disparar el evento con COMMIT_WORK explicito.