Actions

ExpressionScript Hoe te gebruiken

From LimeSurvey Manual

Revision as of 19:39, 21 May 2020 by Han (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Other languages:
English • ‎Nederlands • ‎日本語


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.


Em-syntax-highlighting-1-v2.jpg


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.


Em-syntax-highlighting-errors-v2.jpg


"Live" voorbeelden van syntaxis markering met actieve tooltips

Bron Opmaak Resultaat
Een voorbeeld zonder fouten 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 je waar je 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))}
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))
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))
Niet ondersteunde syntax
Geen ondersteuning voor '++', '--', '%',';': {min(++age, --age,age % 2);}
Ook niet voor '|', '&', '^': {(sum(2 | 3,3 & 4,5 ^ 6)}}
of voor arrays: {name[2], name['mine']}
Niet ondersteunde syntax
Geen ondersteuning voor '++', '--', '%',';': min( ++ age, -- age,age % 2) ;
Ook niet voor '|', '&', '^': (sum(2 | 3,3 & 4,5 ^ 6)}
of voor arrays: name [ 2 ] ,name [ 'mine' ]
Niet ondersteunde syntax
Geen ondersteuning voor '++', '--', '%',';': min( ++ age, -- age,age % 2) ;
Ook niet voor '|', '&', '^': (sum(2 | 3,3 & 4,5 ^ 6)}
of voor 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


Em-tailoring-q-ex1.jpg


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


Em-tailoring-q-ex1-usage.jpg Em-tailoring-q-ex2-usage.jpg


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:/...


EmEx1mail.jpg


E-mail:


EmEx1mailview.jpg


Voorbeelden berekening /beoordeling

Berekenen beoordelingswaarden bij uitvoering en opslaan van de resultaten

In dit voorbeeld worden alle functies van ExpressionScript 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 Vraag Type Relevantie
1 numKids Hoeveel kinderen heeft u? Numerical input 1
2 kid1 Hoe oud is uw eerste kind? Numerical input numKids >= 1
3 kid2 Hoe oud is uw tweede kind? Numerical input numKids >= 2
4 kid3 Hoe oud is uw derde kind? Numerical input numKids >= 3
5 kid4 Hoe oud is uw vierde kind? Numerical input numKids >= 4
6 sumKidAges {sum(kid1.NAOK,kid2.NAOK,kid3.NAOK,kid4.NAOK)} Equation 1
7 kidSummary U heeft aangegeven dat u {numKids} {if(numKids==1,'kind','kinderen')} heeft. {if(numKids>1,implode(' ','De som van de leeftijden van uw eerste ',min(numKids,4),' kinderen is ',sumKidAges,'.'),' ')} Text display 1


Voorbeeld downloaden.


Hieronder staan schermafbeeldingen van representatieve vragen. Zoals je kunt zien, markeert ExpressionScript 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.


Em-tailoring2-q-kid2.jpg


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


Em-tailoring2-q-sumKidAges.jpg


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.


Em-tailoring2-q-kidSummary.jpg


Eindelijk, de screenshots.

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


Em-tailoring2-s-0kids.jpg


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


Em-tailoring2-s-1kid.jpg


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


Em-tailoring2-s-3kids.jpg


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


Em-tailoring2-s-3kids-sum.jpg


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:


Em-tailoring2-s-2kids-sum.jpg


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

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:


Em-on page report-usage-1.jpg


Kijk wat er gebeurd als je een antwoord invult:

Em-on page report-usage-2.jpg


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


Em-on page report-usage-3.jpg

Voorbeeld gebruikelijke foutopsporing

Geneste if-statements (Conditionele logica)

ExpressionScript 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'.


Em-nested-if-blank.jpg


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


Em-nested-if-name.jpg


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:


Em-nested-if-toddler.jpg


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


Em-nested-if-teenager.jpg


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.


Em-nested-if-logic-file.jpg


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


Em-nested-if-name.jpg


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:


Em-nestedd-if-extra-right-paren.jpg


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


Em-nested-if-edit-screen.jpg