Actions

ExpressionScript Engine - Snelstartgids

From LimeSurvey Manual

This page is a translated version of the page ExpressionScript Engine - Quick start guide and the translation is 100% complete.
Other languages:
Deutsch • ‎English • ‎Nederlands • ‎Tiếng Việt • ‎dansk • ‎español • ‎français • ‎italiano • ‎magyar • ‎polski • ‎română • ‎slovenščina • ‎български • ‎日本語


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


Tutorial1.jpg


Help.png 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.


Tutorial2.jpg


Het wijzigscherm voor de vraag over het BMI.


Tutorial3.jpg


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.


Tutorial4.jpg


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:


Tutorial5.jpg


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:


Tutorial1.jpg


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


Tailoring8.jpg


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.


Tailoring9.jpg


Maatwerk vragen, antwoorden en rapporten

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 <span>-tag wordt toegevoegd, dat is niet mogelijk binnen een selectielijst.

Het BMI-rapport:


Tailoring10.jpg


Het wijzigscherm voor dezelfde vraag.


Tailoring11.jpg


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.


Tailoring12.jpg


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.