Compensation
Concept
Een compensation triggert een aantal bijkomende activiteiten die als doelstelling hebben om eerder uitgevoerde acties terug te draaien en dus te compenseren. Belangrijk is dat een compensation catch boundary event enkel getriggerd kan worden indien de taak of het subproces waaraan je het hebt vastgemaakt, volledig afgerond is.
Een cancellation wordt uitgestuurd door een cancellation throw event binnen de scope van een transactional subprocess. De cancellation wordt opgevangen door een cancellation catch boundary event dat vastgemaakt is op het transactional subprocess. Let wel, het subprocess moet op dat moment nog actief zijn. De cancellation zal het subprocess afsluiten en tegelijk alle compensation catch events binnen de scope van het subprocess activeren. Zie het uitgewerkt voorbeeld verder op deze pagina.
Use cases
Annuleren van een eerder uitgevoerde reservatie.
Terugbetaling van een eerder uitgevoerde betaling.
Bijkomende communicatie om een eerder uitgestuurde communicatie te corrigeren.
Symbool
Een compensatie wordt voorgesteld door het terugspoelen symbool.
Een cancellation wordt voorgesteld via onderstaand symbool.
Configuratie
De configuratie verloopt via cancel en compensation events. Compensation throw en compensation catch events moeten naar elkaar verwijzen. Compensation catch events die gedefinieerd zitten binnen een transactional subproces, worden automatisch getriggerd indien dit subproces gecancelled geraakt.
Gelinkte events
Cancel end event: info en eigenschappen.
Cancel catch boundary event: info en eigenschappen.
Compensation throw end event: info en eigenschappen.
Compensation throw intermediate event: info en eigenschappen.
Compensation catch boundary event: info en eigenschappen.
Compensation catch start event: info en eigenschappen.
Voorbeelden
Voorbeeld 1
Onderstaand voorbeeld schetst een generiek aanvraag- en verwerkingsproces. Na het indienen van de aanvraag volgen een aantal niet nader omschreven verwerkingsstappen. Tijdens en tot vijf dagen na de verwerking kan de aanvrager beslissen om zijn aanvraag te annuleren. In dat geval moet een dossierbehandelaar manueel de reeds uitgevoerde verwerkingsstappen ongedaan maken. Via de compensation boundary events wordt voor elk van die acties een gebruikerstaak (met bijvoorbeeld een eenvoudige bevestigingstaak) aangemaakt.
Merk op:
Het compensation throw end event verwijst niet naar een specifieke activiteit waarvoor compensatie nodig is. Bijgevolg volgt activatie van alle compensation catch boundary events (op voorwaarde dat de corresponderende activiteit afgerond is).
De laatst voltooide verwerkingsstap zal het eerst om compensatie zal vragen, enzovoort.
Voorbeeld 2
Onderstaand voorbeeld schetst een generieke procedure met simultane uitvoering van twee stappen. Na afloop volgt er een check. Indien alles OK is dan sluit het proces zichzelf af. Is er iets niet OK, dan start het compensatieproces waarbij achtereenvolgens stap 1 en stap 2 gecompenseerd (ongedaan gemaakt) worden.
Merk op:
Een compensation throw event kan ook verwijzen naar een compensation catch start event binnen een eerder afgerond subproces.
Elk compensation throw event verwijst hier naar een specifieke compensation catch event. Op die manier kan je als configurator de compensatievolgorde zelf bepalen. Dus, ook al was stap 2 eerder af dan stap 1, toch dwingt het compensatieproces eerst de compensatie van stap 1 en dan pas van stap 2 af.
Voorbeeld 3
Onderstaand voorbeeld schetst een procedure waarbij een gebruiker lid wil worden van een platform en zich wil abonneren op een aantal diensten. De betaling gebeurt via credit card. Centraal zie je een transactional subproces waarin de transactie of uitwisseling plaatsvindt. Deze bestaat uit drie componenten.
Aanmaak account, activatie gevraagde diensten en inschrijving op mailinglijsten.
Betaling via credit card van de gebruiker.
Gebruiker krijgt 30 dagen de optie om te annuleren.
Voordelen van deze manier van werken:
Gelijk oversteken principe: activatie van de diensten en betaling gebeuren gelijktijdig. Dit biedt voordelen voor de gebruiker (onmiddellijke toegang, mogelijkheid tot kosteloos annuleren) en voor de dienstverlener (gelijktijdig start meteen het betalingsproces).
Cancel scenario : indien de betaling niet lukt of de gebruiker annuleert binnen de 30 dagen, worden alle stappen automatisch teruggedraaid in omgekeerde volgorde. De laatst voltooide activiteit wordt als eerste gecompenseerd, enzovoort. Er is geen menselijke tussenkomst nodig.
Meer info
Meer info over cancel en compensation events vind je op de Camunda 7 docusite.