Actions

ExpressionScript Hoe te gebruiken

From LimeSurvey Manual

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



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


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, kunt je de bestaande highlighting gebruiken om fouten snel te identificeren en op te lossen. Je kunt de tooltips ook 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 het syntaxis-gemarkeerde equivalent.
  3. * Merk op dat uitdrukkingen worden weergegeven met een tan achtergrond, maar niet omringd door accolades in deze markering.
  4. * Aangezien expressiebeheer recursieve vervanging ondersteunt, zou het tonen van accolades in de markering syntaxisfouten veroorzaken.
  5. Result : dit is de output die wordt gegenereerd wanneer expressiebeheer de invoer verwerkt.
  6. * Alles dat goed kan worden vervangen is.
  7. * Expressies met fouten worden in-line getoond, met syntax highlighting. Fouten worden omgeven door een rood-omlijnd veld.


Juiste syntaxis

Hieronder staan voorbeelden:

  1. Values: 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. Math: laat zien dat eenvoudige en complexe berekeningen worden ondersteund.
  4. TextProcessing: toont enkele van de beschikbare tekstverwerkingsfuncties.
  5. Dates: toont twee van de beschikbare datumgerelateerde functies.
  6. Conditional: toont het gebruik van de if-functie. De keuzes kunnen worden genest.
  7. Tailored-alinea: u kunt een rapport volledig aanpassen op basis van eerdere waarden.
  8. EM-processen binnen strings: toont aan dat het substituties binnen strings kan uitvoeren. Dit voorbeeld genereert een aangepaste afbeeldingnaam.
  9. EM 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, EM de expressie negeert.



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.
  2. * Omdat "document.write" direct na een accolade verschijnt, wordt het door Expressiebeheer als een expressie gezien komt er rode box om "document" en "write" omdat het ongedefinieerde variabele en functies zijn.
  3. Onbekende / verkeerd gespelde variabelen, functies en operatoren.
  4. * Hier zijn we vergeten dat we de variabelenaam "gender" gebruiken in plaats van "sekse". Ook is '++' geen ondersteunde operator is.
  5. Waarschuwt als use = in plaats van eq, of voer waarde-toewijzingen uit.
  6. * 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.
  7. 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.
  8. * sum -functie heeft een onbeperkt aantal argumenten, maar we hadden een komma achteraan voor de sluitende haakjes, dus dat is in het rood.
  9. Niet-overeenkomende haakjes.
  10. * Dit is een van de meest voorkomende fouten bij het schrijven van expressies.
  11. * Hier ziet u twee voorbeelden van ontbrekende sluithaakjes en een voorbeeld van één sluithaakjes te veel
  12. Niet ondersteunde syntaxis
  13. * Als je een operator of interpunctie gebruikt die niet wordt ondersteund, dan krijg je een rood vak.
  14. Ongeldige toewijzingen.
  15. * Sommige variabelen zijn readWrite en kunnen hun waarden laten wijzigen. Andere zijn alleen-lezen.
  16. * Als je de waarde van een alleen-lezen variabele probeert te wijzigen, dan mislukt dat.
  17. * 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.' , 'Mevrouw' ) 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 jij 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:/...



email View:



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


You may find below screenshots of representative questions. As you can see, EM syntax-highlights all fields that might contain tailoring. Here, you see examples of syntax-highlighting Relevance, the Equation question type, and substitutions within a question. You can also use substitutions within Help, Group header display, Welcome message, and End message.

In the next example, since the relevance is {numKids >= 2), the question will only be visible if the respondent reports that she has at least two children.



Below, you may observe that each variable has the .NAOK suffix attached to it. This is because of how EM supports cascading relevance. If you did not have .NAOK, then the sum would only be computed if the person said she has 4 children (e.g., if all of the variables are relevant). The usage of .NAOK means that we want to compute the sum even if all or some of the variables are irrelevant (e.g., "Not Applicable" (NA) is alright (OK)).

However, the .NAOK attribute only affects whether variables are passed into EM. If the respondent initially says she has 3 children, and enters ages for each, then changes her mind and says she has 2, we don't want to see the sum of the 3 entered values - since the third child is "not applicable" in our case anymore:



Each separate Expression is color coded with a tan background. As you can see, there are three separate Expressions here. The last one contains a message that is conditionally shown only if the person has more than one child.



Now, here are screenshots of the survey in action.

When you first visit the page, you see this. Note that is says "You have 0 children" instead of "You have 0 child".



If I change the value for number of children to 1, the display instantly changes to this, even though it is on the same page:



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



Now I'll enter ages for my imaginary children, and I get this display, summing up their ages:



Again, the score and display updates instantly as I enter the values, so you can use this to show a running total of an Assessment Score.


Now, I change the value for the number of children to 2. The display has changed to this:



Notice that although I had entered a value of 5.5 for the third child, the report now only sums the values of my first 2 children.

The reason for this is that the 3rd value is now irrelevant, and irrelevant values are actively ignored by EM.

If I were to change the number of kids back to 3, I would see the value of 5.5 I entered again. So, I don't lose any information I enter on the page.

However, if I navigate to the Next or Previous page, all irrelevant values will be NULLed out in the session and in the database. So, if I were to keep the value at 2, go to the next page, and then come back and state that I actually have 3 kids, I would no longer see the age of 5.5.


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)

EM supports the function "if(test,do_if_true,do_if_false)" so that you can perform conditional logic or tailoring. This function can be nested to do the equivalent of "if { } else if { } else {  }". EM will let you know if the parentheses are not balanced (e.g., you are missing a closing right parenthesis), or if you have any extra right parentheses. You should try to count the parentheses as you compose long nested if statements, save it, check for syntax errors, and fix them if any are found. Let's check together the below example.

The group of questions used below can be accessed from here: Tailoring survey example.lsg


First, with nothing entered, you just see "Hello."



If you enter a name, it says, "Hello {name}."



If you enter an age, you get a tailored message, depending upon whether you are a pre-school-age child or not:



School aged, teenager, or adult. Here is a  teenager who wants to be anonymous:



Here is the logic file of the group. As you can see in the "if-based" question, there are nested if statements based upon the person's age.



When you are originally editing this question, it is likely that at some point, you will have the wrong number of parentheses. Here's what happens if you have too few:



If you hover over the word "if", which is surrounded by a red box, it says "Parentheses not balanced". In this case, there should be four closing parentheses after "already an adult!", but there are only three.

If, on the other hand, you have an extra right parenthesis, it will be surrounded by a red box, like this:



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