Rekenen en Vergelijkingen: verschil tussen versies

Uit ZaaksysteemWiki
Ga naar: navigatie, zoeken
(Voorbeelden)
(Magicstring: Rekenen)
 
(103 tussenliggende versies door dezelfde gebruiker niet weergegeven)
Regel 2: Regel 2:
  
 
= Algemeen =
 
= Algemeen =
Rekenen en vergelijkingen kunnen op meerdere plekken in het systeem gebruikt worden, namelijk:
+
Rekenen en vergelijkingen met waarden van [[Catalogus_kenmerk|Kenmerken]] kunnen op meerdere plekken in het systeem gebruikt worden, namelijk:
  
 
<ul>
 
<ul>
 
<li>Direct in magicstrings</li>
 
<li>Direct in magicstrings</li>
<li>[http://wiki.zaaksysteem.nl/Zaaktypebeheer_Regels#Vul_waarde_in_met_formule Regel: Vul waarde in met formule]</li>
+
<li>[[Zaaktypebeheer_Regels#Vul_waarde_in_met_formule|Regel: Vul waarde in met formule]]</li>
<li>[http://wiki.zaaksysteem.nl/Catalogus_documentsjabloon#Variabele_teksten Variabele teksten] in documentsjablonen</li>
+
<li>[[Catalogus_documentsjabloon#Variabele_teksten|Variabele teksten]] in documentsjablonen</li>
 
</ul>
 
</ul>
 +
 +
Zie voor een snel overzicht van de basisfunctionaliteiten de samenvatting: [[Rekenen_en_Vergelijkingen_Samenvatting|Rekenen en Vergelijkingen Samenvatting]].
 +
=== Complexiteit ===
 +
Deze functionaliteit maakt het mogelijk om logica te gebruiken in magicstrings, sjablonen en de regel 'vul waarde in'. De bouwblokken an sich zijn op het basisniveau van de logica, en zijn daarmee makkelijk te gebruiken en begrijpen. Tegelijkertijd betekent dit dat met deze bouwblokken complexere logica gebouwd kan worden, en dit kan tot in het theoretisch oneindige doorgevoerd worden. Hierbij moeten beheerders waken voor toenemende kosten voor beheer van deze logica en dit niet uit het oog verliezen bij het implementeren of uitbreiden van complexere logica.
 +
 +
=== Schrijfwijze ===
 +
Eenvoudige inrichtingen zijn makkelijk om te lezen, maar met complexere inrichtingen wordt het al gauw moeilijk om te overzien wat er nu precies ingericht is. Goed leesbare scripts zijn belangrijk voor de toekomstige zelf en collega's. De leesbaarheid van scripts zijn niet enkel belangrijk voor de tijdbesparing die behaald wordt in het begrijpen of opsporen van fouten. Goed leesbare scripts zijn ook heel begrijpelijk en dat stelt de beheerder in staat om op een hoger abstractieniveau naar het script te kijken, verbeteringen aan te brengen en/of complexere situaties te maken (mits nodig).
 +
 +
Een script kan leesbaarder gemaakt worden met onder andere correct spatiegebruik. Spaties zijn enkel van belang voor de mens; voor het systeem zijn de volgende twee scripts identiek, maar de tweede leest een stuk fijner.
 +
<pre>
 +
show_when{or(and(voorbeeld_kenmerk*8==40,example_kenmerk=="Appel"),bbv_akkoord=="Niet akkoord")}
 +
</pre>
 +
<pre>
 +
show_when { or( bbv_akkoord == "Niet akkoord", and( voorbeeld_kenmerk * 8 == 40 , example_kenmerk == "Appel" ) ) }
 +
</pre>
 +
In het tweede script is ook de and() naar het einde verplaatst. Op deze manier is het minder verwarrend welke voorwaarden nu wel binnen de AND vallen, en welke enkel binnen de OR vallen.
 +
 +
Als meerdere medewerkers scripts maken, dan is het verstandig om een 'huisstijl' te ontwikkelen, zodat elkanders scripts leesbaarder zijn. Het is ook aan te raden om elkaars scripts goed te keuren alvorens deze in productie te nemen, zodat de collega die er met een frisse blik naar kijkt eventuele fouten kan zien of verbeteringen kan voorstellen.
  
 
= Constanten =
 
= Constanten =
 
De volgende constanten kunnen gebruikt worden bij het rekenen of vergelijken:
 
De volgende constanten kunnen gebruikt worden bij het rekenen of vergelijken:
{| class="wikitable"
+
{| class="wikitable" style="text-align:center;"
 
|-
 
|-
!Simpele notatie
+
!style="width:150px;"|Simpele notatie
!Complexe notatie
+
!style="width:150px;"|Complexe notatie
!Waarde
+
!style="width:150px;"|Waarde
 
|-
 
|-
 
|:pi
 
|:pi
Regel 33: Regel 51:
 
=== Rekentekens ===
 
=== Rekentekens ===
 
De rekentekens die gebruikt kunnen worden zijn:
 
De rekentekens die gebruikt kunnen worden zijn:
{| class="wikitable"
+
{| class="wikitable" style="text-align:center;"
 
|-
 
|-
!Naam
+
!style="width: 125px;"|Naam
!Teken
+
!style="width: 125px;"|Teken
!Voorbeeldformule
+
!style="width: 125px;"|Voorbeeld
!Output
+
!style="width: 125px;"|Output
 +
!style="width: 200px;"|Volgorde
 
|-
 
|-
 
|haakjes
 
|haakjes
Regel 44: Regel 63:
 
|6 * ( 2 + 2 )
 
|6 * ( 2 + 2 )
 
|24
 
|24
 +
|Als eerste
 
|-
 
|-
 
|keer/maal
 
|keer/maal
Regel 49: Regel 69:
 
|6 * 2
 
|6 * 2
 
|12
 
|12
 +
|rowspan="2"|Na haakjes<br>Van links naar rechts
 
|-
 
|-
 
|gedeeld door
 
|gedeeld door
Regel 59: Regel 80:
 
|6 + 2
 
|6 + 2
 
|8
 
|8
 +
|rowspan="2"|Na keer/gedeeld door<br>Van links naar rechts
 
|-
 
|-
 
|min
 
|min
Regel 66: Regel 88:
 
|}
 
|}
  
De volgorde waarin de rekentekens verwerkt worden is alsvolgt: Haakjes wegwerken -> Keer/delen (van links naar rechts), Plus/min (van links naar rechts).
+
=== Voorbeelden ===
 +
Onderstaand drie voorbeelden voor rekenen; één voor elke locatie waarin het toegepast kan worden. De voorbeelden worden stap voor stap uitgewerkt, waarbij telkens het onderstreepte gedeelte aangeeft welk gedeelte van de formule in de bijbehorende stap verwerkt wordt.
  
5 + 4 / (3 - <u>attribute.voorbeeld_kenmerk</u>) * <u>attribute.example_kenmerk</u><br>
+
{| class="wikitable"
5 + 4 / <u>(3 - 1)</u> * 7<br>
+
|-
5 + <u>4 / 2</u> * 7<br>
+
!width="100px"|Stap
5 + <u>2 * 7</u><br>
+
!width="450px"|Magicstrings
<u>5 + 14</u><br>
+
!width="450px"|Vul waarde in met formule
19
+
!width="450px"|zttscript
 
+
|-
[[ <u>voorbeeld_kenmerk</u> + 6 / 3 * <u>example_kenmerk</u> ]]<br>
+
|
[[ 4 + <u>6 / 3</u> * 2 ]]<br>
+
Stap 1<br>
[[ 4 + <u>2 * 2</u>]]<br>
+
Stap 2<br>
[[ <u>4 + 4</u> ]]<br>
+
Stap 3<br>
<nowiki>[[ 8 ]]</nowiki><br>
+
Stap 4<br>
8
+
Stap 5<br>
 +
Resultaat
 +
|
 +
[[ <u>voorbeeld_kenmerk</u> + 6 / 3 * <u>example_kenmerk</u> ]]<br>
 +
[[ 4 + <u>6 / 3</u> * 2 ]]<br>
 +
[[ 4 + <u>2 * 2</u>]]<br>
 +
[[ <u>4 + 4</u> ]]<br>
 +
<nowiki>[[ 8 ]]</nowiki><br>
 +
8
 +
|
 +
5 + 4 / (3 - <u>voorbeeld_kenmerk</u>) * <u>example_kenmerk</u><br>
 +
5 + 4 / <u>(3 - 1)</u> * 7<br>
 +
5 + <u>4 / 2</u> * 7<br>
 +
5 + <u>2 * 7</u><br>
 +
<u>5 + 14</u><br>
 +
19
 +
|
 +
show_when { <u>voorbeeld_kenmerk</u> == 6 * (5 - <u>example_kenmerk</u>) }<br>
 +
show_when { 3 == 6 * <u>(5 - 2)</u> }<br>
 +
show_when { 3 == <u>6 * 3</u> }<br>
 +
show_when { <u>3 == 18</u> }<br>
 +
<u>show_when { niet waar }</u><br>
 +
don't show
 +
|}
  
 
=== Afronding ===
 
=== Afronding ===
 
De output wordt alsvolgt afgerond:
 
De output wordt alsvolgt afgerond:
 
{| class="wikitable"
 
{| class="wikitable"
 +
|- style="vertical-align:top;"
 +
!style="width:100px;" rowspan="2"|Formule
 +
!style="width:450px;" rowspan="2"|Magicstrings
 +
!style="width:450px;" colspan="2"|Vul waarde in met formule
 +
!style="width:450px;" rowspan="2"|zttscript
 
|-
 
|-
!Formule
+
!Valutakenmerk
!Output formule
+
!Overige kenmerken
!Output in valutakenmerk
+
|- style="text-align: right;"
!Output in overige kenmerken
+
|style="text-align: center;"|6 / 3
|-
 
|6 / 3
 
 
|2
 
|2
 
|2,00
 
|2,00
 
|2.00
 
|2.00
|-
+
|2
|5 / 3  
+
|- style="text-align: right;"
 +
|style="text-align: center;"|5 / 3  
 
|1.6666666667
 
|1.6666666667
 
|1,67
 
|1,67
 
|1.67
 
|1.67
 +
|1.6666666667
 
|}
 
|}
  
Tip: Gebruik eventueel [http://wiki.zaaksysteem.nl/Kenmerkformatting_overzicht Kenmerkformatting] om de getallen af te ronden op gehele waarden.
+
Tip: Gebruik eventueel [[Kenmerkformatting_overzicht|Kenmerkformatting]] om de getallen af te ronden op gehele waarden.
  
 
= Vergelijken =
 
= Vergelijken =
Regel 109: Regel 160:
 
=== Operators ===
 
=== Operators ===
 
De operators die gebruikt kunnen worden zijn:
 
De operators die gebruikt kunnen worden zijn:
{| class="wikitable"
+
{| class="wikitable" style="text-align:center;"
 
|-
 
|-
!Naam
+
!style="width: 175px;"|Naam
!Teken
+
!style="width: 175px;"|Teken
!Voorbeeld
+
!style="width: 175px;"|Voorbeeld
!Antwoord
+
!style="width: 175px;"|Antwoord
 +
!style="width: 250px;"|Kenmerktype
 +
!style="width: 250px;"|Opmerking
 
|-
 
|-
 
|is gelijk aan
 
|is gelijk aan
Regel 120: Regel 173:
 
|2 + 2 == 4
 
|2 + 2 == 4
 
|Waar
 
|Waar
 +
|Alle
 +
|
 
|-
 
|-
 
|is niet gelijk aan
 
|is niet gelijk aan
Regel 125: Regel 180:
 
|2 + 2 != 5
 
|2 + 2 != 5
 
|Waar
 
|Waar
 +
|Alle
 +
|
 
|-
 
|-
 
|groter dan
 
|groter dan
Regel 130: Regel 187:
 
|5 > 5
 
|5 > 5
 
|Niet waar
 
|Niet waar
 +
|Alle (waarbij de waarde een cijfer is)
 +
|
 
|-
 
|-
 
|kleiner dan
 
|kleiner dan
Regel 135: Regel 194:
 
|1 < 1.1
 
|1 < 1.1
 
|Waar
 
|Waar
 +
|Alle (waarbij de waarde een cijfer is)
 +
|
 
|-
 
|-
 
|groter of gelijk aan
 
|groter of gelijk aan
Regel 140: Regel 201:
 
|5 >= 5
 
|5 >= 5
 
|Waar
 
|Waar
 +
|Alle (waarbij de waarde een cijfer is)
 +
|
 
|-
 
|-
 
|kleiner of gelijk aan
 
|kleiner of gelijk aan
Regel 145: Regel 208:
 
|1 <= 1.1
 
|1 <= 1.1
 
|Waar
 
|Waar
 +
|Alle (waarbij de waarde een cijfer is)
 +
|
 
|-
 
|-
 
|bevat tekst
 
|bevat tekst
Regel 150: Regel 215:
 
|"eks" in "tekst"
 
|"eks" in "tekst"
 
|Waar
 
|Waar
 +
|Alle
 +
|Niet hoofdlettergevoelig
 
|-
 
|-
 
|komt voor in
 
|komt voor in
Regel 156: Regel 223:
 
5 in array( 1, 2, 3, 4 )
 
5 in array( 1, 2, 3, 4 )
 
|Niet waar
 
|Niet waar
 +
|Enkelvoudige keuze<br>
 +
Keuzelijst<br>
 +
Meervoudige keuze
 +
|
 
|}
 
|}
 +
===== Keuze kenmerken =====
 +
De output van kenmerken van het type 'Enkelvoudige keuze', 'Meervoudige keuze' en 'Keuzelijst' zijn oorspronkelijk van het type [https://en.wikipedia.org/wiki/Array_data_type Array]. De 'in'-operator kan gebruikt worden om te zien of een specifieke waarde overeenkomt met één van de waarden die deze kenmerken bevatten. Omdat dit vrij omslachtig is voor de typen 'Enkelvoudige keuze' en 'Keuzelijst' die maar één waarde kunnen bevatten worden deze waarde omgezet naar het type [https://en.wikipedia.org/wiki/String_(computer_science) String]. Voor consistentie gebeurt dit ook met het kenmerktype 'Meervoudige keuze' waarbij waarden gescheiden worden door komma+spatie.
 +
 +
Samenvattend:
 +
<ul>
 +
<li>Gebruik de 'in'-operator enkel voor 'meervoudige keuze'-kenmerken</li>
 +
<li>Gebruik alle andere operators voor alle andere kenmerktypen</li>
 +
</ul>
 +
 +
Onderstaand is de exacte werking van de kenmerktypen en operators beschreven. Hier staan voor de volledigheid ook voorbeelden tussen die niet gebruikt zouden moeten worden, zodat aan de hand van dit gehele plaatje het beter te begrijpen is hoe en waarom de aanbevolen inrichtingen werken.
 +
 +
{| class="wikitable" style="text-align:center;" width="100%"
 +
|+ style="text-align:left;"|Voorbeelden tekstveld (en overige kenmerken)
 +
|-
 +
!style="width:  70px;"|
 +
!style="width: 115px;"|Kenmerktype
 +
!style="width: 180px;"|Waarde (array)
 +
!style="width: 160px;"|Waarde (string)
 +
!style="width: 300px;"|Vergelijking
 +
!style="width: 70px;" |Uitkomst
 +
!                    |Toelichting
 +
|- style="background-color: #ccffcc;"
 +
|Aanbevolen
 +
|Tekstveld
 +
|
 +
|"Appel"
 +
|{ tekstveld == "Appel" }
 +
|Waar
 +
|Controleer of de waarde gelijk is aan X
 +
|- style="background-color: #ccffcc;"
 +
|Aanbevolen
 +
|Tekstveld
 +
|
 +
|"Appel"
 +
|{ tekstveld ~= "ppe" }
 +
|Waar
 +
|Controleer of de waarde een stuk tekst bevat dat gelijk is aan X
 +
|- style="color: gray;"
 +
|
 +
|Tekstveld
 +
|
 +
|"Appel"
 +
|{ "Appel" in tekstveld }
 +
|Niet waar
 +
|De 'in'-operator kan niet gebruikt worden voor dit kenmerktype
 +
|}
 +
 +
{| class="wikitable" style="text-align:center;" width="100%"
 +
|+ style="text-align:left;"|Voorbeelden enkelvoudige keuze en keuzelijst
 +
|-
 +
!style="width:  70px;"|
 +
!style="width: 115px;"|Kenmerktype
 +
!style="width: 180px;"|Waarde (array)
 +
!style="width: 160px;"|Waarde (string)
 +
!style="width: 300px;"|Vergelijking
 +
!style="width: 70px;" |Uitkomst
 +
!                    |Toelichting
 +
|- style="background-color: #ccffcc;"
 +
|Aanbevolen
 +
|Enkelvoudige keuze
 +
|[ "Appel" ]
 +
|"Appel"
 +
|{ enkelvoudige_keuze == "Appel" }
 +
|Waar
 +
|Controleer of de waarde gelijk is aan X
 +
|- style="background-color: #ccffcc;"
 +
|Aanbevolen
 +
|Enkelvoudige keuze
 +
|[ "Appel" ]
 +
|"Appel"
 +
|{ enkelvoudige_keuze ~= "ppe" }
 +
|Waar
 +
|Controleer of de waarde een stuk tekst bevat dat gelijk is aan X
 +
|- style="color: gray;"
 +
|
 +
|Enkelvoudige keuze
 +
|[ "Appel" ]
 +
|"Appel"
 +
|{ "Appel" in enkelvoudige_keuze }
 +
|Waar
 +
|Hier kan beter de == operator voor gebruikt worden.
 +
|}
 +
 +
{| class="wikitable" style="text-align:center;" width="100%"
 +
|+ style="text-align:left;"|Voorbeelden meervoudige keuze
 +
|-
 +
!style="width:  70px;"|
 +
!style="width: 115px;"|Kenmerktype
 +
!style="width: 180px;"|Waarde (array)
 +
!style="width: 160px;"|Waarde (string)
 +
!style="width: 300px;"|Vergelijking
 +
!style="width: 70px;" |Uitkomst
 +
!                    |Toelichting
 +
|- style="color: gray;"
 +
|
 +
|Meervoudige keuze
 +
|[ "Appel", "Banaan", "Citroen" ]
 +
|"Appel, Banaan, Citroen"
 +
|{ meervoudige_keuze == "Appel" }
 +
|Niet waar
 +
|"Appel" is niet gelijk aan "Appel, Banaan, Citroen"
 +
|- style="color: gray;"
 +
|
 +
|Meervoudige keuze
 +
|[ "Appel", "Banaan", "Citroen" ]
 +
|"Appel, Banaan, Citroen"
 +
|{ meervoudige_keuze == "Appel, Banaan, Citroen" }
 +
|Waar
 +
|Een exacte invulling kan het beste ingericht worden met de AND() functie.
 +
|- style="color: gray;"
 +
|
 +
|Meervoudige keuze
 +
|[ "Appel", "Banaan", "Citroen" ]
 +
|"Appel, Banaan, Citroen"
 +
|{ meervoudige_keuze ~= "Banaan, Citroen" }
 +
|Waar
 +
|Een exacte invulling kan het beste ingericht worden met de AND() functie.
 +
|- style="color: gray;"
 +
|
 +
|Meervoudige keuze
 +
|[ "Appel", "Banaan", "Citroen" ]
 +
|"Appel, Banaan, Citroen"
 +
|{ meervoudige_keuze ~= "el, Banaan, Ci" }
 +
|Waar
 +
|Niet nuttig.
 +
|- style="background-color: #ccffcc;"
 +
|Aanbevolen
 +
|Meervoudige keuze
 +
|[ "Appel", "Banaan", "Citroen" ]
 +
|"Appel, Banaan, Citroen"
 +
|{ "Appel" in meervoudige_keuze }
 +
|Waar
 +
|"Appel" is gelijk aan één van de waarden.
 +
|- style="color: gray;"
 +
|
 +
|Meervoudige keuze
 +
|[ "Appel", "Banaan", "Citroen" ]
 +
|"Appel, Banaan, Citroen"
 +
|{ "Appel, Banaan, Citroen" in meervoudige_keuze }
 +
|Niet waar
 +
|"Appel, Banaan, Citroen" is niet gelijk aan één van de waarden.
 +
|}
 +
 +
=== Functies ===
 +
Verschillende functies kunnen toegevoegd worden aan vergelijkingen.
 +
===== AND =====
 +
De AND functie is 'waar' als alle voorwaarden 'waar' zijn. De voorwaarden moeten worden gescheiden door een komma.
 +
<pre>
 +
show_when { and( waar, waar, waar ) }
 +
show
 +
 +
show_when { and( waar, niet waar, waar ) }
 +
don't show
 +
 +
show_when { and( niet waar, niet waar, niet waar ) }
 +
don't show
 +
</pre>
 +
===== OR =====
 +
De OR functie is 'waar' als minimaal één van de voorwaarden 'waar' is. De voorwaarden moeten worden gescheiden door een komma.
 +
<pre>
 +
show_when { or( waar, waar, waar ) }
 +
show
 +
 +
show_when { or( waar, niet waar, waar ) }
 +
show
 +
 +
show_when { or( niet waar, niet waar, niet waar ) }
 +
don't show
 +
</pre>
 +
 +
===== NOT =====
 +
De NOT functie is 'waar' als de voorwaarde 'niet waar' is, en omgekeerd, is 'niet waar' als de voorwaarde 'waar' is.
 +
<pre>
 +
show_when { not( niet waar ) }
 +
show
 +
 +
show_when { not( waar ) }
 +
don't show
 +
</pre>
 +
 +
===== Functie voorbeelden =====
 +
AND
 +
<pre>
 +
show_when { and( voorbeeld_kenmerk == "Citroen", example_kenmerk * 4 == 8, beispiel_kenmerk == "Akkoord" ) }
 +
show_when { and( "Citroen" == "Citroen", 2 * 4 == 8, "Akkoord" == "Akkoord" ) }
 +
show_when { and( waar, waar, waar ) }
 +
show_when { waar }
 +
show
 +
</pre>
 +
OR
 +
<pre>
 +
show_when { or( voorbeeld_kenmerk == "Appel", voorbeeld_kenmerk == "Peer", voorbeeld_kenmerk == "Citroen" ) }
 +
show_when { or( "Citroen" == "Appel", "Citroen" == "Peer", "Citroen" == "Citroen" ) }
 +
show_when { or( niet waar, niet waar, waar ) }
 +
show_when { waar }
 +
show
 +
</pre>
 +
NOT
 +
<pre>
 +
show_when { not( voorbeeld_kenmerk == "Appel" ) }
 +
show_when { not( "Citroen" == "Appel" ) }
 +
show_when { not( niet waar ) }
 +
show_when { waar }
 +
show
 +
</pre>
 +
AND, OR, NOT
 +
<pre>
 +
show_when { or( niet waar, and( waar, not (niet waar), waar ), not( or ( and ( waar, waar ), niet waar ) ) ) }
 +
show_when { or( niet waar, and( waar, waar          , waar ), not( or ( waar              , niet waar ) ) ) }
 +
show_when { or( niet waar, waar                              , not( waar                                ) ) }
 +
show_when { or( niet waar, waar                              , niet waar                                  ) }
 +
show_when { waar                                                                                            }
 +
show
 +
</pre>
  
 
= Voorbeelden =
 
= Voorbeelden =
 +
Enkele voorbeelden ter inspiratie en om de werking toe te lichten.
 +
 +
=== Magicstring: Rekenen ===
 +
{| width="100%"
 +
|- style="vertical-align:top;"
 +
|
 +
Een zaaktype parkeervergunning, waarin vastgelegd wordt wat de prijs van het type vergunning is en het aantal bezoekersvergunningen dat additioneel aangeschaft wordt. In het sjabloon moet de prijs per onderdeel (parkeervergunning en bezoekersvergunning) uitgesplitst weergegeven worden, plus de totaalprijs.
 +
 +
Voor deze implementatie kan het rekenen in magicstrings gebruikt worden, door de prijzentabel alsvolgt op te stellen:
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
!style="width: 400px;"|Situatie
+
!width="200px"|Kenmerken in zaaktype
!Implementatie
+
!width="400px"|Inrichting in sjabloon
|- style="vertical-alignment:top;"
+
!width="400px"|Uitkomst sjabloon
|Een totaalprijs bestaat uit meerdere onderdelen. De prijzen voor deze onderdelen worden in de zaak vastgelegd, maar niet de totaalprijs. Op het sjabloon moet echter wel de totaalprijs genoemd worden.
+
|- style="vertical-align:top;"
|[[bestand:rekenen_voorbeeld_magicstring.png]]
+
|
 +
<ul>
 +
<li>Prijs parkeervergunning</li>
 +
<li>Aantal bezoekersvergunningen</li>
 +
</ul>
 +
|
 +
 
 +
{| width="100%" style="background-color:white;"
 
|-
 
|-
|Een totaalprijs bestaat uit meerdere onderdelen. De prijzen voor deze onderdelen worden in de zaak vastgelegd, alsmede de totaalprijs. Het is echter onwenselijk dat een medewerker deze totaalprijs handmatig berekent, daarom wordt dit met een regelformule gedaan.
+
!style="text-align:left;"|Onderdeel
|[[bestand:rekenen_voorbeeld_regels.png]]
+
!style="text-align:right;"|Bedrag
 
|-
 
|-
|Wanneer de totaalprijs van de verschillende onderdelen boven een bepaalde waarde uitkomt moet een extra paragraaf getoond worden.
+
|Parkeervergunning
|[[bestand:rekenen_voorbeeld_zttscript_1.png]]
+
|style="text-align:right;"|<nowiki>[[ prijs_parkeervergunning | currency]]</nowiki>
 
|-
 
|-
|Wanneer ...situatie... moet een paragraaf verborgen worden.
+
|Bezoekersvergunning
|[[bestand:rekenen_voorbeeld_zttscript_2.png]]
+
|style="text-align:right;"|<nowiki>[[ aantal_bezoekersvergunningen * 8 | currency]]</nowiki>
 
|-
 
|-
 +
|style="vertical-align:top;"|Totaalprijs
 +
|style="text-align:right;"|<nowiki>[[ prijs_parkeervergunning + aantal_bezoekersvergunningen * 8 | currency]]</nowiki>
 +
|}
 +
 
|
 
|
 +
 +
{| width="100%" style="background-color:white; vertical-align:top;"
 +
|-
 +
!style="text-align:left;"|Onderdeel
 +
!style="text-align:right;"|Bedrag
 +
|-
 +
|Parkeervergunning
 +
|style="text-align:right;"|60,00
 +
|-
 +
|Bezoekersvergunning
 +
|style="text-align:right;"|40,00
 +
|-
 +
|Totaalprijs
 +
|style="text-align:right;"|100,00
 +
|}
 +
 +
|}
 +
 +
|[[bestand:rekenen_voorbeeld_magicstring.png|thumb|Voorbeeld rekenen in magicstring]]
 +
|}
 +
 +
=== Vul waarde in met formule: Rekenen ===
 +
{| width="100%"
 +
|- style="vertical-align:top;"
 
|
 
|
{| class="wikitable"
+
Bovenstaande is niet geheel realistisch, want het is uiteraard veel wenselijker om de prijzen van de onderdelen in de zaak zelf vast te leggen, alsmede de totaalprijs.
 +
 
 +
Voor deze implementatie zijn kenmerken nodig om de prijs in op te slaan, en regels van het type 'Vul waarde in met formule' die de waarde er in plaatsen.
 +
{| class="wikitable" vertical-align="top"
 
|-
 
|-
!Kenmerk
+
!width="200px"|Kenmerken
!Waarde
+
!width="400px"|Regels
!Regel
+
!width="100px"|Waarden
|- style="vertical-alignment:top;"
+
|-  style="vertical-align:top;"
 +
|Parkeergebied
 +
|Als 'Centrum', dan Vul waarde "60,00" in 'Prijs parkeervergunning' (geen formule nodig)
 +
 
 +
Als 'Schil', dan Vul waarde in "12,00" in 'Prijs parkeervergunning' (geen formule nodig)
 +
 
 +
Als <gevuld>, dan Vul waarde in met formule (kenmerk:Totaalprijs, waarde: "prijs_parkeervergunning + prijs_bezoekersvergunningen")
 +
|Centrum
 +
|- style="vertical-align:top;"
 
|Prijs parkeervergunning
 
|Prijs parkeervergunning
|24,00
+
|
|Vul waarde in: 24,00
+
|60,00
|- style="vertical-alignment:top;"
+
|- style="vertical-align:top;"
 +
|Bezoekersvergunningen
 +
|Als 'Bezoekersvergunningen' = 'Ja', dan Vul waarde in met formule (kenmerk:Prijs bezoekersvergunningen, waarde: "aantal_bezoekersvergunningen * 8")
 +
|Ja
 +
|- style="vertical-align:top;"
 
|Aantal bezoekersvergunningen
 
|Aantal bezoekersvergunningen
 +
|
 
|5
 
|5
 +
|- style="vertical-align:top;"
 +
|Prijs bezoekersvergunningen
 +
|
 +
|40.00
 +
|- style="vertical-align:top;"
 +
|Totaalprijs
 
|
 
|
|- style="vertical-alignment:top;"
+
|100.00
|Prijs bezoekersvergunningen
+
|}
|40,00
+
|[[bestand:rekenen_voorbeeld_regels_1a.png|thumb|Voorbeeld rekenen met regels 1/3]]
|Vul waarde in: attribute.aantal_bezoekersvergunningen * 8,00
+
[[bestand:rekenen_voorbeeld_regels_1b.png|thumb|Voorbeeld rekenen met regels 2/3]]
 +
[[bestand:rekenen_voorbeeld_regels_1c.png|thumb|Voorbeeld rekenen met regels 3/3]]
 +
|}
 +
 
 +
=== zttscript: Rekenen ===
 +
{| width="100%"
 +
|- style="vertical-align:top;"
 +
|Een zaaktype 'Omgevingsvergunning' waarbij er geen administratiekosten gerekend worden wanneer de totale legeskosten boven de € 50,00 uitkomen.
 +
<pre>
 +
show_when { prijs_bouwvergunning + prijs kapvergunning + prijs_printen > 50 }
 +
 
 +
"Toon wanneer alle prijs_kenmerken samen een waarde van groter dan vijftig hebben."
 +
</pre>
 +
Let op: De auteur is zich bewust van het feit dat dit geen praktijkvoorbeeld is.
 +
|[[bestand:rekenen_voorbeeld_zttscript_2.png|thumb|Voorbeeld rekeken in zttscript]]
 +
|}
 +
 
 +
=== zttscript: Vergelijken ===
 +
{| width="100%"
 +
|- style="vertical-align:top;"
 +
|
 +
Een zaaktype parkeervergunning voor de volgende parkeergebieden: 'Centrum', 'Schil noord', 'Schil west', 'Schil zuid', 'Schil oost'. Voor de schilgebieden moet op het sjabloon een paragraaf voor waarden opgenomen worden.
 +
 
 +
Voor deze implementatie kan het beste een "niet gelijk aan"-vergelijking gebruikt worden:
 +
<pre>
 +
show_when { parkeergebied != "Centrum" }
 +
 
 +
"Toon wanneer het kenmerk 'Parkeergebied' niet gelijk aan 'Centrum' is."
 +
</pre>
 +
Let op: Voor dit voorbeeld geldt dat het veld ook getoond wordt wanneer het kenmerk 'Parkeergebied' geen waarde heeft (leeg is).
 +
|[[bestand:rekenen_voorbeeld_zttscript_1.png|thumb|Voorbeeld vergelijken met zttscript]]
 +
|}
 +
 
 +
=== zttscript: Vergelijken met de in-operator (1) ===
 +
{| width="100%"
 +
|- style="vertical-align:top;"
 +
|
 +
|Een zaaktype 'Melding openbare ruimte' waarbij er meerdere 'meervoudige keuze'-kenmerken zijn waarin een bepaalde waarde aangevinkt kan worden.
 +
 
 +
{| class="wikitable"
 +
|-
 +
!width="150px"|Kenmerk
 +
!width="300px"|Opties
 +
|-
 +
|mor categorie
 +
|Groen, Verlichting, Overlast
 +
|-
 +
|mor acties groen
 +
|Opgeruimd, Teruggekoppeld, Schade verhaald
 +
|-
 +
|mor acties verlichting
 +
|Gerepareerd, Teruggekoppeld, Schade verhaald
 +
|-
 +
|mor acties overlast
 +
|Verholpen, Teruggekoppeld, Schade verhaald
 +
|}
 +
 
 +
In geval dat in één van deze kenmerken de waarde aangevinkt wordt, moet er een sectie getoond worden.
 +
<pre>
 +
show_when { "Schade verhaald" in [ mor_acties_groen, mor_acties_verlichting, mor_acties_overlast ] }
 +
 
 +
"Toon wanneer de waarde 'Schade verhaald' aanwezig is in mor_categorie_groen of mor_acties_verlichting of mor_acties_overlast."
 +
</pre>
 +
 
 +
|[[bestand:rekenen_voorbeeld_zttscript_2.png|thumb|Voorbeeld rekeken in zttscript]]
 +
|}
 +
 
 +
=== zttscript: Vergelijken met de in-operator (2) ===
 +
{| width="100%"
 +
|- style="vertical-align:top;"
 +
|
 +
|Een zaaktype 'Melding openbare ruimte' waarbij er een 'enkelvoudige keuze'-kenmerk is.
 +
 
 +
{| class="wikitable"
 +
|-
 +
!width="150px"|Kenmerk
 +
!width="400px"|Opties
 
|-
 
|-
|Totaalprijs
+
|mor categorie
|64,00
+
|Groen, Verlichting, Stoeptegel, Overlast, Ongedierte, Straatmeubilair
|Vul waarde in: attribute.prijs_parkeervergunning + attribute.aantal_bezoekersvergunningen
 
 
|}
 
|}
 +
 +
In geval van de waarden 'Groen, Verlichting, Stoeptegel, Straatmeubilair' moet er een sectie getoond worden.
 +
<pre>
 +
show_when { "mor_categorie" in [ "Groen", "Verlichting", "Stoeptegel", "Straatmeubilair ] }
 +
 +
"Toon wanneer de waarde van mor_categorie aanwezig is in de waarden van de array."
 +
</pre>
 +
|
 
|}
 
|}
 +
 +
=== zttscript: Vergelijken met meerdere voorwaarden (EN) ===
 +
Een zaaktype 'Melding openbare ruimte' waarbij tekst enkel getoond moet worden wanneer de categorie 'Verlichting' is en de urgentie 'Spoed'.
 +
<pre>
 +
show_when { [ mor_categorie, urgentie ] == "Verlichting, Spoed" }
 +
 +
"Toon wanneer 'mor categorie, urgentie' gelijk is aan "Verlichting, Spoed"}
 +
</pre>
 +
 +
Deze inrichting maakt gebruik van het feit dat 'arrays' platgeslagen worden tot 'strings'. Door de verschillende kenmerken handmatig in één array te plaatsen worden de waarden komma+spatie gescheiden in één string geplaatst voor de vergelijking.
 +
 +
<pre>
 +
show_when { [  mor_categorie  ,  urgentie  ] == "Verlichting, Spoed" }
 +
show_when { [ [ "Verlichting" ], [ "Spoed" ] ] == "Verlichting, Spoed" }
 +
show_when { [  "Verlichting"  ,  "Spoed"  ] == "Verlichting, Spoed" }
 +
show_when {        "Verlichting, Spoed"        == "Verlichting, Spoed" }
 +
show
 +
</pre>

Huidige versie van 9 aug 2017 om 12:38

Algemeen

Rekenen en vergelijkingen met waarden van Kenmerken kunnen op meerdere plekken in het systeem gebruikt worden, namelijk:

Zie voor een snel overzicht van de basisfunctionaliteiten de samenvatting: Rekenen en Vergelijkingen Samenvatting.

Complexiteit

Deze functionaliteit maakt het mogelijk om logica te gebruiken in magicstrings, sjablonen en de regel 'vul waarde in'. De bouwblokken an sich zijn op het basisniveau van de logica, en zijn daarmee makkelijk te gebruiken en begrijpen. Tegelijkertijd betekent dit dat met deze bouwblokken complexere logica gebouwd kan worden, en dit kan tot in het theoretisch oneindige doorgevoerd worden. Hierbij moeten beheerders waken voor toenemende kosten voor beheer van deze logica en dit niet uit het oog verliezen bij het implementeren of uitbreiden van complexere logica.

Schrijfwijze

Eenvoudige inrichtingen zijn makkelijk om te lezen, maar met complexere inrichtingen wordt het al gauw moeilijk om te overzien wat er nu precies ingericht is. Goed leesbare scripts zijn belangrijk voor de toekomstige zelf en collega's. De leesbaarheid van scripts zijn niet enkel belangrijk voor de tijdbesparing die behaald wordt in het begrijpen of opsporen van fouten. Goed leesbare scripts zijn ook heel begrijpelijk en dat stelt de beheerder in staat om op een hoger abstractieniveau naar het script te kijken, verbeteringen aan te brengen en/of complexere situaties te maken (mits nodig).

Een script kan leesbaarder gemaakt worden met onder andere correct spatiegebruik. Spaties zijn enkel van belang voor de mens; voor het systeem zijn de volgende twee scripts identiek, maar de tweede leest een stuk fijner.

show_when{or(and(voorbeeld_kenmerk*8==40,example_kenmerk=="Appel"),bbv_akkoord=="Niet akkoord")}
show_when { or( bbv_akkoord == "Niet akkoord", and( voorbeeld_kenmerk * 8 == 40 , example_kenmerk == "Appel" ) ) }

In het tweede script is ook de and() naar het einde verplaatst. Op deze manier is het minder verwarrend welke voorwaarden nu wel binnen de AND vallen, en welke enkel binnen de OR vallen.

Als meerdere medewerkers scripts maken, dan is het verstandig om een 'huisstijl' te ontwikkelen, zodat elkanders scripts leesbaarder zijn. Het is ook aan te raden om elkaars scripts goed te keuren alvorens deze in productie te nemen, zodat de collega die er met een frisse blik naar kijkt eventuele fouten kan zien of verbeteringen kan voorstellen.

Constanten

De volgende constanten kunnen gebruikt worden bij het rekenen of vergelijken:

Simpele notatie Complexe notatie Waarde
:pi constant("pi") 3.141592653...

Rekenen

Met formules kan de output aangepast worden door te rekenen met de kenmerkwaarde(n):

  • Met elk type kenmerk kan gerekend worden, zolang de waarde een correct getal is
  • Waardes die geen getal zijn worden als 0 geïnterpreteerd
  • Delen door 0 geeft geen output

Rekentekens

De rekentekens die gebruikt kunnen worden zijn:

Naam Teken Voorbeeld Output Volgorde
haakjes () 6 * ( 2 + 2 ) 24 Als eerste
keer/maal * 6 * 2 12 Na haakjes
Van links naar rechts
gedeeld door / 6 / 2 3
plus + 6 + 2 8 Na keer/gedeeld door
Van links naar rechts
min - 6 - 2 4

Voorbeelden

Onderstaand drie voorbeelden voor rekenen; één voor elke locatie waarin het toegepast kan worden. De voorbeelden worden stap voor stap uitgewerkt, waarbij telkens het onderstreepte gedeelte aangeeft welk gedeelte van de formule in de bijbehorende stap verwerkt wordt.

Stap Magicstrings Vul waarde in met formule zttscript

Stap 1
Stap 2
Stap 3
Stap 4
Stap 5
Resultaat

[[ voorbeeld_kenmerk + 6 / 3 * example_kenmerk ]]
[[ 4 + 6 / 3 * 2 ]]
[[ 4 + 2 * 2]]
[[ 4 + 4 ]]
[[ 8 ]]
8

5 + 4 / (3 - voorbeeld_kenmerk) * example_kenmerk
5 + 4 / (3 - 1) * 7
5 + 4 / 2 * 7
5 + 2 * 7
5 + 14
19

show_when { voorbeeld_kenmerk == 6 * (5 - example_kenmerk) }
show_when { 3 == 6 * (5 - 2) }
show_when { 3 == 6 * 3 }
show_when { 3 == 18 }
show_when { niet waar }
don't show

Afronding

De output wordt alsvolgt afgerond:

Formule Magicstrings Vul waarde in met formule zttscript
Valutakenmerk Overige kenmerken
6 / 3 2 2,00 2.00 2
5 / 3 1.6666666667 1,67 1.67 1.6666666667

Tip: Gebruik eventueel Kenmerkformatting om de getallen af te ronden op gehele waarden.

Vergelijken

Met vergelijkingen kan gecontroleerd wordt of een waarde aan een bepaalde conditie voldoet. De output is dan "1" als de conditie waar is en "" als de conditie niet waar is. In deze vergelijkingen kunnen ook berekeningen opgenomen worden.

Operators

De operators die gebruikt kunnen worden zijn:

Naam Teken Voorbeeld Antwoord Kenmerktype Opmerking
is gelijk aan == 2 + 2 == 4 Waar Alle
is niet gelijk aan != 2 + 2 != 5 Waar Alle
groter dan > 5 > 5 Niet waar Alle (waarbij de waarde een cijfer is)
kleiner dan < 1 < 1.1 Waar Alle (waarbij de waarde een cijfer is)
groter of gelijk aan >= 5 >= 5 Waar Alle (waarbij de waarde een cijfer is)
kleiner of gelijk aan <= 1 <= 1.1 Waar Alle (waarbij de waarde een cijfer is)
bevat tekst ~= "eks" in "tekst" Waar Alle Niet hoofdlettergevoelig
komt voor in in 5 in [ 1, 2, 3, 4 ]

5 in array( 1, 2, 3, 4 )

Niet waar Enkelvoudige keuze

Keuzelijst
Meervoudige keuze

Keuze kenmerken

De output van kenmerken van het type 'Enkelvoudige keuze', 'Meervoudige keuze' en 'Keuzelijst' zijn oorspronkelijk van het type Array. De 'in'-operator kan gebruikt worden om te zien of een specifieke waarde overeenkomt met één van de waarden die deze kenmerken bevatten. Omdat dit vrij omslachtig is voor de typen 'Enkelvoudige keuze' en 'Keuzelijst' die maar één waarde kunnen bevatten worden deze waarde omgezet naar het type String. Voor consistentie gebeurt dit ook met het kenmerktype 'Meervoudige keuze' waarbij waarden gescheiden worden door komma+spatie.

Samenvattend:

  • Gebruik de 'in'-operator enkel voor 'meervoudige keuze'-kenmerken
  • Gebruik alle andere operators voor alle andere kenmerktypen

Onderstaand is de exacte werking van de kenmerktypen en operators beschreven. Hier staan voor de volledigheid ook voorbeelden tussen die niet gebruikt zouden moeten worden, zodat aan de hand van dit gehele plaatje het beter te begrijpen is hoe en waarom de aanbevolen inrichtingen werken.

Voorbeelden tekstveld (en overige kenmerken)
Kenmerktype Waarde (array) Waarde (string) Vergelijking Uitkomst Toelichting
Aanbevolen Tekstveld "Appel" { tekstveld == "Appel" } Waar Controleer of de waarde gelijk is aan X
Aanbevolen Tekstveld "Appel" { tekstveld ~= "ppe" } Waar Controleer of de waarde een stuk tekst bevat dat gelijk is aan X
Tekstveld "Appel" { "Appel" in tekstveld } Niet waar De 'in'-operator kan niet gebruikt worden voor dit kenmerktype
Voorbeelden enkelvoudige keuze en keuzelijst
Kenmerktype Waarde (array) Waarde (string) Vergelijking Uitkomst Toelichting
Aanbevolen Enkelvoudige keuze [ "Appel" ] "Appel" { enkelvoudige_keuze == "Appel" } Waar Controleer of de waarde gelijk is aan X
Aanbevolen Enkelvoudige keuze [ "Appel" ] "Appel" { enkelvoudige_keuze ~= "ppe" } Waar Controleer of de waarde een stuk tekst bevat dat gelijk is aan X
Enkelvoudige keuze [ "Appel" ] "Appel" { "Appel" in enkelvoudige_keuze } Waar Hier kan beter de == operator voor gebruikt worden.
Voorbeelden meervoudige keuze
Kenmerktype Waarde (array) Waarde (string) Vergelijking Uitkomst Toelichting
Meervoudige keuze [ "Appel", "Banaan", "Citroen" ] "Appel, Banaan, Citroen" { meervoudige_keuze == "Appel" } Niet waar "Appel" is niet gelijk aan "Appel, Banaan, Citroen"
Meervoudige keuze [ "Appel", "Banaan", "Citroen" ] "Appel, Banaan, Citroen" { meervoudige_keuze == "Appel, Banaan, Citroen" } Waar Een exacte invulling kan het beste ingericht worden met de AND() functie.
Meervoudige keuze [ "Appel", "Banaan", "Citroen" ] "Appel, Banaan, Citroen" { meervoudige_keuze ~= "Banaan, Citroen" } Waar Een exacte invulling kan het beste ingericht worden met de AND() functie.
Meervoudige keuze [ "Appel", "Banaan", "Citroen" ] "Appel, Banaan, Citroen" { meervoudige_keuze ~= "el, Banaan, Ci" } Waar Niet nuttig.
Aanbevolen Meervoudige keuze [ "Appel", "Banaan", "Citroen" ] "Appel, Banaan, Citroen" { "Appel" in meervoudige_keuze } Waar "Appel" is gelijk aan één van de waarden.
Meervoudige keuze [ "Appel", "Banaan", "Citroen" ] "Appel, Banaan, Citroen" { "Appel, Banaan, Citroen" in meervoudige_keuze } Niet waar "Appel, Banaan, Citroen" is niet gelijk aan één van de waarden.

Functies

Verschillende functies kunnen toegevoegd worden aan vergelijkingen.

AND

De AND functie is 'waar' als alle voorwaarden 'waar' zijn. De voorwaarden moeten worden gescheiden door een komma.

show_when { and( waar, waar, waar ) }
show

show_when { and( waar, niet waar, waar ) }
don't show

show_when { and( niet waar, niet waar, niet waar ) }
don't show
OR

De OR functie is 'waar' als minimaal één van de voorwaarden 'waar' is. De voorwaarden moeten worden gescheiden door een komma.

show_when { or( waar, waar, waar ) }
show

show_when { or( waar, niet waar, waar ) }
show

show_when { or( niet waar, niet waar, niet waar ) }
don't show
NOT

De NOT functie is 'waar' als de voorwaarde 'niet waar' is, en omgekeerd, is 'niet waar' als de voorwaarde 'waar' is.

show_when { not( niet waar ) }
show

show_when { not( waar ) }
don't show
Functie voorbeelden

AND

show_when { and( voorbeeld_kenmerk == "Citroen", example_kenmerk * 4 == 8, beispiel_kenmerk == "Akkoord" ) }
show_when { and( "Citroen" == "Citroen", 2 * 4 == 8, "Akkoord" == "Akkoord" ) }
show_when { and( waar, waar, waar ) }
show_when { waar }
show

OR

show_when { or( voorbeeld_kenmerk == "Appel", voorbeeld_kenmerk == "Peer", voorbeeld_kenmerk == "Citroen" ) }
show_when { or( "Citroen" == "Appel", "Citroen" == "Peer", "Citroen" == "Citroen" ) }
show_when { or( niet waar, niet waar, waar ) }
show_when { waar }
show

NOT

show_when { not( voorbeeld_kenmerk == "Appel" ) }
show_when { not( "Citroen" == "Appel" ) }
show_when { not( niet waar ) }
show_when { waar }
show

AND, OR, NOT

show_when { or( niet waar, and( waar, not (niet waar), waar ), not( or ( and ( waar, waar ), niet waar ) ) ) }
show_when { or( niet waar, and( waar, waar           , waar ), not( or ( waar              , niet waar ) ) ) }
show_when { or( niet waar, waar                              , not( waar                                 ) ) }
show_when { or( niet waar, waar                              , niet waar                                   ) }
show_when { waar                                                                                             }
show

Voorbeelden

Enkele voorbeelden ter inspiratie en om de werking toe te lichten.

Magicstring: Rekenen

Een zaaktype parkeervergunning, waarin vastgelegd wordt wat de prijs van het type vergunning is en het aantal bezoekersvergunningen dat additioneel aangeschaft wordt. In het sjabloon moet de prijs per onderdeel (parkeervergunning en bezoekersvergunning) uitgesplitst weergegeven worden, plus de totaalprijs.

Voor deze implementatie kan het rekenen in magicstrings gebruikt worden, door de prijzentabel alsvolgt op te stellen:

Kenmerken in zaaktype Inrichting in sjabloon Uitkomst sjabloon
  • Prijs parkeervergunning
  • Aantal bezoekersvergunningen
Onderdeel Bedrag
Parkeervergunning [[ prijs_parkeervergunning | currency]]
Bezoekersvergunning [[ aantal_bezoekersvergunningen * 8 | currency]]
Totaalprijs [[ prijs_parkeervergunning + aantal_bezoekersvergunningen * 8 | currency]]
Onderdeel Bedrag
Parkeervergunning 60,00
Bezoekersvergunning 40,00
Totaalprijs 100,00
Voorbeeld rekenen in magicstring

Vul waarde in met formule: Rekenen

Bovenstaande is niet geheel realistisch, want het is uiteraard veel wenselijker om de prijzen van de onderdelen in de zaak zelf vast te leggen, alsmede de totaalprijs.

Voor deze implementatie zijn kenmerken nodig om de prijs in op te slaan, en regels van het type 'Vul waarde in met formule' die de waarde er in plaatsen.

Kenmerken Regels Waarden
Parkeergebied Als 'Centrum', dan Vul waarde "60,00" in 'Prijs parkeervergunning' (geen formule nodig)

Als 'Schil', dan Vul waarde in "12,00" in 'Prijs parkeervergunning' (geen formule nodig)

Als <gevuld>, dan Vul waarde in met formule (kenmerk:Totaalprijs, waarde: "prijs_parkeervergunning + prijs_bezoekersvergunningen")

Centrum
Prijs parkeervergunning 60,00
Bezoekersvergunningen Als 'Bezoekersvergunningen' = 'Ja', dan Vul waarde in met formule (kenmerk:Prijs bezoekersvergunningen, waarde: "aantal_bezoekersvergunningen * 8") Ja
Aantal bezoekersvergunningen 5
Prijs bezoekersvergunningen 40.00
Totaalprijs 100.00
Voorbeeld rekenen met regels 1/3
Voorbeeld rekenen met regels 2/3
Voorbeeld rekenen met regels 3/3

zttscript: Rekenen

Een zaaktype 'Omgevingsvergunning' waarbij er geen administratiekosten gerekend worden wanneer de totale legeskosten boven de € 50,00 uitkomen.
show_when { prijs_bouwvergunning + prijs kapvergunning + prijs_printen > 50 }

"Toon wanneer alle prijs_kenmerken samen een waarde van groter dan vijftig hebben."

Let op: De auteur is zich bewust van het feit dat dit geen praktijkvoorbeeld is.

Voorbeeld rekeken in zttscript

zttscript: Vergelijken

Een zaaktype parkeervergunning voor de volgende parkeergebieden: 'Centrum', 'Schil noord', 'Schil west', 'Schil zuid', 'Schil oost'. Voor de schilgebieden moet op het sjabloon een paragraaf voor waarden opgenomen worden.

Voor deze implementatie kan het beste een "niet gelijk aan"-vergelijking gebruikt worden:

show_when { parkeergebied != "Centrum" }

"Toon wanneer het kenmerk 'Parkeergebied' niet gelijk aan 'Centrum' is."

Let op: Voor dit voorbeeld geldt dat het veld ook getoond wordt wanneer het kenmerk 'Parkeergebied' geen waarde heeft (leeg is).

Voorbeeld vergelijken met zttscript

zttscript: Vergelijken met de in-operator (1)

Een zaaktype 'Melding openbare ruimte' waarbij er meerdere 'meervoudige keuze'-kenmerken zijn waarin een bepaalde waarde aangevinkt kan worden.
Kenmerk Opties
mor categorie Groen, Verlichting, Overlast
mor acties groen Opgeruimd, Teruggekoppeld, Schade verhaald
mor acties verlichting Gerepareerd, Teruggekoppeld, Schade verhaald
mor acties overlast Verholpen, Teruggekoppeld, Schade verhaald

In geval dat in één van deze kenmerken de waarde aangevinkt wordt, moet er een sectie getoond worden.

show_when { "Schade verhaald" in [ mor_acties_groen, mor_acties_verlichting, mor_acties_overlast ] }

"Toon wanneer de waarde 'Schade verhaald' aanwezig is in mor_categorie_groen of mor_acties_verlichting of mor_acties_overlast."
Voorbeeld rekeken in zttscript

zttscript: Vergelijken met de in-operator (2)

Een zaaktype 'Melding openbare ruimte' waarbij er een 'enkelvoudige keuze'-kenmerk is.
Kenmerk Opties
mor categorie Groen, Verlichting, Stoeptegel, Overlast, Ongedierte, Straatmeubilair

In geval van de waarden 'Groen, Verlichting, Stoeptegel, Straatmeubilair' moet er een sectie getoond worden.

show_when { "mor_categorie" in [ "Groen", "Verlichting", "Stoeptegel", "Straatmeubilair ] }

"Toon wanneer de waarde van mor_categorie aanwezig is in de waarden van de array."

zttscript: Vergelijken met meerdere voorwaarden (EN)

Een zaaktype 'Melding openbare ruimte' waarbij tekst enkel getoond moet worden wanneer de categorie 'Verlichting' is en de urgentie 'Spoed'.

show_when { [ mor_categorie, urgentie ] == "Verlichting, Spoed" }

"Toon wanneer 'mor categorie, urgentie' gelijk is aan "Verlichting, Spoed"}

Deze inrichting maakt gebruik van het feit dat 'arrays' platgeslagen worden tot 'strings'. Door de verschillende kenmerken handmatig in één array te plaatsen worden de waarden komma+spatie gescheiden in één string geplaatst voor de vergelijking.

show_when { [   mor_categorie  ,   urgentie  ] == "Verlichting, Spoed" }
show_when { [ [ "Verlichting" ], [ "Spoed" ] ] == "Verlichting, Spoed" }
show_when { [   "Verlichting"  ,   "Spoed"   ] == "Verlichting, Spoed" }
show_when {        "Verlichting, Spoed"        == "Verlichting, Spoed" }
show