Freigeben über


Kompensierung

Die Kompensierung in WF ist der Mechanismus, mit dem zuvor abgeschlossene Arbeitsaufgaben rückgängig gemacht bzw. kompensiert werden können (gemäß der von der Anwendung definierten Logik), wenn nachfolgend ein Fehler auftritt. Transaktionen ermöglichen es Ihnen, mehrere Vorgänge in nur einer Arbeitseinheit zu kombinieren. Wenn Sie Transaktionen verwenden, kann Ihre Anwendung alle Änderungen zurücknehmen (Rollback), die innerhalb der Transaktion ausgeführt wurden, falls während des Transaktionsprozesses ein Fehler auftritt. Die Verwendung von Transaktionen eignet sich jedoch möglicherweise nicht für Arbeitsaufgaben mit langer Laufzeit. Angenommen, eine Anwendung zum Planen von Reisen wird als Workflow implementiert. Die Schritte des Workflows bestehen z. B. aus der Buchung eines Flugs, dem Warten auf die Genehmigung des Managers und der anschließenden Bezahlung des Flugs. Da sich dieser Prozess über mehrere Tage hinziehen kann, ist es nicht sinnvoll, die Buchungs- und Zahlungsschritte in derselben Transaktion zu implementieren. In diesem Szenario kann der Buchungsschritt des Workflows mittels Kompensierung rückgängig gemacht werden, wenn an späterer Stelle ein Verarbeitungsfehler auftritt.

Verwenden von Kompensierung

Wenn ein Workflow Aktivitäten enthält, die bei einem Fehler des Workflows rückgängig zu machende Logik ausführen, und Transaktionen nicht angemessen sind, dann können Sie diese Aktivitäten in eine CompensableActivity-Aktivität einfügen. Eine CompensableActivity-Aktivität verfügt über mehrere untergeordnete Aktivitätsabschnitte, darunter Body und ConfirmationHandler. Die Body-Aktivität definiert die kompensierbare Geschäftslogikeinheit, die während der normalen Workflowausführung ausgeführt wird, und die CompensationHandler-Aktivität definiert die Logikeinheit zur Kompensierung der von Body ausgeführten Arbeit. Wenn die Kompensierung aufgerufen wird (explizit mit einer Compensate-Aktivität oder implizit mit der Standardkompensierungslogik des Workflows), wird die als CompensationHandler angegebene Aktivität ausgeführt und kompensiert die Aktion der Body-Aktivitäten. Wird die CompensationHandler-Aktivität nicht bereitgestellt, wird die Standardkompensierungslogik ausgeführt, und alle CompensableActivity-Aktivitäten, die im Body-Element geschachtelt sind und im Body-Element erfolgreich ausgeführt wurden, werden in umgekehrter Reihenfolge kompensiert. Weitere Informationen zu zur Kompensierung finden Sie unter Programmiermodell für Kompensation.

Siehe auch

Verweis

CompensableActivity
Compensate