Kennisbank

Exceptie pattern in Mendix

“Er is een fout opgetreden, neem contact op met uw systeembeheerder.”

Als een gebruiker deze standaard Mendix foutmelding ziet, is onze ervaring dat de melding genegeerd wordt, of dat er contact opgenomen wordt dat er iets mis was. De gebruiker heeft alleen geen idee meer wanneer precies of waarom. Helpen wordt lastig.

Om de feedback die het systeem aan de gebruiker geeft te verbeteren en een meer informatieve logging voor de ontwikkelaar te realiseren, gebruiken we een vast pattern voor elke actie vanaf een pagina. Dat ziet er als volgt uit: Het begint met een action nanoflow om alle klantacties af te handelen. Denk aan het openen van een nieuwe pagina, een object verversen of de gebruiker een bericht tonen. Vervolgens roepen we een action microflow aan die de logische subflow uitvoert en het resultaat daarvan afhandelt inclusief foutafhandeling en logging. Het resultaat wordt geretourneerd in een specifieke FlowResult entiteit aan de nanoflow (zie afbeelding 1).

 

Afbeelding 1

 

Het pattern ziet er per stap als volgt uit:

Action nanoflow aanroepen vanaf een pagina

De action nanoflow wordt aangeroepen vanaf een pagina en krijgt de prefix “Nanoflow Action Call” (NAC). Als er validatie van velden nodig is, dan roept deze nanoflow eerst een microflow aan voor de validatie. We gebruiken hiervoor een microflow, zodat we de validatie kunnen unit testen. Als je niet met unit tests werkt, dan volstaat een sub-nanoflow uiteraard ook. Een validatie flow geeft een resultaat terug waardoor je weet of je de vervolgactie kunt uitvoeren of niet.

Action microflow aanroepen vanaf nanoflow

De action microflow (met de prefix ACT) krijgt dezelfde rechten als de action nanoflow. Deze microflow maakt een FlowResult object aan en roept de sub microflow aan met de logica erin (zie afbeelding 2). Op deze sub microflow wordt de foutafhandeling afgevangen, zodat we bij fouten een logging kunnen maken en het FlowResult op niet succesvol kunnen zetten. Ook de foutmelding wordt in het FlowResult gezet. Afhankelijk van het resultaat kun je dan in de microflow zelf of in de action nanoflow de gewenste vervolgactie uitvoeren.

Sub microflow vanaf action microflow

De sub microflow handelt alle logica af. Objecten worden hier gewijzigd, aangemaakt en verwijderd, berekeningen uitgevoerd, etc. Als er een onverwachte situatie optreed, dan zorgen we zelf voor een raise van een exceptie. Het is namelijk niet het gewenste en verwachte gedrag van de logica en dus een execptie. Op deze manier kan de action microflow opvangen wat er fout is gegaan en de juiste afhandeling (inclusief logging) uitvoeren.

Afbeelding 2

 

Aandachtspunten bij het pattern

  • We hebben gekozen voor verschillende prefixen (NAC, ACT, SUB) zodat je dezelfde namen kunt gebruiken voor wat vaak dezelfde functionaliteit is. Je kunt daardoor dezelfde en beschrijvende naam gebruiken, zonder dat je voor iedere flow een andere naam hoeft te bedenken.
  • Het blijft een afweging of het nodig is om dit pattern toe te passen of niet. Een eenvoudige nanoflow die een Boolean attribuut verandert om de weergave aan te passen heeft dit pattern niet nodig.
  • Maak onderscheid in de taal waarin de gebruiker de melding te zien krijgt (uiteraard zijn of haar eigen taal) en de taal van de melding in de logging. In de logging is het handiger om de melding in een taal op te slaan die de ontwikkelaars beheersen.

 

Geschreven door Reinier Stam
Mendix ontwikkelaar

Contact

Laat ons helpen jouw ambities concreet te maken.

Neem contact met ons op.