Compartir a través de


Compensación

La compensación en WF es el mecanismo por el que se puede deshacer o compensar el trabajo previamente finalizado (siguiendo la lógica definida por la aplicación) cuando se produce un error posterior. Las transacciones permiten combinar varias operaciones en una sola unidad de trabajo. El uso de una transacción le da a la aplicación la posibilidad de anular (revertir) todos los cambios ejecutados desde dentro de la transacción si se produce algún error en cualquier momento del proceso de transacción. Sin embargo, el uso de las transacciones puede que no sea adecuado si el trabajo se está ejecutando mucho tiempo. Por ejemplo, se implementa una aplicación de planificación de viajes como un flujo de trabajo. Los pasos del flujo de trabajo pueden consistir en la reserva de un vuelo, la espera de la aprobación del administrador y, a continuación, el pago del vuelo. Este proceso podría tardar muchos días y no es práctico que los pasos de reservar y pagar el vuelo formen parte de la misma transacción. En este escenario, se podría usar la compensación para deshacer el paso de reserva del flujo de trabajo si se produce un error posteriormente en el procesamiento.

Usar la compensación

Cuando un flujo de trabajo contiene actividades que ejecutan una lógica que debería deshacerse o compensarse si el flujo de trabajo no se completa y las transacciones no son adecuadas, estas actividades se pueden colocar en una actividad CompensableActivity. Una actividad CompensableActivity tiene varias secciones de actividad secundaria, incluidas las propiedades Body y ConfirmationHandler. La actividad Body define la unidad sujeta a compensación de la lógica de negocios que se ejecuta durante la ejecución del flujo de trabajo normal, mientras que la actividad CompensationHandler define la unidad de lógica para compensar el trabajo ejecutado por Body. Cuando se invoca la compensación, ya sea explícitamente mediante una actividad Compensate o implícitamente mediante la lógica de la compensación predeterminada del flujo de trabajo, la actividad especificada como CompensationHandler se ejecuta, con lo que compensa la acción de las actividades Body. Si no se proporciona la actividad CompensationHandler, la lógica de la compensación predeterminada se ejecuta al compensar todas las actividades CompensableActivity anidadas en Body que se ejecutaron en Body, en orden inverso de realización. Para obtener más información acerca de la compensación, vea Modelo de programación de compensación.

Vea también

Referencia

CompensableActivity
Compensate