x

Huvudkapitel

  1. LimeSurvey Cloud vs LimeSurvey CE
  2. Snabbstartsguide - LimeSurvey 3.0+
  3. Installation - LimeSurvey CE
  4. Så utformar du en bra enkät (guide)
  5. Komma igång
  6. Administrera LimeSurvey
  7. Enkäter - introduktion
  8. Enkätinställningar
  9. Enkätmeny
  10. Enkätens struktur
  11. Frågor - introduktion
  12. Frågegrupper - introduktion
  13. Enkäter - hantering
  14. Alternativ i enkätverktygsfältet
  15. Flerspråkig enkät
  16. ExpressionScript-motorn – Snabbstartsguide
  17. Okategoriserade och avancerade funktioner
  18. FAQ
  19. Felsökning
  20. Lösningar och genvägar
  21. Licens
  22. Ändringslogg för versioner
  23. Plugins
 Actions

ExpressionScript – instruktioner

From LimeSurvey Manual

Den här sidan kan ha maskinöversatts och kan innehålla fel. Visa det engelska originalet · Förbättra den här översättningen
This page is a translated version of the page ExpressionScript How-tos and the translation is 100% complete.


Översikt över det som tidigare förklarats

Om du har följt strukturen i LimeSurvey-manualen hittills känner du redan till LimeSurvey-terminologin. Därefter gick vi igenom uttryck och variabler för att lära oss hur man förbättrar sina enkäter. I nästa del gick vi vidare till typerna och betydelserna av syntaxmarkering för att lära oss hur man rättar syntaxfel.

När dessa grundläggande begrepp är genomgångna kan vi gå vidare till exempel och förklara hur uttryck fungerar i LimeSurvey.


Syntaxmarkering

Följande skärmbilder ger exempel, men visar inte värdena i verktygstipsen. Ett verktygstips är en informationsruta som visas när du håller muspekaren över ett fetmarkerat, färgat ord.

Tack vare syntaxmarkeringen är det mycket enkelt att skriva korrekta uttryck, även komplicerade sådana. LimeSurvey-teamet planerar att försöka bygga ett grafiskt gränssnitt för uttrycksbyggare, men du kan redan nu använda den befintliga syntaxmarkeringen för att snabbt hitta och rätta stavfel. Du kan också använda verktygstipsen för att kontrollera att dina uttryck är korrekta (t.ex. bekräfta att du har valt rätt variabel/variabler).

I varje exempel finns tre kolumner:

  1. Source – detta är den råa text som du skulle ange i LimeSurveys frågefält
  2. Pretty Print – detta är den syntaxmarkerade motsvarigheten till det du angav
    • Observera att uttryck visas med beige bakgrund, men utan omgivande klammerparenteser i denna markering.
    • Eftersom EM stöder rekursiv ersättning skulle klammerparenteser i markeringen orsaka syntaxfel
  3. Result – detta är det resultat som skapas när EM bearbetar källtexten
    • Allt som kan ersättas på rätt sätt ersätts
    • Uttryck med fel visas direkt i texten, med syntaxmarkering. Fel omges av en röd ruta.


Korrekt syntax

Nedan hittar du exempel på korrekt syntax:

  1. Values: visar att kända variabler färgkodas beroende på om de är satta på den aktuella sidan.
  2. Question Attributes: visar att punktnotation kan nå vissa egenskaper hos frågor
  3. Math: visar att enkla och komplexa beräkningar stöds
  4. TextProcessing: visar några av de tillgängliga textbehandlingsfunktionerna
  5. Dates: visar två av de tillgängliga datumfunktionerna
  6. Conditional: visar användningen av funktionen if(). Valen kan nästlas.
  7. Tailored paragraph: du kan anpassa en rapport helt utifrån tidigare värden
  8. EM processes within strings: visar att ersättningar kan göras inuti textsträngar. Det här exemplet skapar ett anpassat bildnamn.
  9. EM doesn't process curly braces like these: visar att om klammerparenteserna är undantagna, eller om det finns ett blanksteg mellan uttrycket och klammerparenteserna, ignorerar ES uttrycket.


EM-syntax som innehåller fel

Här är exempel på vanliga fel när du skriver ES-uttryck. Observera att verktygstipsen ger ytterligare information.

  1. Inbäddad Javascript där blanksteg efter klammerparentesen har glömts
    • Eftersom "document.write" står direkt efter en klammerparentes tror EM att det är ett uttryck och markerar "document" och "write" med röd ruta, eftersom de är en odefinierad variabel respektive en odefinierad funktion
  2. Okända eller felstavade variabler, funktioner och operatorer
    • Här glömde vi att vi använder variabelnamnet "gender" i stället för "sex", men EM upptäcker felet. Det markerar även '++' med röd ruta, eftersom det inte är en operator som stöds.
  3. Varnar om du använder = i stället för eq, eller utför värdetilldelningar
    • Observera att '=' och '+=' har röd text i stället för svart. Om du håller muspekaren över dem ser du varningar om att du tilldelar ett värde.
  4. Fel antal argument för funktioner
    • if() tar 3 argument, men har fått 4, så om du håller muspekaren över det rödrutade "if" förklaras felet och den syntax som stöds visas
    • sum() tar ett obegränsat antal argument, men vi hade ett avslutande kommatecken före den avslutande parentesen, så det markeras med röd ruta
  5. Parenteser som inte matchar
    • Detta är ett av de vanligaste felen när man skriver uttryck.
    • Här visas två exempel på saknade avslutande parenteser och ett exempel på en avslutande parentes för mycket.
  6. Syntax som inte stöds
    • Om du använder en operator eller ett skiljetecken som ES inte stöder markeras det med röd ruta.
  7. Ogiltiga tilldelningar
    • Vissa variabler är läs- och skrivbara och kan få sina värden ändrade. Andra är skrivskyddade.
    • Om du försöker ändra värdet på en skrivskyddad variabel går det inte. EM markerar försöket med röd ruta.
    • Om du försöker tilldela ett värde till en ekvation eller en textsträng får du också ett fel



"Live"-exempel på syntaxmarkering med aktiva verktygstips

SourcePretty PrintResult
Here is an example of OK syntax with tooltips
Hello {if(gender=='M','Mr.','Mrs.')} {surname}, it is now {date('g:i a',time())}. Do you know where your {sum(numPets,numKids)} children and pets are?
Here is an example of OK syntax with tooltips
Hello if(gender == 'M','Mr.','Mrs.') surname, it is now date('g:i a',time()). Do you know where your sum(numPets,numKids) children and pets are?
Here is an example of OK syntax with tooltips
Hello Mr. Smith, it is now 6:07 am. Do you know where your 3 children and pets are?
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))}
Här är vanliga fel så att du kan se verktygstipsen
Variabler som används innan de deklarerats: notSetYet
Okänd funktion: iff(numPets > numKids,1,2)
Okänd variabel: sum(age,num_pets,numKids)
Fel antal parametrar: sprintf(),if(1,2),date()
Tilldela värden till skrivskyddade variabler:TOKEN:ATTRIBUTE_1+=10,name='Sally'
Obalanserade parenteser: pow(3,4,(pow(3,4),pow(3,4))
Här är vanliga fel så att du kan se verktygstipsen
Variabler som används innan de deklarerats: notSetYet
Okänd funktion: iff(numPets > numKids,1,2)
Okänd variabel: sum(age,num_pets,numKids)
Fel antal parametrar: sprintf(),if(1,2),date()
Tilldela värden till skrivskyddade variabler:TOKEN:ATTRIBUTE_1+=10,name='Sally'
Obalanserade parenteser: 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' ]


Exempel på anpassning

"Bäste {Mr}/{Mrs} Smith..."

Använd funktionen if() för att villkorsstyrt välja om 'Mr.' eller 'Mrs.' ska visas.

Syntaxen är if(test,do_if_true,do_if_false).

# Kod Fråga Typ
1 gender Vilket kön har du? Kön
2 example1 Bäste {if(gender=='M','Mr.','Mrs.')} Smith, ... Lång fritext



Som du ser nedan anpassas "Mr" och "Mrs" efter vad respondenten väljer som svar på frågan "gender".



"Bäste {Mr}/{Mrs} Smith..." i inbjudan via e-post

Du kan använda exemplet ovan i inbjudan via e-post med hjälp av attribut från token-tabellen. Använd funktionen if() för att välja om 'Mr.' eller 'Mrs.' ska användas i e-postmeddelandet.


Syntaxen är "if(test,do_if_true,do_if_false)".

# attribut värde
1 Efternamn Smith
2 E-postadress test@test.com
3 ATTRIBUTE_2 M


Text i inbjudan via e-post:

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

you have been invited to participate in a survey:

https:/...



E-postvy:


Exempel på beräkning / utvärdering

Beräkna utvärderingsvärden under körning och lagra resultaten i enkätdata

Det här exemplet använder alla EM:s funktioner, inklusive relevans, anpassning och frågetypen ekvation.

Det visar också att alla dessa funktioner är JavaScript-aktiverade. Om du har dem på en sida ändras sidan dynamiskt när deltagarna anger och ändrar sina svar.

# Kod Fråga Typ Relevans
1 numKids Hur många barn har du? Numerisk inmatning 1
2 kid1 Hur gammalt är ditt första barn? Numerisk inmatning numKids >= 1
3 kid2 Hur gammalt är ditt andra barn? Numerisk inmatning numKids >= 2
4 kid3 Hur gammalt är ditt tredje barn? Numerisk inmatning numKids >= 3
5 kid4 Hur gammalt är ditt fjärde barn? Numerisk inmatning numKids >= 4
6 sumKidAges {sum(kid1.NAOK,kid2.NAOK,kid3.NAOK,kid4.NAOK)} Ekvation 1
7 kidSummary Du angav att du har {numKids}. {if(numKids==1,'child','children')}. {if(numKids>1,implode(' ','The sum of ages of your first ',min(numKids,4),' kids is ',sumKidAges,'.'),' ')} Textvisning 1


Om du vill ladda ned det här exemplet klickar du på följande länk: Assessments_survey_example.


Nedan hittar du skärmbilder av representativa frågor. Som du ser syntaxmarkerar EM alla fält som kan innehålla anpassning. Här ser du exempel på syntaxmarkering av relevans, frågetypen ekvation och ersättningar i en fråga. Du kan också använda ersättningar i Hjälp, Visning av grupprubrik, Välkomstmeddelande och Avslutande meddelande.

I nästa exempel är relevansen {numKids >= 2), vilket innebär att frågan bara visas om respondenten uppger att hon har minst två barn.



Nedan ser du att varje variabel har suffixet .NAOK. Det beror på hur EM hanterar kaskadrelevans. Utan .NAOK skulle summan bara beräknas om personen uppgav att hon har 4 barn (dvs. om alla variabler är relevanta). Användningen av .NAOK innebär att vi vill beräkna summan även om alla eller några av variablerna är irrelevanta (dvs. "Not Applicable" (NA) är okej (OK)).

Attributet .NAOK påverkar dock bara om variabler skickas vidare till EM. Om respondenten först uppger att hon har 3 barn och anger åldrar för alla, men sedan ändrar sig och uppger att hon har 2, vill vi inte se summan av de 3 angivna värdena, eftersom det tredje barnet inte längre är "inte tillämpligt" i vårt fall:



Varje separat uttryck är färgkodat med en beige bakgrund. Som du ser finns det tre separata uttryck här. Det sista innehåller ett meddelande som bara visas om personen har fler än ett barn.



Här är nu skärmbilder av enkäten i praktiken.

När du först besöker sidan ser du detta. Observera att det står "You have 0 children" i stället för "You have 0 child".



Om jag ändrar värdet för antal barn till 1 ändras visningen direkt till detta, trots att det är samma sida:



Observera nu att grammatiken är korrekt: "You have 1 child".

Nu ändrar jag värdet för antal barn till 3, och visningen ändras direkt till detta.

Observera att du nu ser det villkorade meddelandet längst ned: "The sum of ages of your first 3 kids is 0.".



Nu anger jag åldrar för mina påhittade barn och får denna visning, som summerar deras åldrar:



Återigen uppdateras poängen och visningen direkt när jag anger värdena, så du kan använda detta för att visa en löpande summa av en utvärderingspoäng.


Nu ändrar jag värdet för antal barn till 2. Visningen har ändrats till detta:



Observera att även om jag hade angett värdet 5,5 för det tredje barnet summerar rapporten nu bara värdena för mina två första barn.

Anledningen är att det tredje värdet nu är irrelevant, och irrelevanta värden ignoreras aktivt av EM.

Om jag skulle ändra antalet barn tillbaka till 3 skulle jag se värdet 5,5 som jag angav tidigare. Jag förlorar alltså ingen information som jag anger på sidan.

Om jag däremot navigerar till nästa eller föregående sida nollställs (NULL) alla irrelevanta värden i sessionen och i databasen. Om jag alltså behåller värdet 2, går till nästa sida och sedan kommer tillbaka och anger att jag faktiskt har 3 barn, ser jag inte längre åldern 5,5.


Ange data och se en dynamiskt föränderlig rapport över det som angavs på samma sida

Det här exemplet presenterar anpassningsprocessen (Tailoring) i LimeSurvey.

Om du vill ladda ned det här exemplet klickar du på följande länk: Exempelenkät med dynamiska ändringar.

Så här ser sidan ut från början. Du ser bara frågan om vilken stad du bor i:



När du börjar skriva ett svar startar även anpassningsprocessen:


När du anger svar uppdateras tabellen längst ned på sidan så att den visar svarskoderna och värdena för dina svar.


Vanliga felsökningsexempel

Nästlade om()-satser (villkorslogik)

EM stöder funktionen "if(test,do_if_true,do_if_false)" så att du kan använda villkorslogik eller anpassning. Funktionen kan nästlas för att motsvara "if { } else if { } else { }". EM meddelar dig om parenteserna inte är balanserade (t.ex. om en avslutande högerparentes saknas) eller om du har för många högerparenteser. Försök att räkna parenteserna när du skriver långa nästlade if-satser, spara, kontrollera om det finns syntaxfel och åtgärda dem om några hittas. Låt oss gå igenom exemplet nedan tillsammans.

Frågegruppen som används nedan finns att hämta här: Exempel på enkät med anpassning.lsg


Först, när inget har angetts, ser du bara "Hej."



Om du anger ett namn står det "Hej {name}."



Om du anger en ålder får du ett anpassat meddelande beroende på om du är ett barn i förskoleåldern eller inte:



Skolålder, tonåring eller vuxen. Här är en tonåring som vill vara anonym:



Här är gruppens logikfil. Som du ser i den "if-baserade" frågan finns det nästlade if-satser som bygger på personens ålder.



När du först redigerar den här frågan är det troligt att du någon gång får fel antal parenteser. Så här ser det ut om du har för få:



Om du håller muspekaren över ordet "if", som omges av en röd ruta, står det "Parentheses not balanced". I det här fallet ska det finnas fyra avslutande parenteser efter "already an adult!", men det finns bara tre.

Om du däremot har en högerparentes för mycket omges den av en röd ruta, så här:



När du faktiskt redigerar frågan ser den ut så här: