Compensation
La compensation dans WF est le mécanisme qui permet d'annuler ou de compenser un travail terminé (en fonction de la logique définie par l'application) lorsqu'un échec ultérieur se produit. Les transactions vous permettent de combiner plusieurs opérations en une seule unité de travail. L'utilisation d'une transaction permet à votre application d'annuler (restaurer) toute modification exécutée depuis une transaction en cas d'erreur au cours du processus de transaction. Toutefois, l'utilisation de transactions peut ne pas convenir dans le cas d'un travail de longue durée. Par exemple, une application de planification de voyage est implémentée en tant que flux de travail. Les étapes du flux de travail peuvent porter sur la réservation d'un vol, l'attente de l'approbation du gestionnaire et le paiement du vol. Ce processus pourrait prendre de nombreux jours et ne s'avère pas pratique pour que les étapes de réservation et de paiement du vol puissent participer à la même transaction. Dans ce scénario, la compensation pourrait être utilisée pour annuler l'étape de réservation du flux de travail en cas d'erreur ultérieure lors du traitement.
Utilisation de la compensation
Lorsqu'un flux de travail contient des activités qui exécutent une logique qui doit être annulée ou compensée si le flux de travail échoue avant la fin et si les transactions ne sont pas appropriées, ces activités peuvent être placées dans une activité CompensableActivity. Une activité CompensableActivity comprend plusieurs sections d'activités enfants notamment Body et ConfirmationHandler. L'activité Body définit l'unité de logique métier pouvant être compensée qui s'exécute lors d'une exécution de workflow normale. L'activité CompensationHandler définit l'unité de logique permettant de compenser le travail exécuté par l'activité Body. Lorsque la compensation est appelée, soit explicitement à l'aide d'une activité Compensate, soit implicitement par la logique de compensation par défaut du flux de travail, l'activité spécifiée comme CompensationHandler s'exécute, compensant ainsi l'action des activités Body. Si l'activité CompensationHandler n'est pas fournie, la logique de compensation par défaut s'exécute en compensant toutes les activités CompensableActivity imbriquées dans l'activité Body qui s'est exécutée correctement dans l'activité Body, dans l'ordre inverse d'achèvement. Pour plus d'informations sur la compensation, consultez Modèle de programmation de compensation.