Formulier expressies syntax
Toelichting vooraf
Formulier expressies worden geschreven in JavaScript. Hierover is algemeen heel wat informatie beschikbaar via boeken en het internet. Onderstaand beknopt overzicht geeft je alvast wat basisinformatie. Bij het opbouwen van expressies kan je ook een beroep doen op een AI-assistent. Check zeker ook de pagina formulier expressies voorbeelden voor enkele toegepaste use cases.
Data types
Volgende data types zijn ondersteund binnen de expressies.
Data type | Voorbeeld waarde |
---|---|
Leeg | undefined |
String | 'Hello World!' |
Boolean |
|
Getal | 99 (integer) of 1,31 (float) |
Datum tijd | 2022-09-27 18:00:00 (ISO 8601 notatie) |
Data structuur
De data kan in volgende structuren zitten.
Data structuur | Voorbeeld opbouw |
---|---|
Enkelvoudige waarde | ‘Hello world!’ |
Lijst | [0,1,2,3] of ['appels','peren','bananen'] |
Map (dictionary) | {“naam”:”Janssen”,”voornaam”:”paul”,”leeftijd”:”50”,”hobbies”:['vissen','lezen','gamen']} |
Waardes ophalen
Bij het ophalen van waardes moet je goed opletten vanuit welke scope je dit wil doen.
Proces scope
Waardes uit een procesvariabele of lokale taakvariabele
Waardes uit een procesvariabele of lokale (taak)variabele kan je niet rechtstreeks aanspreken. Hier moet je een omweg maken en eerst de variabele via een setField functie in een (eventueel verborgen) formulierveld wegschreven. Pas daarna kan je met die informatie beginnen werken binnen de context van een formulierexpressie.
Formulier scope
Waardes uit actueel geopend formulier
Waardes uit het actuele formulier kunnen opgehaald worden via $.keyVeld
. Opgelet: als je werkt met een formulierveld behorend tot een veldengroep, gebruik je $.keyGroep.keyVeld
.
Voorbeeld expressie: $.keyVeld === 'Hello world!'
retourneert true
als de veldwaarde exact matcht met de opgegeven string.
Waardes uit een logica veld (computed expression of formuliervariabele)
Waardes uit een formuliervariabele (computed expression of berekend veld) kunnen opgehaald worden via $$.computedExpressions.keyComputedExpression
Voorbeeld expressie: $$.computedExpressions.keyComputedExpression !== undefined
retourneert true
als de computed expression ingevuld is.
Waardes uit context formulier
Velden uit een gelinkt formulier kunnen opgehaald worden via context.keyFormulier.keyVeld
Voorbeeld expressie: context.keyFormulier.keyVeld > 99
retourneert true
als de veldwaarde groter is dan het opgegeven getal.
Specifieke waardes uit een lijst subveld
Een lijst is een collectie van items of elementen die bestaan uit een aantal subvelden. Als je de waarde van een specifiek subveld wil ophalen, kan je dit doen via $.keyLijst[x].keySubveld
waarbij x de index is van het item of element in de lijst. Bijvoorbeeld $.keyLijst[0].keySubveld
is de waarde van het subveld voor het eerste item in de lijst, $.keyLijst[1].keySubveld
is de waarde van het subveld voor het tweede item in de lijst. In de praktijk zal je dit als configurator niet doen (hoewel er use cases zijn, zie formulier expressie voorbeelden), omdat je op voorhand niet weet hoeveel en welke items een gebruiker zal ingeven.
Lijst scope
Dynamisch waardes uit een lijst subveld
Je kan waardes uit lijst subvelden dynamisch ophalen en gebruiken in expressies. Met dynamisch bedoelen we dat de waarde telkens wisselt per item in de lijst. Bijvoorbeeld een gebruiker geeft voor elk lijstitem een bedrag in, en onmiddellijk wil je dit bedrag omzetten van euro naar dollar. Je kan dan het bedrag dan ophalen via $.keySubveld
en in een expressie gaan omrekenen. Het resultaat laat je dan automatisch verschijnen in een ander subveld via de ComputedWith
eigenschap.
Opgelet: afhankelijk van de use case moet je de expressie waarin je dergelijke waardes gebruikt, definiëren op formulier niveau (bijvoorbeeld wanneer je de reduce()
functie gebruikt), dan wel op lijst niveau. Voor meer info en uitgewerkte voorbeelden zie de pagina formulier expressies voorbeelden.
Formulierveld scope
Waardes uit actueel geopend formulierveld (validatieregels)
Tijdens het opstellen van een validatieregel binnen een formulierveld zelf kan je de waarde van het formulier ophalen via $
. Dit kan een regulier formulierveld zijn, een lijst subveld of een veld binnen een veldengroep. Let op: de scope van de validatieregel (expressie) is het veld zelf. Je kan niet verwijzen naar andere velden of naar computed expressies.
Voorbeeld expressie: $ !== undefined
retourneert true
als de waarde ingevuld is.
Operatoren
Booleaanse operatoren
Operator | Beschrijving | Data types |
---|---|---|
&& | Verbindt twee booleaanse waardes. Indien de twee waardes | Boolean |
|| | Verbindt twee booleaanse waardes. Vanaf het ogenblik dat één van beide waardes (of allebei) | Boolean |
! | Als de hieropvolgende waarde | Boolean |
Numerische operatoren
Operator | Beschrijving | Data types |
+ | Som van twee getalwaardes. | Number |
- | Verschil van twee getalwaardes. | Number |
/ | Quotiënt van twee getalwaardes. | Number |
* | Product van twee getalwaardes. | Number |
Vergelijkende operatoren
Operator | Beschrijving | Data types |
---|---|---|
=== | Vergelijk twee waardes met elkaar. Indien identiek, retourneert de expressie | String, boolean, number, date |
!== | Vergelijk twee waardes met elkaar. Indien identiek, retourneert de expressie | String, boolean, number, date |
< | Vergelijkt twee waardes met elkaar. Indien waarde A kleiner dan waarde B, retourneert de expressie | Number, date |
> | Vergelijkt twee waardes met elkaar. Indien waarde A groter dan waarde B, retourneert de expressie | Number, date |
<= | Vergelijkt twee waardes met elkaar. Indien waarde A kleiner of gelijk aan waarde B, retourneert de expressie | Number, date |
>= | Vergelijkt twee waardes met elkaar. Indien waarde A groter of gelijk aan waarde B, retourneert de expressie | Number, date |
If - then - else statements
Het is mogelijk om je expressie te verrijken aan de hand van een “If - then -else”
statement.
Voorbeeld 1
$.naamVeld === true ? ‘Juist’ : ‘Fout’
Indien de waarde in het ja/nee-veld true
is, dan geeft de expressie de string ‘Juist’, anders de string ‘Fout’.
Voorbeeld 2
$ !== undefined? $ >= 0 && $ < 5 : true
Voorbeeld van een validatieregel voor een getal veld. De expressie checkt indien het veld ingevuld is. Indien nee, dan retourneert de expressie true
en wordt geen foutboodschap getoond. Indien ja, dan volgt er een check of het getal tussen 0 en 5 ligt. Indien ja, dan retourneert de expressie true
en wordt geen foutboodschap getoond. Indien nee, dan retourneert de expressie false
en wordt de foutboodschap gevisualiseerd.
Voorbeeld 3
Functies
Onderstaande is een slechts greep uit enkele veelgebruikte JavaScript functies.
Datumtijd functies
Onderstaande is enkel toepasbaar op waardes die geformatteerd zijn als ISO-datumtijd. moment()
, moment('2025-01-06')
, moment($.keyVeld)
of moment($)
. Datum expressies zijn courant binnen de context van formulierveld validaties.
Functie | Uitleg | Voorbeeld |
---|---|---|
moment($.keyVeld) | Een Skryv datumveld bevat een string-waarde. Via moment kan je die omzetten naar een ISO ‘datum tijd’-waarde waarmee je kan rekenen. | - |
moment('2025-01-01') | Een vaste datum waarde definiëren. | - |
moment() | Dit retourneert de actuele ‘datum tijd’-waarde in ISO formaat. | - |
.date() .year(), .quarter(), .month(), .day(), .hour(), .minute(), .second() | Retourneert enkel een specifieke component uit een datum tijd waarde. |
|
.year(2026), .month(01), .day(06), .hour(16), .minute(15), .second(03) | Vult een specifieke component in binnen een datum tijd waarde. |
|
.add(x,'days') | Telt tijd op. Eerste parameter is de hoeveelheid (bv. 2); tweede parameter is de eenheid (zoals ‘days’, maar kan ook ‘years', ‘months’, ‘days’, ‘hours’, minutes’, ‘seconds' of 'milliseconds’ zijn). |
|
.subtract(x,'months') | Trekt tijd af. Eerste parameter is de hoeveelheid (bv. 2); tweede parameter is de eenheid (zoals ‘days’, maar kan ook ‘years', ‘months’, ‘days’, ‘hours’, minutes’, ‘seconds' of 'milliseconds’ zijn). |
|
Getal functies
Onderstaande is enkel toepasbaar op waardes die geformatteerd zijn als getal (integer, float, enzovoort).
Functie | Uitleg | Voorbeeld |
---|---|---|
parseInt(waarde,radix) | Zet een string om naar een integer. Het eerste argument is de waarde die je wil omzetten. Het tweede argument is de radix. Vul 10 in als je wil dat de waarde geïnterpreteerd wordt als een decimaal getal. |
|
Math.round() | Afronden naar het dichtsbijzijnde geheel getal. |
|
Number(waarde.toFixed()) | Omzetten naar een number en afronden tot op een gespecificeerd aantal getallen na de komma. |
|
parseFloat(waarde) parseFloat((waarde).toFixed(x)) | Zet een string om naar een float. Aangezien een float potentieel een groot aantal cijfers na de komma heeft, kan je dit aanvullen met de method |
|
String functies
Onderstaande is enkel toepasbaar op waardes die geformatteerd zijn als string.
Functie | Uitleg | Voorbeeld |
---|---|---|
.length | Retourneert het aantal karakters in de string. |
|
.concat() | Via deze functie kan je verschillende waardes in een string concateneren. |
|
.substring() | Haalt een stuk van de string op tussen twee indices. |
|
.includes() | Controleert of een bepaalde substring aanwezig is in de string. |
|
.replace() | Vervangt een deel van de string door een andere string. |
|
Lijst functies
Onderstaande is enkel toepasbaar op lijsten.
Functie | Uitleg | Voorbeeld |
---|---|---|
.length | Retourneert het aantal items in de lijst. |
|
$$.path $$.path[0] | Retourneert het pad naar het geselecteerde veld (d.w.z. de veld scope vanwaaruit de expressie geschreven is) als een lijst. Door de index parameter toe te voegen kan je een specifiek element binnen het pad selecteren. In de praktijk wordt dit gebruikt om de index eigenschap van een lijstitem op te halen. |
|
.reduce() | Doorloopt elk item van de lijst en voert telkens (iteratief) een bewerking uit met de waarde in een specifiek subveld. Klik door naar formulier expressies voorbeelden voor een uitgewerkt voorbeeld. |
Uitleg:
|
.some() | Doorloopt elk item van de lijst om te kijken of er minstens één van de items aan de opgegeven check voldoet. Indien ja, dan wordt |
Zie formulier expressies voorbeelden voor een uitgewerkte use case. |
.every() | Doorloopt elk item van de lijst om te kijken of alle items aan de opgegeven check voldoen. Indien ja, dan wordt |
Zie formulier expressies voorbeelden voor een uitgewerkte use case. |