Como Modelar Transacciones
De
<keywords content="keywords"> transaccion, transacciones, transaccional, intermedio </keywords>
Cómo Modelar un Proceso Transaccional
Los subprocesos Transaccionales facilitan la implementación de escenarios de negocio con transacciones cuyas ejecuciones podrían durar muchos días o semanas hasta que el conjunto de actividades sea completado. Como un ejemplo, un plan de viaje es presentado. En este proceso es necesario reservar exitosamente un vuelo, un hotel y un carro para llevar a cabo el escenario planeado. Si cualquiera de los tres intentos de reserva es insatisfactorio, esos que hayan sido hechos deben ser cancelados.
En este caso dos procesos son requeridos: el proceso Padre (Parent), llamado "Plan de Viaje (Travel Plan)", y el proceso Transaccional (Transactional), llamado "Reserva (Booking)" en el que las tres actividades de reserva serán modelados.
Subprocesos Transaccionales
1. Primero modele el subproceso transaccional sin las actividades de compensación.
Cuando esto es hecho, modele los eventos intermedios de compensación y sus actividades de compensación: haga clic derecho sobre la actividad y seleccione Adjuntar evento - Compensación (Attach event - Compensation) en el menú izquierdo en el modelador y póngalo en la esquina de la Actividad.
Luego, haga clic en Tarea de Usuario (User Task) del menú izquierdo en el modelador y póngalo cerca del evento de compensación, una el evento a esta nueva tarea. Cuando termine, salve el proceso.
El subproceso completo con todas las actividades de compensación lucirá como esto:
2. Cree y asocie las formas para todas las actividades. Esto sería un ejemplo de una forma para la actividad "Reserva de Vuelo (Book Flight)". Note los campos resaltados, estos serían usados por el usuario para determinar si un error o cancelación ocurrió.
3. Incluya una expresión Al Salir (OnExit) de cada actividad que tiene vinculada una compensación. La expresión debe evaluarse si la actividad termina con un error, por cancelación o normalmente.
En este caso, el error o cancelación será evaluada por dos atributos: BookFlightFailed y FlightUnavailable (que corresponde a los dos campos en la forma).
Si el vuelo falla, la expresión lo considerará como un error. Si está deshabilitado, será considerado como una cancelación:
Construya la regla:
La sintaxis para el evento de cancelación es
CHelper.RaiseCancelEndEvent("NombreDeCualquierEvento");
La sintaxis para el evento de error es
CHelper.RaiseErrorEndEvent("NombreDeCualquierEvento");
4. La Actividad de Compensación para el vuelo, "Cancelar Vuelo (Cancel Flight)", será activada si la actividad "Reservar Vuelo (Book Flight)" finalizó correctamente Y una de las otras actividades "Reservar Hotel (Book Hotel)" o "Reservar Carro (Book Car)" terminó en cancelación. Lo mismo aplica a las actividades "Cancel Hotel" o "Cancel Car".
5. El proceso transaccional debería estar embebido, tal que el proceso de reserva tendría que ser definido como un Módulo: haga clic en las propiedades del proceso y seleccione el módulo como Tipo de Acceso (Access Type). Lugo escoja OK.
Proceso Pariente
Modelar el proceso Pariente, en este caso "Plan de Viaje (Travel Plan)", definiendo en el asistente de subproceso el subproceso de reserva como Transaccional.
<videoflash>arNqyuVqzVQ|640|505|</videoflash>
Para mayor información sobre Procesos Transaccionales vaya a Transaccional <comments />