Workflow expressies syntax
Concept
Workflow expressies worden geschreven in een door Camunda gecustomiseerde versie van JUEL (een op Java-gebaseerde expressietaal).
Klik hier om de officiële documentatie van JUEL te consulteren (let wel: niet alles wordt ondersteund).
Een expressie is pas uitvoerbaar als die tussen accolades genoteerd staat. Het geheel wordt door een $ dollarteken voorafgegaan.
${expressie}
Via chaining operators kan je meerdere elementen in een logisch verband onderbrengen.
${getal>10?'groot':'klein'}
${voornaam.concat(' ‘).concat(achternaam)}
Expressies bieden slechts beperkte functionaliteit. Heb je nood aan meer complexiteit (bijvoorbeeld itereren over lijstelementen)? Dan kan je gebruik maken van scripts.
Wil je een apart stukje code opstellen en deze vervolgens oproepen via een workflow expressie? Kijk dan onder de sectie extensies en customizaties.
Data types
Volgende data types zijn ondersteund binnen workflow expressies.
Data type | Voorbeeld waarde |
|---|---|
Null | Geen waarde |
String | 'Hello World!' |
Boolean |
|
Integer | 15 (geheel getal, negatief of positief) |
Double | 15.5 (decimaal getal, negatief of positief) |
Datum | 2025-04-01T13:49:13 (altijd inclusief tijdsstempel) |
Data objecten
De data zit typisch in volgende Java-gebaseerde structuren.
Data structuur | Voorbeeld opbouw |
|---|---|
Directe waarde | ‘Hello World!’ |
Lijst | ['value1','value2','value3'] |
Map | {“key1”:'value1',“key2”:'value2',“key3”:'value3'} |
Lijst-Map | [{“key1”:'value1',“key2”:'value2',“key3”:'value3'},{“key1”:'value1',“key2”:'value2',“key3”:'value3'},{“key1”:'value1',“key2”:'value2',“key3”:'value3'}] |
Omgaan met data objecten
Procesvariabelen met een complexere structuur zoals lijsten, maps en lijst-maps kan je op volgende manieren manipuleren vanuit een expressie. De mogelijkheden zijn erg beperkt. Via een workflow script kan je extra zaken doen zoals bijvoorbeeld waardes toevoegen aan of verwijderen uit een lijst.
Waarde ophalen
Je kan een waarde ophalen via volgende expressie.
${mijnVariabele}
Waarde uit een lijst ophalen
Je kan een waarde uit een lijst ophalen via de index.
$[mijnLijst[0]} retourneert het eerste item in de lijst.
Aantal items in een lijst vaststellen
Lengte van een lijst vaststellen.
mijnLijst = ['jan','mieke','paul']
${mijnLijst.size()} retourneert het aantal items in de lijst als integer (bijvoorbeeld 3).
Waarde uit een map ophalen
Je kan een waarde uit een map ophalen via de key.
${mijnMap['leeftijd']} retourneert de waarde van de key ‘leeftijd’ in de map.
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 |
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 |
Logische statements
Statement | Beschrijving |
|---|---|
[boolean] ? [functie A] : [functie B] | Indien boolean |
[(getal A + getalB) * 3] / 2 | Via haakjes kan je verschillende numerieke bewerkingen groeperen en hiërarchisch met elkaar combineren. |
Functies
Camunda engine services
Functies worden aaneengeregen tot expressies via de Fluent API methodiek (method chaining).
Meer info vind je volgende pagina’s:
Overzicht van courant gebruikte Camunda engine services.
Skryv platform services
Functies worden aaneengeregen tot expressies via de Fluent API methodiek (method chaining).
Meer info vind je volgende pagina’s:
Overzicht van courant gebruikte Skryv platform services.
Datum tijd functies
De huidige datum en tijd ophalen
Hiervoor heb je twee mogelijke expressies:
${now()}${dateTime().toDate}
Deze resulteren in een datum waarde als 2025-04-01T13:49:13
Een specifieke datum en tijd instellen
Ook hiervoor heb je verschillende mogelijkheden. Onderstaande is er één van.
${dateTime().withDate(2030,12,30).toDate()}
Het resultaat is een datum waarde 2030-12-30T09:24:30, waarbij de tijdsstempel gelijk is aan het ogenblik waarop de variabele aangemaakt wordt.
Wil je ook de tijdsstempel preciseren, dan voeg je .withTime() method toe.
${dateTime().withDate(2030,12,30).withTime(12,0,0,0).toDate()}
Opgelet, de workflow engine zit in tijdszone UTC, en een tijdsstempel zetten is dus vanuit UTC tijd gezien. Doordat België zich in de winter in UTC+1 bevindt, zal de resulterende datum waarde 2030-12-30T13:00:00 zijn. In de zomer bevindt België zich in UTC+2, dus zal de resulterende datum waarde bijvoorbeeld 2030-06-30T14:00:00 zijn.
Datumveld uit formulier omzetten naar een datum waarde
Dit kan je doen in twee stappen:
Stap 1: Breng de waarde van het datumveld formulier over naar een procesvariabele zoals
mijnDatum. De waarde is nu evenwel van het type string.Stap 2: Zet daarom nu de procesvariabele om naar een datum waarde via volgende expressie
${dateTime().parse(mijnDatum).toDate()}
Het resultaat is een datum waarde, bijvoorbeeld: 2025-04-01T00:00:00
Datum waarde wegschrijven naar een datumveld in formulier
Een procesvariabele (bijvoorbeeld ‘test’) met een datum waarde kan je via de setField functie in het formulierveld (bijvoorbeeld ‘datum’) wegschrijven.
${skryv.dossierFromScope(execution).getOrCreateDocumentByDefinitionKey("testFormulierC").setField("datum",test)}
De tijdsstempel wordt hierbij achterwege gelaten.
Rekenen met datum tijd binnen workflow
Binnen de scope van de workflow is het best practice om timer events te gebruiken. Enkele voorbeelden van use cases: na weigering krijgt de aanvrager nog 30 dagen de mogelijkheid om beroep aan te tekenen, twee dagen vóór de opleveringsdatum van een taak wordt een reminder uitgestuurd naar de uitvoerder van de taak, enzovoort. Klik hier voor meer uitleg over timer events, hun gedrag en eigenschappen.
Rekenen met datum tijd binnen expressies
Binnen de scope van een expressie kan je volgende functies aanspreken.
Functie met voorbeeld | Beschrijving |
|---|---|
Zelfde opbouw lukt ook met plusYears(), plusMonths(), plusWeeks(), plusHours(), plusMinutes(), plusSeconds(). Je kan ook combinaties maken. | Huidige datum plus één dag. |
Zelfde opbouw lukt ook met minusYears(), minusMonths(), minusWeeks(), minusHours(), minusMinutes(), minusSeconds(). Je kan ook combinaties maken. | Huidige datum min één dag. |
Getal functies
Overzicht van functies die je kan uitvoeren op een variabele van het type getal.
Operator | Beschrijving |
+ | Som van twee getalwaardes. |
- | Verschil van twee getalwaardes. |
/ | Quotiënt van twee getalwaardes. |
* | Product van twee getalwaardes. |
String functies
Overzicht van een aantal courante functies die je kan uitvoeren op een variabele van het type string.
Functie met voorbeeld | Beschrijving |
|---|---|
‘Hello'.concat(' ’).concat('world‘).concat(’!') | Twee of meerdere string waardes met elkaar concateneren. Retourneert ‘Hello world!’. |
| Waarde in procesvariabele omzetten naar een string. |
| Retourneert |
| Retourneert |
| Retourneert |
| Retourneert |
| Retourneert |
' tekst met whitespace voor en na '.trim() | Verwijdert whitespace voor en na en retourneert ‘tekst met whitespace voor en na’. |
‘Jan Peeters’.toLowerCase() | Retourneert ‘jan peeters'. |
‘Jan Peeters’.toUpperCase() | Retourneert ‘JAN PEETERS’. |
'Jan Peeters'.replaceAll('Peeters','Janssen') | Retourneert ‘Jan Janssen’. |
‘Jan Peeters’.substring(0,2) | Retourneert ‘Jan’. Dit het stuk van de string dat zich uitstrekt van index positie 0 tot en met index positie 2. |
‘Jan Peeters’.substring(4) | Retourneert ‘Peeters’. Dit is het stuk van de string dat zich uitstrekt van index positie 4 tot en met de laatste index positie. |