Een goedkeuringsworkflow bouwen in AppSheet is een van de meest waardevolle dingen die je met het platform doet. Veel bedrijfsprocessen draaien om iemand die iets aanvraagt en iemand anders die dat goedkeurt: denk aan verlofaanvragen, declaraties of inkooporders. In dit artikel bouw je een complete goedkeuringsstroom op, van aanvraag tot beslissing, met automatische meldingen erbij.
De opzet van een goedkeuringsworkflow
Elke goedkeuringsworkflow heeft dezelfde kern: een aanvraag die een status doorloopt. Een aanvraag begint als In behandeling, gaat naar Goedgekeurd of Afgewezen, en op basis van die status gebeurt er iets. Je hebt dus drie bouwstenen nodig: een statuskolom, twee acties en een paar automatiseringen.
De stroom ziet er in grote lijnen zo uit:
- Aanvraag. Een medewerker dient een nieuwe aanvraag in.
- In behandeling. De goedkeurder krijgt een melding en ziet de aanvraag in zijn lijst.
- Beslissing. De goedkeurder tikt op Goedkeuren of Afwijzen.
- Afronding. De aanvrager krijgt automatisch het resultaat per mail.
De statuskolom en acties instellen
Begin met een kolom Status van het type Enum met de waarden In behandeling, Goedgekeurd en Afgewezen. Stel de beginwaarde in op In behandeling, zodat elke nieuwe aanvraag automatisch die status krijgt.
Goedkeur- en afwijs-acties maken
- Ga naar het tabblad Behavior en klik op
New Action. - Maak een actie Goedkeuren die de kolom Status op Goedgekeurd zet (actietype
Data: set the values of some columns in this row). - Stel onder
Behaviorde voorwaarde in zodat de actie alleen verschijnt bij status In behandeling, bijvoorbeeld[Status] = "In behandeling". - Maak op dezelfde manier een actie Afwijzen die de status op Afgewezen zet.
- Voeg desgewenst kolommen toe die vastleggen wie wanneer besliste.
- Test beide acties in het voorbeeldscherm rechts in de editor.
Door de voorwaarde verschijnen de knoppen alleen bij aanvragen die nog niet behandeld zijn. Zodra een aanvraag is goedgekeurd of afgewezen, verdwijnen de knoppen en is de beslissing definitief.
Leg een controleerbaar spoor vast
Voeg kolommen Beslist door en Beslist op toe en vul die automatisch met USEREMAIL() en NOW() op het moment dat de actie wordt uitgevoerd. Zo heb je altijd een controleerbaar spoor van wie wanneer welke aanvraag afhandelde.
De juiste persoon de juiste aanvragen tonen
Een goedkeurder hoeft alleen openstaande aanvragen te zien die voor hem bedoeld zijn. Met een beveiligingsfilter zorg je dat elke gebruiker alleen de relevante rijen binnenhaalt. Een manager ziet bijvoorbeeld alleen aanvragen van het eigen team met status In behandeling.
Beveiligingsfilters doen meer dan opschonen
Beveiligingsfilters bepalen welke rijen een gebruiker binnenhaalt. Ze maken je app niet alleen overzichtelijker, maar ook veiliger, omdat gevoelige data niet op het apparaat van onbevoegden terechtkomt. Lees meer in beveiligingsfilters instellen.
Automatische meldingen koppelen
Het sluitstuk is communicatie. Wanneer een aanvraag binnenkomt, krijgt de goedkeurder een mail. Zodra er een beslissing valt, krijgt de aanvrager bericht. Dit regel je met bots in het tabblad Automation. Je bouwt in de praktijk drie bots:
- Melding aan goedkeurder. Een bot die start bij een nieuw record (event op
data changevoor toegevoegde rijen) stuurt een mail naar de goedkeurder met de details van de aanvraag, zodat die direct weet dat er actie nodig is. - Melding aan aanvrager. Een bot die start bij een statuswijziging stuurt de aanvrager het resultaat. De inhoud verschilt op basis van of de status Goedgekeurd of Afgewezen is.
- Herinnering. Een geplande bot (event op een schedule) stuurt een herinnering als een aanvraag te lang openstaat, zodat niets blijft liggen.
Voorkom een mailstroom
Bouw bij de resultaatmail een voorwaarde in zodat de mail alleen wordt verstuurd bij een echte beslissing, dus bij status Goedgekeurd of Afgewezen, en niet bij elke kleine wijziging aan het record. Anders krijgt de aanvrager onbedoeld meerdere mails.
Een praktisch voorbeeld: verlofaanvragen
Stel je hebt een tabel Verlof met de kolommen Medewerker, Startdatum, Einddatum, Reden en Status. De medewerker vult een aanvraag in, waarna Status automatisch op In behandeling staat. De manager opent zijn app, ziet dankzij het beveiligingsfilter alleen openstaande aanvragen van het eigen team, en tikt op Goedkeuren of Afwijzen. Op dat moment vullen Beslist door en Beslist op zichzelf, en stuurt de tweede bot de medewerker meteen bericht. Het hele proces verloopt zonder mailtjes heen en weer of een gedeeld spreadsheet dat iemand vergeet bij te werken.
Kan ik meerdere goedkeuringsstappen instellen?
Ja. Voeg meer statussen toe, bijvoorbeeld Eerste goedkeuring en Eindgoedkeuring, en koppel per stap een eigen goedkeurder en melding. Zo bouw je een keten van goedkeuringen.
Hoe voorkom ik dat een aanvrager de eigen aanvraag goedkeurt?
Stel de voorwaarde van de goedkeur-actie zo in dat de huidige gebruiker niet de aanvrager mag zijn, bijvoorbeeld met USEREMAIL() <> [Aanvrager]. Zo dwing je functiescheiding af.
Kan een goedkeurder rechtstreeks vanuit de mail beslissen?
Ja. Je kunt in de mail een actieknop opnemen die de goedkeurder naar de juiste aanvraag in de app brengt, zodat hij daar in een tik de status aanpast.
Werkt de goedkeuringsflow ook op mobiel?
Ja. De acties verschijnen als knoppen in de app op telefoon, tablet en web, zodat een goedkeurder onderweg kan beslissen.
Wat gebeurt er als een goedkeurder offline beslist?
AppSheet bewaart de wijziging lokaal en synchroniseert die zodra het apparaat weer verbinding heeft. De bots draaien pas na synchronisatie, dus de mail volgt iets later.
Kan ik zien hoe lang aanvragen blijven liggen?
Ja. Met de kolommen voor indien- en beslisdatum maak je een berekende kolom voor de doorlooptijd en bouw je daar een eenvoudig overzicht op, zodat je knelpunten ziet.
Volgende stappen
Met deze opzet heb je een werkende goedkeuringsworkflow. Verfijn hem met e-mailmeldingen die er professioneel uitzien, regel de toegang met beveiligingsfilters en breid uit met extra automatische acties. Zo wordt een handmatig goedkeuringsproces een soepele, betrouwbare stroom.