Actions

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

From LimeSurvey Manual

(Created page with "In al van deze gevallen hoef je bij het specificeren geen accolades te gebruiken omdat de speciale vraagopties altijd als een expressie beschouwd worden.")
(Created page with "Op de pagina met voorbeeld enquêtes staan meerdere voorbeelden van validatie met expressies.")
Line 163: Line 163:
In al van deze gevallen hoef je bij het specificeren geen accolades te gebruiken omdat de speciale vraagopties altijd als een expressie beschouwd worden.
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=
=Expression Manager - presentation=

Revision as of 19:42, 18 May 2020


Snelstartgids

Within LimeSurvey, you can further customize your surveys via the usage of the ExpressionScript (short: 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."

ES can be used to specify the following:

  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.

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).



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

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.

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.

Expression Manager - presentation

To find out more about the Expression Manager and how you can use different expressions to enhance your survey, please click on the following link.