x

Hovedkapitler

  1. LimeSurvey Cloud vs LimeSurvey CE
  2. LimeSurvey Cloud - Hurtig startguide
  3. LimeSurvey CE - Installation
  4. Sådan designes en god undersøgelse (guide)
  5. Kom godt i gang
  6. LimeSurvey konfiguration
  7. Introduktion - Undersøgelser
  8. Se undersøgelsesindstillinger
  9. Se undersøgelsesmenuen
  10. Se undersøgelsens struktur
  11. Introduktion - Spørgsmål
  12. Introduktion - Spørgegrupper
  13. Introduktion - Undersøgelser - Ledelse
  14. Indstillinger for undersøgelsesværktøjslinje
  15. Flersproget undersøgelse
  16. Hurtig startguide - ExpressionScript
  17. Avancerede egenskaber
  18. Generelle FAQ
  19. Fejlfinding
  20. Løsninger
  21. Licens
  22. Versionsændringslog
  23. Plugins - Avanceret
 Actions

Sådan gør du ExpressionScript

From LimeSurvey Manual

Revision as of 14:30, 2 January 2024 by Maren.fritz (talk | contribs) (Created page with "<center>File:em-tailoring2-q-sumKidAges.jpg</center>")


Oversigt over det, der tidligere er blevet forklaret

Hvis du hidtil har fulgt strukturen i LimeSurvey-manualen, betyder det, at du allerede har LimeSurvey-terminologien. Dernæst dækkede vi udtryk og variabler for at lære at forbedre vores undersøgelser. I den næste del flyttede vi til typerne og betydningerne af syntax highlighting for at lære, hvordan man retter syntaksfejl.

Med disse grundlæggende begreber dækket, kunne vi bevæge os hen imod eksempler og forklare, hvordan udtryk fungerer i LimeSurvey.


Syntaksfremhævning

Følgende skærmbilleder giver eksempler, men viser ikke værdierne af værktøjstip. Et værktøjstip er en informativ boks, som vises, når du holder musen hen over ord med fed farve.

På grund af denne syntaksfremhævning er det meget nemt at komponere korrekte udtryk, selv dem der er komplicerede. Selvom LimeSurvey-teamet planlægger at forsøge at bygge en Expression Builder GUI, kan du bruge den eksisterende syntaks-fremhævning til hurtigt at identificere og rette stavefejl. Du kan også bruge værktøjstip til at validere nøjagtigheden af dine udtryk (f.eks. bekræfte, at du har valgt den eller de ønskede variabler).

I hvert af eksemplerne er der tre kolonner:

  1. Source - dette er den rå tekst, som du ville indtaste i LimeSurvey-spørgsmålsfeltet
  2. Pretty Print - dette er den syntaks-fremhævede ækvivalent af det, du indtastede
    • Bemærk, at udtryk vises med en brun baggrund, men ikke omgivet af krøllede klammeparenteser i denne fremhævning.
    • Da EM understøtter rekursiv substitution, vil visning af krøllede klammeparenteser i fremhævningen forårsage syntaksfejl
  3. Resultat - dette er det output, der genereres, når EM behandler kilden
    • Alt, der kan erstattes korrekt, er
    • Udtryk med fejl vises in-line, med syntaksfremhævning. Fejl er omgivet af en rød-linet boks.


Korrekt syntaks

Nedenfor kan du finde eksempler på korrekt syntaks:

  1. Values: viser, at kendte variabler er farvekodede efter, om de er indstillet på den aktuelle side. Gammel stil INSERTANS:xxxx får sin egen farvekodningsstil
  2. Spørgsmålsattributter: viser, at punktnotation kan få adgang til nogle egenskaber ved spørgsmål
  3. Math: viser, at grundlæggende og komplekse beregninger understøttes
  4. TextProcessing: viser nogle af de tilgængelige tekstbehandlingsfunktioner
  5. Dates: viser to af de tilgængelige datorelaterede funktioner
  6. Conditional: viser brugen af if()-funktionen. Valgene kan indlejres.
  7. Skræddersyet afsnit: du kan fuldstændigt tilpasse en rapport baseret på tidligere værdier
  8. EM processer inden for strenge: viser, at den kan foretage substitutioner inden for strenge. Dette eksempel genererer et skræddersyet billednavn.
  9. EM behandler ikke krøllede klammeparenteser som disse: viser, at hvis de krøllede klammeparenteser er escaped, eller der er et mellemrum mellem udtrykket og krøllede klammeparenteser, ignorerer ES udtrykket.



EM-syntaks indeholdende fejl

Her er eksempler på almindelige fejl ved indtastning af ES-udtryk. Bemærk, at værktøjstippene giver yderligere information.

  1. Inline Javascript, der glemte at tilføje mellemrum efter krøllet klammeparentes
    • Da "document.write" vises lige efter en krøllet klammeparentes, tror EM, at det er et udtryk, og rød- boksene "dokument" og "skriv", da de er henholdsvis udefinerede variable og funktioner
  2. Ukendte/Fejlstavede variabler, funktioner og operatorer
    • Her har vi glemt, at vi bruger variabelnavnet "køn" i stedet for " sex", men EM fanger den fejl. Det røde også '++', da det ikke er en understøttet operator.
  3. Advarer hvis brug = i stedet for eq, eller udfør værditildelinger
    • Bemærk at '=' og '+=' er i rød tekst i stedet for sort. Hvis du holder musen over dem, vil du se advarsler om, at du tildeler en værdi.
  4. Forkert antal argumenter for funktioner
    • if() tager 3 argumenter, men den har fået 4, så svæver over den røde boks vil "if" forklare fejlen og vise den understøttede syntaks
    • sum() tager et ubegrænset antal argumenter, men vi havde et afsluttende komma før den afsluttende parentes, så det er rødt
  5. Umatchede parenteser
    • Dette er en af de mest almindelige fejl ved skrivning af udtryk.
    • Dette viser to eksempler på manglende lukkeparenteser, og et eksempel på at have én for mange lukkeparenteser.
  6. Uunderstøttet syntaks
    • Hvis du bruger en operator eller tegnsætning, som ES ikke understøtter, vil den rød-bokse den.
  7. Ugyldige tildelinger
    • Nogle variable er readWrite og kan få deres værdier ændret. Andre er skrivebeskyttede.
    • Hvis du prøver at ændre værdien af en skrivebeskyttet variabel, kan du ikke. EM vil rød-boks forsøget.
    • Hvis du forsøger at tildele en værdi til en ligning eller en streng, vil du også få en fejl



"Live" eksempler på syntaksfremhævning med aktive værktøjstip

Kilde Smukt print Resultat
Her er et eksempel på OK-syntaks med værktøjstip
Hej {if(gender=='M','Mr.','Mrs.')} {efternavn}, det er nu {date('g:i a',time())}. Ved du, hvor dine {sum(numPets,numKids)} børn og kæledyr er?
Her er et eksempel på OK-syntaks med værktøjstip
Hej , hvis ( køn == 'M' , 'Mr.' , 'Fru' ) efternavn , er det nu dato ( 'g:i a' , tid ()) . Ved du, hvor din sum ( antalPets , numKids ) børn og kæledyr er?
Her er et eksempel på OK-syntaks med værktøjstip
Hej Mr. Smith , klokken er nu 06:07. Ved du hvor dine 3 børn og kæledyr er?
Her er almindelige fejl, så du kan se værktøjstip
Variabler brugt før de erklæres: {notSetYet}
Ukendt funktion: {iff(antalPets>numKids,1,2)}
Ukendt variabel: {sum(age,num_pets,numKids)}
Forkerte # parametre: {sprintf()},{if(1,2)},{date()}
Tildel skrivebeskyttede-vars:{TOKEN:ATTRIBUTE_1+=10},{name='Sally'}
Ubalancerede parenteser: {pow(3,4},{(pow(3,4)},{pow(3,4))}
Her er almindelige fejl, så du kan se værktøjstip
Variabler brugt før de erklæres: notSetYet
Ukendt funktion: iff ( numPets > numBids ,1,2)
Ukendt variabel: sum ( age , num_pets , numKids )
Forkerte # parametre: sprintf () , if (1,2) , dato ()
Tildel skrivebeskyttede-vars: TOKEN:ATTRIBUTE_1 += 10 , navn = 'Sally'
Ubalancerede parenteser: pow (3,4 , ( pow (3,4) , pow (3,4) )
Her er almindelige fejl, så du kan se værktøjstip
Variabler brugt før de erklæres: notSetYet
Ukendt funktion: iff ( numPets > numBids ,1,2)
Ukendt variabel: sum ( age , num_pets , numKids )
Forkerte # parametre: sprintf () , if (1,2) , dato ()
Tildel skrivebeskyttede-vars: TOKEN:ATTRIBUTE_1 += 10 , navn = 'Sally'
Ubalancerede parenteser: pow (3,4 , ( pow (3,4) , pow (3,4) )
Her er noget af den ikke-understøttede syntaks
Ingen understøttelse af '++', '--', '%',';': {min(++age, --age,age % 2);}
Heller ikke '|', '&', '^': {(sum(2 | 3,3 & 4,5 ^ 6)}}
Nor arrays: {navn[2], navn['min']}
Her er noget af den ikke-understøttede syntaks
Ingen understøttelse af '++', '--', '%',';': min ( ++ alder , -- alder , alder % 2) ;
Heller ikke '|', '&', '^': ( sum (2 | 3,3 & 4,5 ^ 6) }
Nor arrays: navn [ 2 ] , navn [ 'min' ]
Her er noget af den ikke-understøttede syntaks
Ingen understøttelse af '++', '--', '%',';': min ( ++ alder , -- alder , alder % 2) ;
Heller ikke '|', '&', '^': ( sum (2 | 3,3 & 4,5 ^ 6) }
Nor arrays: navn [ 2 ] , navn [ 'min' ]


Skræddersyede eksempler (f.eks. forlængelse af {INSERTANS:xxx})

"Kære {Hr.}/{Fru} Smith..."

Brug funktionen if() til at betinget vælge, om der skal vises 'Mr.' eller 'Mrs.'.

Syntaksen er if(test,do_if_true,do_if_false).

# Kode Spørgsmål Type
1 køn Hvad er dit køn? Køn
|eksempel1 Kære {if(gender=='M','Mr.','Mrs.')} Smith, ... Lang fritekst



Som det kan ses nedenfor, er "Hr." og "Fru" skræddersyet til, hvad respondenten vælger som svar på spørgsmålet "køn".



"Kære {Hr.}/{Fru} Smith..." i invitations-e-mail

Du kan bruge eksemplet ovenfor i invitationsmailen ved at bruge attributter fra token-tabellen. Brug funktionen if() til at vælge, om 'Mr.' eller 'Mrs.' skal bruges i e-mailen.


Syntaksen er "if(test,do_if_true,do_if_false)".

# attribut værdi
1 Efternavn Smith
2 E-mailadresse test@test. com
3 ATTRIBUTE_2 M


Tekst i invitationsmail:

Kære {if(ATTRIBUTE_2=='M','Mr','Mrs')} {LASTNAME},

du er blevet inviteret til at deltage i en undersøgelse:

https:/...



e-mail visning:



Beregnings-/vurderingseksempler

Beregn vurderingsværdier ved kørsel og gem resultaterne i undersøgelsesdataene

Dette eksempel bruger alle EM's funktioner, inklusive relevans, skræddersyning og ligningsspørgsmålstypen.

Det viser også, at de alle er JavaScript-aktiverede, så hvis du har disse funktioner på en side, vil det dynamisk ændre sig, efterhånden som folk indstiller og ændrer deres svar.

# Kode Spørgsmål Type Relevans
1 antalBørn Hvor mange børn har du? Numerisk input 1
2 kid1 Hvor gammelt er dit første barn? Numerisk input numBørn >= 1
3 kid2 Hvor gammel er dit andet barn barn? Numerisk input numerisk børn >= 2
4 kid3 Hvor gammelt er dit tredje barn? Numerisk input numBørn >= 3
5 kid4 Hvor gammelt er dit fjerde barn? Numerisk input numBørn >= 4
6 sumKidAges {sum(kid1.NAOK,kid2. NAOK,kid3.NAOK,kid4.NAOK)} Ligning 1
7 kidSummary Du sagde, at du har {numKids}. {if(antalKids==1,'child','children')}. {if(numKids>1,implode(' ','Summen af aldre for dine første ',min(antalKids,4),' børn er ',sumKidAges,'.'),' ')} |1


For at downloade dette eksempel skal du klikke på følgende link: Assessments_survey_example.


Nedenfor kan du finde skærmbilleder af repræsentative spørgsmål. Som du kan se, fremhæver EM-syntaks alle felter, der kan indeholde skræddersyet. Her ser du eksempler på syntaksfremhævende relevans, ligningsspørgsmålstypen og substitutioner i et spørgsmål. Du kan også bruge erstatninger i Hjælp, Gruppehovedvisning, Velkomstbesked og Afslutbesked.

I det næste eksempel, da relevansen er {numKids >= 2), vil spørgsmålet kun være synligt, hvis respondenten rapporterer, at hun har mindst to børn.



Nedenfor kan du se, at hver variabel har .NAOK-suffikset knyttet til sig. Dette er på grund af, hvordan EM understøtter kaskaderelevans. Hvis du ikke havde .NAOK, ville summen kun blive beregnet, hvis personen sagde, hun har 4 børn (f.eks. hvis alle variablerne er relevante). Brugen af .NAOK betyder, at vi ønsker at beregne summen, selvom alle eller nogle af variablerne er irrelevante (f.eks. "Ikke relevant" (NA) er i orden (OK)).

Men .NAOK-attributten påvirker kun, om variabler overføres til EM. Hvis respondenten indledningsvis siger, at hun har 3 børn, og indtaster alder for hver, så ændrer hun mening og siger, at hun har 2, ønsker vi ikke at se summen af de 3 indtastede værdier - da det tredje barn er "ikke relevant" i vores tilfælde længere:



Hvert særskilt udtryk er farvekodet med en solbrun baggrund. Som du kan se, er der tre separate udtryk her. Den sidste indeholder en besked, der kun vises betinget, hvis personen har mere end ét barn.



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:



Now notice that the grammar is correct: "You have 1 child".

Now I change the value for number of children to 3, and the display instantly changes to this.

Notice that you now see the conditional message at the bottom:  "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.


Enter data and see a dynamically changing report of what was entered on the same page

This example presents the Tailoring process within LimeSurvey.

To download this example, click on the following link: Dynamic changes survey example.

Here is what the page looks like initially. You only see the question asking what city you live in:



Once you start to enter an answer, the tailoring process is also starting:


As you enter answers, the table at the bottom of the page is updated to show the answer codes and values of your responses.


Common Debugging Examples

Nested if() Statements (Conditional Logic)

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:



When you are actually editing the question, the question looks like this: