Actions

ExpressionScript Hoe te gebruiken

From LimeSurvey Manual

Revision as of 14:53, 21 May 2020 by Han (talk | contribs)


Samenvatting van eerdere uitleg

Als je de index van de LimeSurvey-handleiding tot nu toe hebt gevolgd, betekent dit dat je de LimeSurvey-terminologie al kent. We hebben expressies en variabelen behandeld om te laten zien hoe we onze enquêtes kunnen verbeteren. Daarna zijn we overgegaan op de manieren en betekenissen van syntax highlighting om te laten zien hoe je syntaxisfouten kunt verbeteren.

Met dit als kennis kunnen we naar de voorbeelden gaan en laten zien hoe je in LimeSurvey met expressies kunt werken.


Syntax markeren

De volgende screenshots geven voorbeelden zonder de tooltips. Een tooltip is een informatieve box die wordt weergegeven wanneer je de muisaanwijzer op een vetgedrukt woord plaatst.

Door de markering van de syntaxis is het eenvoudig om correcte gecompliceerde expressies samen te stellen. Hoewel het LimeSurvey-team van plan is om een ​​grafische gebruikersinterface te maken, kun je de bestaande highlighting gebruiken om fouten snel te zien en op te lossen. Je kunt ook de tooltips gebruiken om de nauwkeurigheid van de expressies te valideren (bijv. bevestig dat je de gewenste variabele(n) hebt geselecteerd).

In de voorbeelden zijn er drie kolommen:

  1. Source - de ruwe tekst die de in te vullen vraagtekst is
  2. Pretty Print - hetzelfde maar dan syntax-highlighted
    • NB Expressies worden getoond met een geelbruine achtergrond, maar zonder de haakjes er omheen in de highlighting.
    • Omdat recursieve vervanging wordt ondersteund zou het tonen van de haakjes in de highlighting leiden tot fouten
  3. Result - de gegenereerde uitvoer van ES
    • Alles dat goed vervangen kan worden
    • Expressies met fouten in-line met highlighting getoond. Fouten staan in een box met rode lijnen.


Juiste syntaxis

Voorbeelden met een juiste syntax:

  1. Waarden: toont bekende variabelen met een kleurverschil wel/niet op de huidige pagina bepaald. Oude INSERTANS:xxxx variabele hebben een eigen stijl van werken met kleur
  2. Question Attributes: met de punt-notatie kun je enkele properties van vragen, de vraagattributen, gebruiken
  3. Math: toont enkele ondersteunde basis en complexe berekeningen
  4. TextProcessing: toont enkele van de mogelijke tekstverwerkingsfuncties
  5. Dates: toont twee beschikbare functies met datums
  6. Conditional: toont het gebruik van de functie if(). De keuzes kunnen genest worden.
  7. Tailored paragraph: je kunt een rapport aanpassen op grond van bekende waarden
  8. EM processes within strings: het tonen dat strings vervangen kunnen worden. Bijvoorbeeld de naam van het plaatje.
  9. EM doesn't process curly braces like these: toont dat als de haakjes niet actief zijn of er een spatie staat tussen het haakje en de expressie dat de expressie niet verwerkt wordt.



Syntaxis met fouten

Wat voorbeelden met vaak in expressies gemaakte fouten. Gebruik dan de tooltips voor een aanvullende uitleg.

  1. Inline JavaScript zonder spatie na een haakje
    • Omdat "document.write" rechts na een haakje komt wordt het door ES/EM aangezien voor een expressie, "document" en "write" zijn dan resp. een onbekende variabele en functie
  2. Onbekende / Fout gespelde variabelen, functies en operatoren
    • De naam van de variabele is "gender" in plaats van of "sex", ES herkent de fout. De operator '++' wordt niet ondersteund.
  3. Waarschuwing als = wordt gebruikt in plaats van eq, of uitvoeren van het toekennen van een waarde
    • De '=' en '+=' zijn in rode tekst en niet in zwart. Als je met de muis erover gaat dan zie je de waarschuwing dat je een waarde toekent
  4. Verkeerd aantal argumenten bij functies
    • Bij if() 4 argumenten in plaats van 3, bij eroverheen gaan met de muis krijg je een fouttekst en de goede syntax
    • sum() heeft een onbeperkt aantal argumenten, maar de komma voor het sluithaakje is fout
  5. Verkeerd aantal haakjes
    • Dit komt vaak voor bij het maken van expressies
    • Twee voorbeelden met ontbrekend sluithaakje en een met teveel sluithaakjes.
  6. Niet ondersteunde syntax
    • Als je een niet ondersteunde operator of interpunctie gebruikt
  7. Ongeldige toekenningen
    • Enkele variabelen zijn readWrite en kunnen dus gewijzigd worden. Anderen zijn read-only.
    • Een fout is dus het wijzigen van een read-only variabele.
    • Je krijgt ook een foutmelding als je een waarde toekent aan den vergelijking of een string.



"Live" voorbeelden van syntaxis markering met actieve tooltips

Bron Opmaak Resultaat
Hier is een voorbeeld van OK syntaxis met tooltips
Hallo {if (geslacht == 'M', 'Mr.', 'Mevr.')} {achternaam}, het is nu {date ('g: i a', time ())}. Weet je waar je {sum (numPets, numKids)} kinderen en huisdieren zijn?
Een voorbeeld zonder fouten met tooltips
Hallo if(gender == 'M','Mr.','Mevr.') surname, het is nu date('g:i a',time()). Weet je waar je sum(numPets,numKids) kinderen en huisdieren zijn?
Een voorbeeld zonder fouten met tooltips
Hallo Mr. Smith, het is nu 6:07. Weet u waar uw 3 kinderen en huisdieren zijn?
Enkele gebruikelijke fouten, kijk naar de tooltips
Variabelen gebruiken voor definitie: {notSetYet}
Onbekende functie: {iff(numPets>numKids,1,2)}
Onbekende variabele: {sum(age,num_pets,numKids)}
Verkeerd aantal parameters: {sprintf()},{if(1,2)},{date()}
Read-only variabelen wijzigen:{TOKEN:ATTRIBUTE_1+=10},{name='Sally'}
Fout met haakjes: {pow(3,4},{(pow(3,4)},{pow(3,4))}
Here are common errors so you can see the tooltips
Variables used before they are declared: notSetYet
Unknown Function: iff(numPets > numKids,1,2)
Unknown Variable: sum(age,num_pets,numKids)
Wrong # parameters: sprintf(),if(1,2),date()
Assign read-only-vars:TOKEN:ATTRIBUTE_1+=10,name='Sally'
Unbalanced parentheses: pow(3,4,(pow(3,4),pow(3,4))
Here are common errors so you can see the tooltips
Variables used before they are declared: notSetYet
Unknown Function: iff(numPets > numKids,1,2)
Unknown Variable: sum(age,num_pets,numKids)
Wrong # parameters: sprintf(),if(1,2),date()
Assign read-only-vars:TOKEN:ATTRIBUTE_1+=10,name='Sally'
Unbalanced parentheses: pow(3,4,(pow(3,4),pow(3,4))
Here is some of the unsupported syntax
No support for '++', '--', '%',';': {min(++age, --age,age % 2);}
Nor '|', '&', '^': {(sum(2 | 3,3 & 4,5 ^ 6)}}
Nor arrays: {name[2], name['mine']}
Here is some of the unsupported syntax
No support for '++', '--', '%',';': min( ++ age, -- age,age % 2) ;
Nor '|', '&', '^': (sum(2 | 3,3 & 4,5 ^ 6)}
Nor arrays: name [ 2 ] ,name [ 'mine' ]
Here is some of the unsupported syntax
No support for '++', '--', '%',';': min( ++ age, -- age,age % 2) ;
Nor '|', '&', '^': (sum(2 | 3,3 & 4,5 ^ 6)}
Nor arrays: name [ 2 ] ,name [ 'mine' ]


Voorbeelden maatwerk (bijv.uitbreiding {INSERTANS:xxx})

Aanhef

Gebruik de if-functie om voorwaardelijk te kiezen of 'Mr.' wordt weergegeven of 'Mrs.'.

The syntaxis is if(test,do_if_true,do_if_false).

# Code Vraag Type
1 geslacht What is your gender? Gender
2 voorbeeld1 Dear {if (gender == 'M', 'Mr.', 'Mrs.')} Smith, ... Lange vrije tekst



Zoals hier kan worden opgemerkt, zijn "Mr" en "Mrs" afgestemd op wat de deelnemer als antwoord op vraag "gender" selecteert.



Aanhef in e-mail uitnodiging

U kunt het bovenstaande voorbeeld in de uitnodiging gebruiken met behulp van attributen uit de token-tabel. Gebruik de if-functie om te kiezen of 'Mr.' of 'Mrs.' in de tekst van de e-mail moet worden gebruikt.


De syntaxis is "if(test,do_if_true,do_if_false)".

# attribuut waarde
1 Achternaam Smith
2 E-mailadres test@test.com
3 ATTRIBUTE_2 M


Tekst in uitnodiging:

Dear {if(ATTRIBUTE_2=='M','Mr','Mrs')} {LASTNAME},

you have been invited to participate in a survey:

https:/...



E-mail:



Voorbeelden berekening /beoordeling

Berekenen beoordelingswaarden bij uitvoering en opslaan van de resultaten

In dit voorbeeld worden alle functies van Expressiebeheer gebruikt, waaronder Relevantie, Maatwerk en het vraagtype Vergelijking.

Het laat ook zien dat ze allemaal JavaScript-enabled zijn, dus als je deze functies op een pagina hebt, zal deze dynamisch veranderen als de deelnemer het antwoord invult of aanpast.

# Code Question Type Relevance
1 numKids How many children do you have? Numerical input 1
2 kid1 How old is your first child? Numerical input numKids >= 1
3 kid2 How old is your second child? Numerical input numKids >= 2
4 kid3 How old is your third child? Numerical input numKids >= 3
5 kid4 How old is your fourth child? Numerical input numKids >= 4
6 sumKidAges {sum(kid1.NAOK,kid2.NAOK,kid3.NAOK,kid4.NAOK)} Equation 1
7 kidSummary You said that you have {numKids}. {if(numKids==1,'child','children')}. {if(numKids>1,implode(' ','The sum of ages of your first ',min(numKids,4),' kids is ',sumKidAges,'.'),' ')} Text display 1


Voorbeeld downloaden.


Hieronder staan schermafbeeldingen van representatieve vragen. Zoals je kunt zien, markeert Expressiebeheer alle velden die mogelijk maatwerk bevatten. Hier ziet u voorbeelden van accentuering van de relevantie, het vraagtype Vergelijking en vervangingen binnen een vraag. U kunt ook vervangingen gebruiken in Help, Groepskoptekstweergave, Welkomsttekst en Afsluittekst.

In het volgende voorbeeld is, omdat de relevantie {numKids> = 2) is, de vraag alleen zichtbaar als de deelnemer aangeeft minstens 2 kinderen te hebben.



Hieronder zie je dat aan elke variabele het .NAOK-achtervoegsel wordt gebruikt. Dit komt door de manier waarop cascade-relevantie wordt ondersteunt. Als u geen .NAOK had, dan zou de som alleen worden berekend als de persoon 4 kinderen heeft (bijv. Als alle variabelen relevant zijn). Het gebruik van .NAOK betekent dat we de som willen berekenen, zelfs als alle of sommige variabelen irrelevant zijn (bijv. "Niet van toepassing" (NA) is goed (OK)).

Het attribuut .NAOK heeft echter alleen invloed op de vraag of variabelen worden doorgegeven aan Expressiebeheer. Als de deelnemer aanvankelijk zegt 3 kinderen te hebben maar dat later aanpast in twee, dan willen we niet de som van de 3 ingevoerde waarden zien, aangezien het derde kind "niet van toepassing is":



Elke afzonderlijke expressie heeft een kleurcode met een lichtbruine achtergrond. Zoals je kunt zien, zijn er hier drie afzonderlijke expressies. De laatste bevat een bericht dat alleen wordt weergegeven als de persoon meer dan één kind heeft.



Eindelijk, de screenshots.

Wanneer de pagina voor het eerst wordt getoond, staat er: "You have 0 children" in plaats van "You have 0 child".



Als ik de waarde voor het aantal kinderen in 1 verander, dan wordt dit direct aangepast, ook al staat het op dezelfde pagina.



Merk op dat de grammatica correct is: "You have 1 child".

Nu verander ik de waarde voor het aantal kinderen in 3 en het resultaat wordt direct:

Let op het voorwaardelijke bericht onderaan: "The sum of ages of your first 3 kids is 0.".



Nu voer ik leeftijden in voor mijn 'kinderen', en ik krijg dit scherm, waarin hun leeftijden worden opgeteld:



Nogmaals, de score en het display worden onmiddellijk bijgewerkt terwijl ik de waarden invoeg, zodat je dit kunt gebruiken om een ​​lopend totaal van een beoordelingsscore te laten zien.


Nu verander ik de waarde voor het aantal kinderen in 2 en de pagina wordt:



Merk op dat hoewel ik een waarde van 5.5 had ingevoerd voor het derde kind, het overzicht nu alleen de waarden van de eerste 2 kinderen optelt.

De reden hiervoor is dat de 3e waarde nu irrelevant is, en irrelevante waarden worden actief genegeerd door Expressiebeheer.

Als ik het aantal kinderen weer op 3 zou zetten, zou ik de eerder ingevulde waarde van 5.5 weer zien. Dus ik verlies geen informatie die ik op de pagina heb ingevuld.

Als ik echter naar een andere pagina blader, worden alle irrelevante waarden NULLED in de sessie en in de database. Dus, als ik de waarde op 2 zou houden, naar de volgende pagina ga en weer terug ga en vervolgens het aantal kinderen op 3 zet, dan ben je de waarde 5,5 kwijt.


Gegevens invullen en zien dat de gegevens dynamisch op dezelfde pagina worden bijgewerkt

Dit voorbeeld toont het maatwerk.

Voorbeeld downloaden.

Dit is hoe de pagina er in eerste instantie uitziet. Je ziet alleen de vraag in welke stad je woont:



Kijk wat er gebeurd als je een antwoord invult:


Terwijl je antwoordt, wordt de tabel onder aan de pagina bijgewerkt om de antwoordcodes en waarden van je antwoorden weer te geven.


Voorbeeld gebruikelijke foutopsporing

Geneste if-statements (Conditionele logica)

Expressiebeheer ondersteunt de functie "if (test, do_if_true, do_if_false)", zodat je voorwaardelijke logica of maatwerk kunt uitvoeren. Deze functie kan worden genest om het equivalent van "if {} else if {} else {}" te doen. Je krijgt een melding bij fouten, haakjes niet gebalanceerd (je mist bijv. een sluithaakje), of dat je extra sluithaakjes hebt. Je moet proberen de haakjes te tellen als je lange geneste if-instructies maakt, deze opslaat, controleren op syntaxisfouten en deze oplossen. Laten we samen het onderstaande voorbeeld bekijken.

Voorbeeld downloaden


Ten eerste, als er niets is ingevoerd, zie je gewoon 'Hello'.



Als je een naam invoert, staat er: "Hello {naam}."



Als je een leeftijd invoert, krijg je een bericht op maat, afhankelijk van of je al dan niet een kind bent in de pre-schoolleeftijd:



School ouder, tiener of volwassen. Hier is een tiener die anoniem wil zijn:



Hier is het logica-bestand van de groep. Zoals je kunt zien in de "if-based" vraag, zijn er geneste if-statements gebaseerd op de leeftijd van de persoon.



Als je een naam invoert, staat er: "Hello {naam}."



Als je over het woord "if" gaat, dat is omgeven door een rood kader, staat er "haakjes niet gebalanceerd". In dit geval moeten er vier haakjes worden gesloten na 'al een volwassene!', maar er zijn er maar drie.

Als je daarentegen een extra rechterhaakje hebt, dan staat dat haakje in een rood vakje:



Wanneer je de vraag bewerkt, ziet de vraag er als volgt uit: