Condividi tramite


Compensazione

La compensazione in WF è il meccanismo mediante il quale il lavoro completato in precedenza può essere annullato o compensato (seguendo la logica definita dall'applicazione) in seguito a un errore. Le transazioni consentono di combinare più operazioni in un'unica unità di lavoro. Quando viene utilizzata una transazione, l'applicazione può annullare, ovvero eseguire il rollback, di tutte le modifiche eseguite dall'interno della transazione se si verificano errori durante qualsiasi parte del processo della transazione. L'utilizzo di transazioni potrebbe tuttavia non essere adatto per un lavoro a esecuzione prolungata. Ad esempio, un'applicazione di pianificazione di viaggi viene implementata come flusso di lavoro. I passaggi del flusso di lavoro possono essere costituiti dalla prenotazione di un volo, dall'attesa dell'approvazione da parte del responsabile e dal pagamento del volo. Questo processo potrebbe richiedere molti giorni e non è funzionale che i passaggi di prenotazione e pagamento del volo prendano parte alla stessa transazione. In questo scenario, la compensazione potrebbe essere utilizzata per annullare il passaggio di prenotazione del flusso di lavoro se, successivamente, si verifica un errore nell'elaborazione.

Utilizzo della compensazione

Quando un flusso di lavoro contiene attività che eseguono la logica che deve essere annullata o compensata se il flusso di lavoro non viene completato e le transazioni non sono corrette, queste attività possono essere inserite in un'attività CompensableActivity. Un'attività CompensableActivity dispone di molte sezioni di attività figlio, incluse le proprietà Body e ConfirmationHandler. L'attività Body definisce l'unità compensabile di logica di business in esecuzione durante l'esecuzione normale del flusso di lavoro e l'attività CompensationHandler definisce l'unità di logica per compensare il lavoro eseguito dalla proprietà Body. Quando la compensazione viene richiamata in modo esplicito tramite un'attività Compensate o in modo implicito dalla logica di compensazione dell'impostazione predefinita del flusso di lavoro, viene eseguita l'attività specificata come proprietà CompensationHandler, compensando l'azione delle attività Body. Se l'attività CompensationHandler non viene fornita, la logica di compensazione predefinita viene eseguita compensando tutte le attività CompensableActivity annidate nella proprietà Body che è stata eseguita correttamente nella proprietà Body, in ordine inverso rispetto al completamento. Per ulteriori informazioni compensazione, vedere Modello di programmazione della compensazione.

Vedere anche

Riferimento

CompensableActivity
Compensate