Actions

ExpressionScript Engine - Quick start guide/nl: Difference between revisions

From LimeSurvey Manual

(Created page with "In het onderstaande plaatje zie je de verdere uitwerking om met geneste if()-condities de persoon in te delen in categorieën als ondergewicht of obesitas. Je ziet de vergel...")
No edit summary
 
(28 intermediate revisions by 2 users not shown)
Line 6: Line 6:




Within [https://www.limesurvey.org LimeSurvey], you can further customize your surveys via the usage of the ExpressionScript (short: ES).
In [https://www.limesurvey.org LimeSurvey] kun je je enquêtes aanpassen met behulp van ExpressionScript (afgekort: ES).
Sidenote: "ExpressionScript was named Expression Manager (EM) in earlier version. If you read Expression Manager somewhere, it is just the old name of ES."
NB: "ExpressionScript is de nieuwe naam voor ExpressieBeheer (EM) in versie voor versie 4. Als je nog ergens ExpressieBeheer leest vanaf  versie 4 dan is het dus ExpressionScript."


ES can be used to specify the following:
Met ES kun je het volgende aangeven:


# '''Navigatie/Vertakking''' : door de antwoorden van de deelnemer kan de volgorde van de vragen worden gewijzigd.
# '''Navigatie/Vertakking''' : door de antwoorden van de deelnemer kan de volgorde van de vragen worden gewijzigd.
Line 33: Line 33:




Om het begrip relevantie beter te begrijpen, gebruiken we een voorbeeld met een enquête waarin de BMI (Body Mass Index) wordt bepaald van de deelnemer.  [[Media:ES_survey_-_Cohabs.zip|Voorbeeld downloaden]].
Om het begrip relevantie beter te begrijpen, gebruiken we een voorbeeld met een enquête waarin de BMI (Body Mass Index) wordt bepaald van de deelnemer.  [[Media:LS3_em_tailoring.zip|Voorbeeld downloaden]].


The relevance equation is shown below in the '''Relevance''' column after the variable name. The relevance values of weight, weight_units, height, and height_units are all 1 (default value), meaning that those questions are always displayed. However, the relevance for BMI is {!is_empty(height) and !is_empty(weight)}, which means that BMI will only be computed if the subject enters a value for both height and weight (thereby avoiding the risk of getting a zero error). Also, question "Report" is only shown if the respondent answers all four main questions (height, heightunits, weight, weightunits).
De relevantievergelijking wordt getoond in de kolom '''Relevantie''' na de naam van de variabele. De zijn bij weight, weight_units, height en height_units allemaal 1 (standaardwaarde), wat betekent dat die vragen altijd worden getoond. Voor BMI is de relevantie echter {!is_empty(height) and !is_empty(weight)}, wat betekent dat het alleen bepaald wordt als beide velden height en weight zijn ingevuld. Dat voorkomt ook het delen door 0. Ook de vraag "Report" wordt alleen getoond als alle 4 vragen ingevuld worden door de gebruiker (height, heightunits, weight, weightunits).




Line 41: Line 41:




<div class="simplebox"> [[File:help.png]] '''NB:''' Het bovenstaand plaatje staat in het [[Show logic file/nl|enquête logica-bestand]], de  functie om de enquête op syntaxfouten te controleren voor het activeren.</div>
<div class="simplebox"> [[File:help.png]] '''NB:''' Het bovenstaand plaatje staat in het [[Check survey logic - Advanced/nl|enquête logica-bestand]], de  functie om de enquête op syntaxfouten te controleren voor het activeren.</div>




Line 70: Line 70:




We gebruiken nu een voorbeeld met een eenvoudige telling.  [[Media:ES survey - Cohabs.zip|Voorbeeld downloaden]].  
We gebruiken nu een voorbeeld met een eenvoudige telling.  [[Media:LS3_group_relevance.zip|Voorbeeld downloaden]].  


Op de beginpagina vragen we met hoeveel mensen je, de deelnemer, samenleeft, hiervoor we gebruiken we de variabele ''cohabs''. De volgende pagina wordt alleen getoond als je met iemand samenleeft. De velden p2name, p2age. p2sum worden ook alleen dan getoond als er een respons is.
Op de beginpagina vragen we met hoeveel mensen je, de deelnemer, samenleeft, hiervoor we gebruiken we de variabele ''cohabs''. De volgende pagina wordt alleen getoond als je met iemand samenleeft. De velden p2name, p2age. p2sum worden ook alleen dan getoond als er een respons is.
Line 87: Line 87:


De accolades worden niet gebruikt als je een relevantie-vergelijking invult.
De accolades worden niet gebruikt als je een relevantie-vergelijking invult.


==Maatwerk==
==Maatwerk==
Line 116: Line 115:




From the edit window for this question, you can see two things:
Op het wijzigscherm van de vraag, kun je zien dat:  
#Tailoring must surround expressions with curly braces
#je bij maatwerk de expressie tussen accolades moet zetten
#Expressions can span multiple lines if, as in this case, you want to make it easier to read the nested conditional logic.
#Een expressie kan heel lang zijn. Je wilt het dan meer leesbaar maken om de geneste conditionele logica beter te kunnen lezen.




Line 124: Line 123:




===Tailored Questions, Answers, and Reports===
===Maatwerk vragen, antwoorden en rapporten===




<div class="simplebox">[[File:help.png]] '''Note:''' Dynamic tailoring may not work if answer options are made available in select boxes on the same question page. This results from the fact that tailoring inserts a <nowiki><span></nowiki> tag which is not valid inside select options.</div>
<div class="simplebox">[[File:help.png]] '''NB:''' Dynamisch maatwerk kan mogelijk niet werken als de antwoordopties op hetzelfde scherm kunnen worden geselecteerd uit een lijst. Dit komt omdat bij maatwerk er een <nowiki><span></nowiki>-tag wordt toegevoegd, dat is niet mogelijk binnen een selectielijst.</div>


The BMI report looks like this:
Het BMI-rapport:




Line 135: Line 134:




Here is the edit window for the same question.
Het wijzigscherm voor dezelfde vraag.




Line 141: Line 140:




Anything within curly braces is treated as an expression, being syntax-highlighted (color coded) in the prior image. If you have any typos (such as misspelled or undefined variable names or functions), ES would show an error. In our below example:
Alles tussen haakjes wordt gezien als een expressie, in het voorgaande plaatje worden deze expressies gemarkeerd met kleur. Bij een fout (bijvoorbeeld een foutje in de naam of in de functienaam), toont ES een foutmelding. In onderstaand voorbeeld is:
* heightunit.shown is an undefined variable name (it is actually heightunits.shown) and
* heightunit.shown is een ongedefinieerde variabele (het moet heightunits.shown zijn) en
* "rnd()" is an undefined function (the proper function name is "round()").  
* "rnd( )" is een ongedefinieerde functie (het moet "round( )" zijn).  


In both cases, the errors are located within a red box to make it easier to spot and fix them.
Beide fouten worden getoond in een rood veld, daardoor valt de fout eerder op.




Line 151: Line 150:




You can also see that you can quickly create complex reports, such as a table of entered values or tailored advice.
Je kunt ook snel complexe rapporten maken, zoals een tabel met ingevoerde waarden of advies op maat.


Please remember that all tailoring must surround expressions with curly braces so that LimeSurvey knows which parts of the question are free text and which should be parsed by the ExpressionScript engine.
Al het maatwerk moet dus tussen accolades, zodat LimeSurvey in de vraag het onderscheid ziet tussen vaste tekst en expressies (die in ExpressionScript worden verwerkt).




==Validation==
==Validatie==




ES controls how most of the advanced question options work. These control aspects like min/max numbers of answers, min/max individual values, min/max sum values, and checking that entered values match specified string patterns. Any value in one of those fields is considered an expression, so you can have min/max criteria with complex conditional relationships to other questions.
ExpressionScript bepaald hoe de speciale vraagopties werken. Dit betreft o.a.:  min/max aantal antwoorden, min/max persoonlijke waarden, min/max totalen, en controleren dat de invoer voldoet aan gespecificeerde patronen. Alle waarden in een van deze velden wordt gezien als een expressie, zodat je min/max criteria kunt hebben met complexe relaties met andere vragen.


In all of these cases, since the advanced question attribute is always considered an expression, you do not use curly braces when specifying it.
In al van deze gevallen hoef je bij het specificeren geen accolades te gebruiken omdat de speciale vraagopties altijd als een expressie beschouwd worden.


The [[ExpressionScript sample surveys|sample surveys]] page shows many working examples containing a variety of validation expressions.
Op de pagina met [[ExpressionScript sample surveys/nl|voorbeeld enquêtes]] staan meerdere voorbeelden van validatie met expressies.


=Expression Manager - presentation=
=ExpressionScript - presentatie=




To find out more about the Expression Manager and how you can use different expressions to enhance your survey, please click on the following [https://manual.limesurvey.org/Expression_Manager_-_presentation link].
Meer [https://manual.limesurvey.org/ExpressionScript_-_presentation/nl informatie] over ExpressionScript en hoe je verschillende expressies kunt gebruiken in je enquête.

Latest revision as of 19:38, 23 January 2021


Snelstartgids

In LimeSurvey kun je je enquêtes aanpassen met behulp van ExpressionScript (afgekort: ES). NB: "ExpressionScript is de nieuwe naam voor ExpressieBeheer (EM) in versie voor versie 4. Als je nog ergens ExpressieBeheer leest vanaf versie 4 dan is het dus ExpressionScript."

Met ES kun je het volgende aangeven:

  1. Navigatie/Vertakking : door de antwoorden van de deelnemer kan de volgorde van de vragen worden gewijzigd.
  2. Maatwerk : je kunt de vraag opmaken. Bijvoorbeeld antwoorden op eerdere vragen gebruiken, of zinnen opbouwen met een vervoeging van gegevens van de deelnemer (bijvoorbeeld leeftijd of sekse) of bepalen hoe een rapport (beoordelingsscore of maatadvies) wordt samengesteld.
  3. Validatie : ervoor zorgen dat de antwoorden aan gestelde voorwaarden voldoen, zoals een minimum of een maximum of voldoen aan een patroon.

In ES wordt een eenvoudige manier gebruikt om deze functies te specificeren. Bijna alles wat je kunt schrijven als een standaard mathematische vergelijking is een geldige expressie.

ES ondersteunt op dit moment 70 functies, bovendien kunnen er eenvoudig meer functies ondersteunt worden. Je hebt ook toegang tot variabelen met leesbare namen (anders dan bij SGQA-identifiers).

Hieronder beschrijven we waar ES meestal voor wordt gebruikt.


Relevantie (Controle Navigatie/Vertakking)

Bij sommige enquête-systemen wordt een "Goto Logic" gebruikt, als de deelnemer bij Vraag1 optie C kiest, ga dan naar Vraag5. Het controleren van een dergelijke enquête is lastig. Ook bij het verplaatsen van vragen kan er gemakkelijk iets verkeerd gaan waardoor de enquête niet meer werkt. In LimeSurvey wordt ES gebruikt waardoor er gebruikt gemaakt wordt van Booleanse algebra om de condities te specificeren wanneer een vraag getoond moet worden. Alleen als de vraag relevant is wordt de vraag getoond. Als de vraag niet relevant is, dan wordt die niet getoond en wordt de waarde "NULL" vastgelegd in de database.

NB: Dit kan op een vergelijkbare manier in de Conditie-editor worden gedaan, maar in ES kun je gemakkelijk meer complexe en krachtige criteria gebruiken (en dan met een variabele-naam in plaats van een SGQA-identifier).




Om het begrip relevantie beter te begrijpen, gebruiken we een voorbeeld met een enquête waarin de BMI (Body Mass Index) wordt bepaald van de deelnemer. Voorbeeld downloaden.

De relevantievergelijking wordt getoond in de kolom Relevantie na de naam van de variabele. De zijn bij weight, weight_units, height en height_units allemaal 1 (standaardwaarde), wat betekent dat die vragen altijd worden getoond. Voor BMI is de relevantie echter {!is_empty(height) and !is_empty(weight)}, wat betekent dat het alleen bepaald wordt als beide velden height en weight zijn ingevuld. Dat voorkomt ook het delen door 0. Ook de vraag "Report" wordt alleen getoond als alle 4 vragen ingevuld worden door de gebruiker (height, heightunits, weight, weightunits).



NB: Het bovenstaand plaatje staat in het enquête logica-bestand, de functie om de enquête op syntaxfouten te controleren voor het activeren.


De relevantievergelijking wordt getoond en kan gewijzigd worden:

  • op vraagniveau
  • op vraaggroepniveau


Bekijken / Wijzigen relevantie op vraagniveau

Deze vergelijking bepaalt de index voor het lichaamsgewicht (BMI). De vraag wordt alleen getoond als de deelnemer eerst het gewicht en de lengte heeft ingevuld.



Het wijzigscherm voor de vraag over het BMI.



De accolades worden niet gebruikt als je een relevantie-vergelijking invult.


Bekijken / Wijzigen relevantie op groepsniveau

We gebruiken nu een voorbeeld met een eenvoudige telling. Voorbeeld downloaden.

Op de beginpagina vragen we met hoeveel mensen je, de deelnemer, samenleeft, hiervoor we gebruiken we de variabele cohabs. De volgende pagina wordt alleen getoond als je met iemand samenleeft. De velden p2name, p2age. p2sum worden ook alleen dan getoond als er een respons is.



De groep heeft dus ook relevantie-criteria op vraagniveau. Een vraag wordt soms alleen gesteld als je een bepaalde voorgaande vraag hebt beantwoordt (zie vraag p2age, als vraag p2name is beantwoord). De relevantie voor de groep en de vraag worden vanzelf gecombineerd. Een vraag in de groep wordt alleen gesteld als de groep relevant is.  Binnen de groep worden alleen de relevante vragen gesteld.

Het scherm voor het wijzigen van de relevantie op groepsniveau van Cohabitant 2:



De accolades worden niet gebruikt als je een relevantie-vergelijking invult.

Maatwerk

Je kunt eenvoudig allerlei conditioneel maatwerk in je vragen gebruiken. Soms is een eenvoudige vervanging al voldoende. Voorbeeld: "U heeft [Product] gekocht.  Wat vond u het sterkste punt ervan?".  Soms wil je een vervanging op een conditie doen. Bijvoorbeeld: "[Dhr./Mevr.] [Achternaam], wilt u deze enquête invullen?". Je wilt hier dan natuurlijk de keuze tussen Dhr. en Mevr. op basis van het geslacht door het programma laten maken. Je kunt ook hele complexe vervangingen doen met bijvoorbeeld berekeningen. ES ondersteunt dit maatwerk.


Conditionele vergelijking

Het voorbeeld met de BMI toont de mogelijkheid om dit BMI te berekenen, omdat je daar de lengte, het gewicht en de gebruikte eenheden (die kunnen per land verschillen) opvraagt:



Hier is weight_kg {if(weight_units == 'kg', weight, weight * .453592)}.  Deze if() functie betekent dat als het gewicht in kg is ingevuld, dat dan als gewicht de eerste waarde moet worden genomen (de ingevulde waarde) en anders dat het gewicht dat is ingevuld moet worden vermenigvuldigd met een constante (om de ponden om te zetten in kg).  De variabele height_m wordt gebruikt om de lengte in meters om te zetten als die in inches is ingevuld (1 meter is 3.28084 inches).

De BMI wordt bepaald door het gewicht te delen door kwadraat van de lengte: {weightkg / (heightm * heightm)}.

Tot slot wordt het rapport conditioneel afgesloten met wat de invoergegevens waren. ("U heeft gezegd dat u 2 meter lang bent en 70 kg weegt.")

In het onderstaande plaatje zie je de verdere uitwerking om met geneste if()-condities de persoon in te delen in categorieën als ondergewicht of obesitas. Je ziet de vergelijkingen ook bij de functie "Logica tonen".



Op het wijzigscherm van de vraag, kun je zien dat:

  1. je bij maatwerk de expressie tussen accolades moet zetten
  2. Een expressie kan heel lang zijn. Je wilt het dan meer leesbaar maken om de geneste conditionele logica beter te kunnen lezen.



Maatwerk vragen, antwoorden en rapporten

NB: Dynamisch maatwerk kan mogelijk niet werken als de antwoordopties op hetzelfde scherm kunnen worden geselecteerd uit een lijst. Dit komt omdat bij maatwerk er een <span>-tag wordt toegevoegd, dat is niet mogelijk binnen een selectielijst.

Het BMI-rapport:



Het wijzigscherm voor dezelfde vraag.



Alles tussen haakjes wordt gezien als een expressie, in het voorgaande plaatje worden deze expressies gemarkeerd met kleur. Bij een fout (bijvoorbeeld een foutje in de naam of in de functienaam), toont ES een foutmelding. In onderstaand voorbeeld is:

  • heightunit.shown is een ongedefinieerde variabele (het moet heightunits.shown zijn) en
  • "rnd( )" is een ongedefinieerde functie (het moet "round( )" zijn).

Beide fouten worden getoond in een rood veld, daardoor valt de fout eerder op.



Je kunt ook snel complexe rapporten maken, zoals een tabel met ingevoerde waarden of advies op maat.

Al het maatwerk moet dus tussen accolades, zodat LimeSurvey in de vraag het onderscheid ziet tussen vaste tekst en expressies (die in ExpressionScript worden verwerkt).


Validatie

ExpressionScript bepaald hoe de speciale vraagopties werken. Dit betreft o.a.: min/max aantal antwoorden, min/max persoonlijke waarden, min/max totalen, en controleren dat de invoer voldoet aan gespecificeerde patronen. Alle waarden in een van deze velden wordt gezien als een expressie, zodat je min/max criteria kunt hebben met complexe relaties met andere vragen.

In al van deze gevallen hoef je bij het specificeren geen accolades te gebruiken omdat de speciale vraagopties altijd als een expressie beschouwd worden.

Op de pagina met voorbeeld enquêtes staan meerdere voorbeelden van validatie met expressies.

ExpressionScript - presentatie

Meer informatie over ExpressionScript en hoe je verschillende expressies kunt gebruiken in je enquête.