Actions

ExpressionScript Hoe te gebruiken

From LimeSurvey Manual

Revision as of 20:09, 17 October 2018 by Han (talk | contribs)



Samenvatting van eerdere uitleg over Expressiebeheer

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 in LimeSurvey expressies werken.


Syntax highlighting

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 elk voorbeeld zijn er drie kolommen:

  1. Source : dit is de onbewerkte tekst die je zou invoeren in het LimeSurvey-vragenveld.
  2. Pretty Print : dit is hetzelfde met syntaxis-markering.
    • Merk op dat expressies worden weergegeven met een geelbruine achtergrond, maar niet omringd worden door accolades in deze markering.
    • Aangezien expressiebeheer recursieve vervanging ondersteunt, zou het tonen van accolades in de markering syntaxisfouten veroorzaken.
  3. Result : dit is de output die wordt gegenereerd wanneer expressiebeheer de invoer verwerkt.
    • Alles dat goed vervangen kan worden, vervangen is.
    • Expressies met fouten worden in-line getoond, met syntax highlighting. Fouten worden getoond met een rood-omlijnd veld.


Juiste syntaxis

Hieronder staan voorbeelden:

  1. Waarden: geeft aan dat bekende variabelen een kleurcode hebben afhankelijk van of ze op de huidige pagina zijn ingesteld. INSERTANS xxxx: in oude stijl krijgt zijn eigen kleurcoderingsstijl
  2. Vraagattributen: laat zien dat de puntnotatie toegang heeft tot een aantal eigenschappen van vragen.
  3. Berekeningen: laat zien dat eenvoudige en complexe berekeningen worden ondersteund.
  4. Tekstverwerking: toont enkele van de beschikbare tekstverwerkingsfuncties.
  5. Datum: toont twee van de beschikbare datumgerelateerde functies.
  6. Conditioneel: toont het gebruik van de if-functie. De keuzes kunnen worden genest.
  7. Maatwerk: u kunt een rapport volledig aanpassen op basis van eerdere waarden.
  8. processen binnen strings: toont aan dat het vervangingen binnen strings kan uitvoeren. Dit voorbeeld genereert een aangepaste afbeeldingsnaam.
  9. Expressiebeheer verwerkt accolades niet zoals deze: laat zien dat als de accolades worden geëscaped of er een witruimte is tussen de expressie en de accolades, de expressie wordt dan genegeerd.



Syntaxis met fouten

Hier zijn voorbeelden van veelvoorkomende fouten bij het gebruik van expressies. Kijk of er een tooltip met informatie is.

  1. Inline JavaScript zonder spatie na accolades.
    • Omdat "document.write" direct na een accolade staat, wordt het door Expressiebeheer als een expressie gezien en komt er een rode box om "document" en "write" omdat het ongedefinieerde variabele en functies zijn.
  2. Onbekende / verkeerd gespelde variabelen, functies en operatoren.
    • Hier zijn we vergeten dat we de variabelenaam "gender" gebruiken in plaats van "sex". Ook is '++' geen ondersteunde operator.
  3. Waarschuwt als use = in plaats van eq, of voer waarde-toewijzingen uit.
    • Merk op dat de '=' en '+ =' in rode tekst zijn in plaats van in zwart. Als je er met de muis overheen beweegt, zie je waarschuwingen dat je een waarde toekent.
  4. Verkeerd aantal argumenten bij functies.
    • If-functie heeft 3 argumenten, maar hier staan er 4, dus is er een rode box bij de "if", de ondersteunde syntaxis wordt weergeven.
    • sum-functie heeft een onbeperkt aantal argumenten, maar we hadden een komma achteraan voor de sluithaakjes, dus dat is in het rood.
  5. Niet-overeenkomende haakjes.
    • Dit is een van de meest voorkomende fouten bij het schrijven van expressies.
    • Hier ziet u twee voorbeelden van ontbrekende sluithaakjes en een voorbeeld van één sluithaakje te veel
  6. Niet ondersteunde syntaxis
    • Als je een operator of interpunctie gebruikt die niet wordt ondersteund, dan krijg je een rood vak.
  7. Ongeldige toewijzingen.
    • Sommige variabelen zijn readWrite en kunnen hun waarden laten wijzigen. Andere zijn alleen-lezen.
    • Als je de waarde van een alleen-lezen variabele probeert te wijzigen, dan mislukt dat.
    • Als je probeert een waarde toe te kennen aan een expressie of een string, krijg je ook een foutmelding.



"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?
Hier is een voorbeeld van goede 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?
Hier is een voorbeeld van goede syntaxis met tooltips
Hallo Mr. Smith , het is nu 06:07 uur. Weet je waar je 3 kinderen en huisdieren zijn?
Dit zijn veelvoorkomende fouten, zodat je de tooltips kunt zien
Variabelen die zijn gebruikt voordat ze zijn gedeclareerd: {notSetYet}
Onbekende functie: {iff (numPets> numKids, 1,2)}
Onbekende variabele: {sum (age, num_pets, numKids)}
Verkeerde # parameters: {sprintf ()}, {if (1,2)}, {date ()}
Wijs alleen-lezen-vars toe: {TOKEN: ATTRIBUTE_1 + = 10}, {name = 'Sally'}
Ongebalanceerde haakjes: {pow (3,4}, {(pow (3,4)}, {pow (3,4))}
Dit zijn veelvoorkomende fouten, zodat je de tooltips kunt zien
Variabelen die zijn gebruikt voordat ze zijn gedeclareerd: notSetYet
Onbekende functie: iff ( numPets > numKids , 1,2)
Onbekende variabele: sum ( age , num_pets , numKids )
Verkeerde # parameters: sprintf () , if (1,2) , date ()
Wijs alleen-lezen-vars toe: TOKEN: ATTRIBUTE_1 + = 10 , name = 'Sally'
Ongebalanceerde haakjes: pow (3,4 , ( pow (3,4) , pow (3,4) )
Hier is een voorbeeld van goede syntaxis met tooltips
Variabelen die zijn gebruikt voordat ze zijn gedeclareerd: notSetYet
Onbekende functie: iff ( numPets > numKids , 1,2)
Onbekende variabele: sum ( age , num_pets , numKids )
Verkeerde # parameters: sprintf () , if (1,2) , date ()
Wijs alleen-lezen-vars toe: TOKEN: ATTRIBUTE_1 + = 10 , name = 'Sally'
Ongebalanceerde haakjes: pow (3,4 , ( pow (3,4) , pow (3,4) )
Hier is een deel van de niet-ondersteunde syntaxis
Geen ondersteuning voor '++', '-', '%', ';': {min (++ age, --age, age% 2);}
Noch '|', '&', '^': {(som (2 | 3,3 & 4,5 ^ 6)}}
No arrays: {name [2], name ['mine']}! N!
Hier is een deel van de niet-ondersteunde syntaxis
Geen ondersteuning voor '++', '-', '%', ';': min ( ++ leeftijd , - leeftijd , leeftijd % 2) ;
Noch '|', '&', '^': ( som (2 | 3,3 & 4,5 ^ 6) }
No arrays: name [ 2 ] , name [ 'mine' ]
Hier is een deel van de niet-ondersteunde syntaxis
Geen ondersteuning voor '++', '-', '%', ';': min ( ++ leeftijd , - leeftijd , leeftijd % 2) ;
Noch '|', '&', '^': ( som (2 | 3,3 & 4,5 ^ 6) }
No 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 "geslacht" 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)".

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


Tekst in uitnodiging:

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

u bent uitgenodigd om deel te nemen aan een enquête:

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 instelt of aanpast.

# Code Vraag Type Relevantie
1 numKids Hoeveel kinderen heeft u? Numerieke invoer 1
2 kid1 Hoe oud is uw eerste kind? Numerieke invoer numKids>= 1
3 kid2 Hoe oud is uw tweede kind? Numerieke invoer numKids>= 2
4 kid3 Hoe oud is uw derde kind? Numerieke invoer numKids>= 3
5 kid4 Hoe oud is je vierde kind? Numerieke invoer numKids>= 4
6 sumKidAges {sum (kid1.NAOK,kid2. NAOK,kid3.NAOK,kid4.NAOK)} Vergelijking 1
7 kidSummary U zei dat u {numKids} heeft. {If (numKids == 1, 'kind', 'kinderen')}. {if (numKids> 1, implode (, 'De som van leeftijden van uw eerste', min (numKids, 4), 'kids is', sumKidAges, '.'), )} |! 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, Welkomstbericht en Eindboodschap.

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: "Je hebt 0 kinderen" in plaats van 'Je hebt 0 kind".



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 opgetelt:



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 haakje tussen haakjes), of dat je extra haakjes tussen haakjes hebt. Je moet proberen de haakjes te tellen terwijl je lange geneste if-instructies samenstelt, deze opslaat, controleert op syntaxisfouten en deze oplost als deze worden gevonden. 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.



Wanneer je een vraag bewerkt, kun je op een gegeven moment een verkeerd aantal haakjes krijgen. Dit is wat er gebeurt als je te weinig hebt:



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 dak haakje in een rood vakje:



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