x

Hovedkapitler

  1. LimeSurvey Cloud vs LimeSurvey CE
  2. Hurtigstartveiledning - LimeSurvey 3.0+
  3. Installasjon - LimeSurvey CE
  4. Hvordan lage en god undersøkelse (veiledning)
  5. Komme i gang
  6. Administrere LimeSurvey
  7. Undersøkelser - introduksjon
  8. Innstillinger for undersøkelse
  9. Meny for undersøkelse
  10. Undersøkelsesstruktur
  11. Spørsmål - introduksjon
  12. Spørsmålsgrupper - introduksjon
  13. Undersøkelser - administrasjon
  14. Verktøylinjen for undersøkelsen
  15. Flerspråklig undersøkelse
  16. ExpressionScript-motor – Hurtigstartguide
  17. Ukategoriserte og avanserte funksjoner
  18. Vanlige spørsmål (generelt)
  19. Feilsøking
  20. Løsninger og omveier
  21. Lisens
  22. Versjonsendringer
  23. Tillegg
 Actions

ExpressionScript - Presentasjon

From LimeSurvey Manual

Denne siden kan være maskinoversatt og kan inneholde feil. Vis den engelske originalen · Forbedre denne oversettelsen
This page is a translated version of the page ExpressionScript - Presentation and the translation is 100% complete.


Introduksjon

LimeSurvey bruker Uttrykkskript (Expression Script), som gjør at LimeSurvey kan støtte mer komplekse forgreninger, vurderinger, validering og tilpasning. Det erstatter måten LimeSurvey håndterer erstatninger, betingelser og vurderinger på i bakgrunnen. Det gir også betydelig raskere behandling, siden de fleste databaseavlesninger under kjøring elimineres. Expression Script ble utviklet av Dr. Thomas White (TMSWhite).


Viktige definisjoner

  1. Uttrykk: Alt som er omgitt av krøllparenteser:
    • Så lenge det ikke er mellomrom rett etter startparentesen eller før sluttparentesen.
    • Innholdet i uttrykket evalueres av EM, så det kan inneholde matematiske formler, funksjoner og avansert behandling av tekst og datoer.
  2. Tilpasning (tailoring): Kalles noen ganger «piping». Det er prosessen med å endre tekst betinget:
    • Du har tilgang til alle «erstatningsfelt», deltakerdata og besvarelsesdata.
    • Du får også enklere tilgang til spørsmål, svar og egenskapene deres.
  3. Relevanseligning: Et nytt spørsmålsattributt som styrer synligheten til spørsmålet:
    • Hvis det finnes en relevanseligning, vises spørsmålet bare hvis relevansen evalueres til sann.
    • Internt blir alle array_filter- og array_filter_exclude-kommandoer til relevans på underspørsmålsnivå.
  4. SGQA (slik variabler ble navngitt tidligere):
    • Står for Survey-Group-Question-Answer (undersøkelse-gruppe-spørsmål-svar)
    • SGQA-variabelnavn ser slik ut: 123X5X382X971, og kan ha suffikser for underspørsmål.
    • Disse variabelnavnene er knyttet til de underliggende S/Q/G/A-databasekodene, så de må ofte endres
  5. Ligning-spørsmålstype: En ny spørsmålstype som lagrer beregninger eller rapporter i databasen:
    • Den er som et boilerplate-spørsmål, men innholdet lagres i databasen selv om du har valgt «Skjul alltid dette spørsmålet».
  6. Spørsmålskode: Dette er det foretrukne variabelnavnet for EM:
    • Det kan være et beskrivende navn som angir formålet med spørsmålet, noe som gjør kompleks logikk lettere å lese.
    • Gyldige spørsmålskoder skal IKKE starte med et tall, så når du bruker spørsmålskoden til å nummerere spørsmålene, bruk for eksempel «q1», «q1a» eller «g1q2».
    • Dette blir variabelnavnet hvis du eksporterer data til SPSS eller R. Hvis du gjør statistiske analyser, må du derfor bare opprette unike spørsmålskoder.


Må jeg bruke Uttrykkskript?

Det korte svaret er «nei». Det avhenger imidlertid i stor grad av hvor kompleks undersøkelsen du vil opprette, er.

For eksempel dekker betingelseseditoren noen enkle uttrykk som kan brukes på spørsmålene i undersøkelsen din. Betingelseseditoren er imidlertid begrenset. Derfor brukes Uttrykkskript – det utvider mulighetene for tilpasning.


Kan jeg blande betingelser og relevanseligninger?

Ja. Du kan bruke betingelseseditoren for noen spørsmål og relevanseligninger for andre.

Du kan ikke ha både betingelser og uttrykk satt opp i samme spørsmål! Når en betingelse er satt opp, erstatter den det som står i relevanseligningsfeltet. Dessuten kan feltet for relevanseligning ikke lenger redigeres manuelt.

Likevel finnes det en måte å bruke både uttrykk og betingelser i ett spørsmål. Som nevnt ovenfor erstatter en betingelse relevanseligningsfeltet. Når det er gjort, sjekk hvilken ligning som er opprettet, og kopier den til et tekstredigeringsprogram. Slett den nylig opprettede betingelsen fra betingelseseditoren, og rediger deretter spørsmålet ved å legge til de betingelsesbaserte uttrykkene fra tekstfilen sammen med resten av uttrykkene du vil bruke.


Hvordan bør jeg velge mellom betingelser og relevans?

Her er en liste over fordeler og ulemper ved hver av tilnærmingene:

Tilnærming Fordeler Ulemper
Betingelser 1. Praktisk grafisk grensesnitt for å opprette enkle betingelser.
2. Grensesnittet er godt dokumentert og godt kjent for supportteamet
1. Støtter bare enkle sammenligninger og håndterer ikke «OG»- og «ELLER»-betingelser godt.
2. Kaskaderende betingelser fungerer uberegnelig
3. Tregt – databasekrevende – kan gjøre lange undersøkelser trege.
4. Noen rapporterte problemer med å laste inn betingelser på nytt.
5. Grensesnittet skalerer dårlig når det er dusinvis, hundrevis eller tusenvis av spørsmål.
6. Det kan gå tregt å konvertere papirbaserte undersøkelser siden man må bruke SGQA-navn.
7. Man trenger ofte en programmerer til å kode logikken som kreves for komplekse forgreninger.
Relevanse 1. Støtter svært kompleks logikk, inkludert over 80 funksjoner og matematiske operatorer og tekstoperatorer.
2. Perfekt støtte for kaskaderende logikk.
3. Raskt – ingen ekstra databasekall, støtter undersøkelser med over 1000 spørsmål.
4. Ingen problemer med å laste inn logikk på nytt siden den ikke krever SGQA-koder.
5. Syntaksutheving skalerer til undersøkelser med over 1000 spørsmål.
6. Enkelt og raskt å bruke for grupper som vil digitalisere eksisterende papirbaserte undersøkelser.
7. Støtter enkelt semistrukturerte intervjuer og epidemiologiske undersøkelser uten behov for programmerer.
1. Ikke noe grafisk grensesnitt for enkle betingelser – det bruker syntaksutheving i stedet.


Merk:
  • Vi anbefaler at du bruker det som passer best for dine behov.
  • For en mer detaljert forklaring av EM-funksjonene, klikk på følgende lenke.

Komme i gang

Den beste måten å komme i gang med EM på er å:

Terminologi

Disse ordene brukes ofte for å beskrive mulighetene til EM:

  • Relevansbasert forgrening – hvis et spørsmål er relevant, stilles det, ellers ikke (f.eks. gjøres det usynlig og markeres som NULL i databasen). Du finner relevansfeltene i spørsmålsredigeringspanelet samt i redigeringspanelet for spørsmålsgrupper. Sistnevnte brukes til å bruke et sett med betingelser på en hel gruppe uten å måtte kopiere den samme betingelsen til hvert spørsmål, og/eller kombinere betinget logikk på gruppe- og spørsmålsnivå.
  • Tilpasning – Når du vet hvilke spørsmål som skal stilles, angir tilpasning (noen ganger kalt piping) hvordan spørsmålet skal stilles. Dette lar deg ikke bare støtte enkel erstatning (som {TOKEN:FIRSTNAME}), men også bøying av verb og substantiv basert på kjønn eller antall for emnene dine. Det lar deg også endre meldingen du gir til en respondent basert på om de har besvart (eller hvordan de har besvart) andre spørsmål.
  • Ligninger – EM legger til en ny spørsmålstype kalt Ligning som lagrer resultatet av et uttrykk. Ligningsresultatene beregnes og skrives til databasen, selv om du skjuler dem på siden. De brukes derfor til skjulte poengberegninger, navigering basert på komplekse ligninger, vurderinger og rapporter som genereres og lagres i databasen.


Relevans og kaskaderende relevans

Alle spørsmålstyper har nå et relevansalternativ som styrer om spørsmålet vises eller ikke. EM behandler hver relevanseligning i den rekkefølgen de forekommer i undersøkelsen. Hvis uttrykket er sant (eller mangler – for å støtte eldre undersøkelser), vises spørsmålet. Hvis det ikke er relevant, skjules spørsmålet, og verdien settes til NULL i databasen. Hvis det ikke finnes noen relevante spørsmål i en gruppe, hoppes hele gruppen over.

Dessuten, hvis en av variablene i et uttrykk er irrelevant, evalueres uttrykket alltid til usant. Dette muliggjør kaskaderende relevans, slik at du slipper å skrive svært lange relevanseligninger for hvert spørsmål.

Si at du har fem spørsmål Q1–Q5, og du bare vil vise Q2 hvis Q1 ble besvart, og Q3 hvis Q2 ble besvart osv. Relevanseligningene kan da være:

Spørsmålskode Relevanse Spørsmål
Q1 1 Hva heter du?
Q2 Q1 {Q1}, hvor gammel er du?
Q3 Q2 Du er altså {Q2} år gammel. Er du gift?
Q4 Q3 == "Y" {Q1}, hvor lenge har du vært gift?
Q5 Q4 Hvor mange barn har du, {Q1}?


Relevans på gruppenivå

ExpressionScript støtter også relevans på gruppenivå. Dette gjør det enklere å implementere looping. Si at du vil samle inn informasjon om opptil 10 enheter (for eksempel produkter eller personer i en husholdning), der du først avgjør hvor mange enheter som trenger oppfølging (for eksempel ved å spørre hvor mange personer som bor i husholdningen, eller la folk krysse av for hvilke produkter de liker fra en lang liste). Når du vet hvor mange enheter som trenger oppfølging, kan du bruke relevans på gruppenivå som {count >= 1}, {count >=2}, ... {count >= 10} for hver av de 10 gruppene med oppfølgingsspørsmål. Innenfor hver gruppe kan du ha betinget logikk på spørsmålsnivå (f.eks. kjønns- eller aldersspesifikke oppfølgingsspørsmål for hvert emne). Relevanseligningene på spørsmåls- og gruppenivå kombineres med OG for å avgjøre hva som skal vises.

For å se et slikt eksempel, importer følgende undersøkelse: Eksempel på folketellingsundersøkelse.

Skjermbildet nedenfor viser at gruppen Person 1 vises (eller er relevant) hvis respondenten bor sammen med minst én annen person:



Tilpasning/piping

Alt innenfor krøllparenteser behandles nå som et uttrykk (med ett unntak beskrevet nedenfor). Uttrykk har tilgang til alle LimeReplacementFields og variabler (via flere aliaser), alle vanlige ligningsoperatorer (matematiske, logiske og sammenligninger) og til dusinvis av funksjoner (som til og med fungerer dynamisk på klientsiden).

Ved å bruke disse ligningene kan du for eksempel:

  1. Vise tilpassede meldinger til respondentene på betingelser basert på tidligere besvarelser;
  2. Opprette vurderinger og vise vurderingsresultater (eller forgrene på betingelser eller vise meldinger) basert på disse resultatene, uten å bruke selve vurderingsmodulen;
  3. Bøye verb og substantiv i spørsmål, svar og rapporter;
  4. Vise sammendrag av besvarelser før siden «Vis svarene dine» på slutten av undersøkelsen.


Ligninger

Det finnes en ny spørsmålstype kalt Ligning. Tenk på den som en spørsmålstype Tekstvisning, bortsett fra at den lagrer verdien av det som vises i databasen. Hvis spørsmålsteksten i et Ligning-spørsmål inneholder en vurderingsberegning, lagres denne verdien i databasen i en variabel som kan vises i offentlig eller privat statistikk.


Syntaks

Alt som står innenfor krøllparenteser regnes nå som et uttrykk (med ett unntak: det må ikke være mellomrom først eller sist – dette er nødvendig for at ExpressionScript ikke skal prøve å behandle innebygd JavaScript).

Merk at uttrykk gjerne kan gå over flere linjer, så lenge det ikke er mellomrom etter den åpnende krøllparentesen eller før den avsluttende krøllparentesen. Dette er spesielt nyttig for nestede «if()»-setninger som denne:

{if(is_empty(PFTotals),
 '',
 if(PFTotals >= -5 && PFTotals <= -4,
   'Very Soft',
   if(PFTotals >= -3 && PFTotals <= -2,
     'Soft',
     if(PFTotals == -1,
       'Somewhat Soft',
       if(PFTotals == 0,
         'Moderate',
         if(PFTotals == 1,
           'Somewhat Hard',
           if(PFTotals >= 2 && PFTotals <= 3,
             'Hard',
             if(PFTotals >= 4 && PFTotals <= 5,
               'Very Hard',
               ''
             )
           )
         )
       )
     )
   )
 )
)}

ExpressionScript støtter følgende syntaks:

  • Alle standard matematiske operatorer (f.eks. +,-,*,/,!);
  • Alle standard sammenligningsoperatorer (f.eks. <,<=,==,!=,>,>=, pluss deres ekvivalenter: lt, le, eq, ne, gt, ge);
  • Parenteser (slik at du kan gruppere deluttrykk);
  • Betingede operatorer (f.eks. &&,| | og deres ekvivalenter: and, or);
  • Tekststrenger i enkle og doble anførselstegn (som hver kan inneholde strenger med den andre typen anførselstegn);
  • Kommaoperator (slik at du kan ha en liste med uttrykk og bare returnere det siste resultatet);
  • Tilordningsoperator (=);
  • Forhåndsdefinerte variabler (for å referere til spørsmål, spørsmålsattributter og besvarelser) – f.eks. SGQA-kodene;
  • Forhåndsdefinerte funksjoner (det finnes allerede over 80, og det er enkelt å legge til flere).


Operatorer

EM-syntaksen følger vanlig operatorrekkefølge:

Nivå Operator(er) Beskrivelse
1 () parenteser for gruppering eller kall av funksjoner
2 ! - + unære operatorer: ikke, negasjon, unært pluss
3 * / gange, dele
4 + - pluss, minus
5 < <= > >= lt le gt ge relative sammenligninger
6 == != eq ne likhetssammenligninger
7 and logisk OG
8 or logisk ELLER
9 = tilordningsoperator
10 , kommaoperator
For å sikre samsvar mellom JavaScript og PHP utfører plussoperatoren (+) addisjon hvis begge operandene er numeriske, men sammenslåing hvis begge delene er ikke-numeriske strenger. Vi anbefaler likevel å bruke funksjonen «join()» for sammenslåing, siden det gjør hensikten tydeligere. Det unngår også uventede resultater hvis du forventet strenger, men fikk tall i stedet (eller omvendt).

Advarsel om avvik mellom tall og tekst og alfabetisk/numerisk sammenligning

Når du vil sammenligne verdier med relative sammenligninger eller likhetssammenligninger, må du være oppmerksom på avvik. En verdi oppgitt av brukeren (eller gitt via en svarkode) kan brukes som tall hvis den tydelig er et tall. Hvis du setter en av verdiene i ", utføres en tekst-/strengsammenligning. Hvis du vil sammenligne som tall, må du aldri sette et tall i ".

For eksempel er Q0.NAOK > "50" sant hvis Q0.NAOK er et numerisk spørsmål med verdien 9. Dette er fordi operatoren > antar at det er en alfabetisk sammenligning og ikke en numerisk.

For å sikre at du sammenligner heltallsverdier kan du bruke intval(Q0.NAOK) > 50. Husk at hvis Q0.NAOK ikke er et tall (tom eller en streng), er intval(Q0.NAOK) === 0. For å sammenligne strengverdier ("A" < "B") bruker du strcmp direkte: strcmp(Q0.NAOK,"B") eller strcmp(Q0.NAOK,"A5").

Advarsel om bruk av tilordningsoperatoren (=)

Du bør unngå tilordningsoperatorer med mindre det er helt nødvendig, siden de kan gi uventede bivirkninger. Hvis du for eksempel endrer verdien av en tidligere besvarelse, beregnes ikke den kaskaderende relevans- og valideringslogikken mellom dette spørsmålet og det nåværende spørsmålet på nytt, slik at du kan ende opp med internt inkonsistente data (f.eks. spørsmål som forblir besvart, men burde vært satt til NULL, eller spørsmål som hoppes over, men burde vært besvart). Hvis du vil tilordne en verdi til en variabel, bør du generelt opprette en spørsmålstype Ligning og bruke et uttrykk til å sette verdien. Likevel er det noen sjeldne tilfeller der man virkelig trenger denne operatoren, så vi har gjort den tilgjengelig.

For å advare deg om denne operatoren vises den i rød skrift i syntaksligningene (slik at du ikke forveksler den med «==»).



Bruk av tilordningsoperatoren

De viktigste grunnene til at du kan ønske å bruke tilordningsoperatoren er:

  • Du må angi standardverdien via en ligning for et spørsmål som ikke godtar standardverdier (som listespørsmål med radioknapper, der brukergrensesnittet lar deg velge ett av svaralternativene, men ikke lar deg skrive inn en ligning). Vær imidlertid forsiktig, siden LimeSurvey ikke kan validere at ligningen din gir ett av de tillatte svarene for dette spørsmålet;
  • Du må tvinge frem en endring av besvarelsen på et tidligere spørsmål basert på en senere besvarelse;
  • osv ...


  Obs : Tilordningen utføres kun i PHP. Dette betyr at verdien ikke oppdateres på samme side, men først når brukeren går til neste side. Vær derfor oppmerksom når tilordningsoperatoren brukes på samme side som andre uttrykk.



Du kan bruke hele uttrykksbehandlingssystemet til dette formålet. Det er best å bruke en Ligning til dette.

Noen eksempler:

  • Sett svaret på et spørsmål med kort tekst til små bokstaver : {QCODE=strtolower(QCODE.NAOK)};
  • Sett et forhåndsvalg for en matrisespørsmålstype ved starten av en undersøkelse : {Q1_SQ1=(is_empty(Q1_SQ1.NAOK),"A99",Q1_SQ1.NAOK)};
  • Sett et forhåndsvalg for en matrisespørsmålstype med tekst ved starten av en undersøkelse : {Q1_SQY1_SQX1 = (is_empty(Q1_SQY1_SQX1.NAOK),"Inserted answer", Q1_SQY1_SQX1.NAOK)};
  • Sett et svar med betingelse : {QCODE=if(YesNo="Y","A1","")}.

XSS-sikkerhet

Når XSS er aktivert, kan enkelte deler av uttrykksbehandlingssystemet ikke brukes:

  • starte en HTML-tag i ett uttrykk, men avslutte den i et annet uttrykk;
  • bruke et komplekst uttrykk i en URL.


Merk at XSS er aktivert som standard i alle LimeSurvey-installasjoner.


Eksempler og løsninger:

  • {if( 1 ,"<strong>","")}information{if( 1 ,"</strong>","")} fungerer ikke med XSS-sikkerhet. Her kan du bruke {if(1,"<strong>information</strong>","information")};
  • <a href="/script.php?value={if(QCODE == "Y","yes","no")}">next</a>. Her kan du bruke et ligningsspørsmål, fordi det er tillatt å bruke en hel spørsmålskode: <a href="/script.php?value={EQUATION.NAOK}">next</a>.


Tilgang til variabler

ExpressionScript gir skrivebeskyttet tilgang til alle variablene du kan trenge. For bakoverkompatibilitet gir det tilgang til følgende:

  • TOKEN:xxx - verdien av en TOKEN (f.eks. TOKEN:FIRSTNAME, TOKEN:ATTRIBUTE_5) (gjelder kun for undersøkelser som ikke er anonyme).
  • Alle {XXX}-verdier som brukes av maler.
  • I spørsmålstekst kan du bruke {QID}, som erstattes av spørsmåls-ID, og {SGQ}, som erstattes av SGQA-en til spørsmålet.
  • {SAVEDID} for gjeldende svar-ID

I tillegg lar ExpressionScript deg referere til variabler med spørsmålskoden (kolonnen 'title' i spørsmålstabellen i databasen). Dette er også variabeletiketten som brukes når du eksporterer data til SPSS, R eller SAS. Hvis du for eksempel har spørsmål om navn, alder og kjønn, kan du kalle variablene name, age og gender i stedet for 12345X13X22, 12345X13X23 og 12345X13X24. Dette gjør ligninger enklere for alle å lese og validere logikken i, og det blir mulig å flytte rundt på spørsmål uten å holde styr på gruppe- eller spørsmålsnumre.

Viktig: Det er tryggere å referere til variabler som forekommer på foregående sider eller i foregående spørsmål.

Videre lar ExpressionScript deg få tilgang til mange egenskaper ved spørsmålet:


Syntaks Betydning Eksempel Eksempelresultat
Qcode et alias for Qcode.code {implode(',',name,gender)} 'Tom','M'
Qcode.code den valgte svarkoden for spørsmålet hvis det er relevant (ellers tomt), eller tekstverdien hvis det ikke er et kodet spørsmål {implode(',',name.code,gender.code)} 'Tom','M'
Qcode.NAOK samme som Qcode - se omtalen av NAOK {gender.NAOK} 'M'
Qcode.value vurderingsverdien for spørsmålet hvis det er relevant (ellers tomt), eller tekstverdien hvis det ikke er et kodet spørsmål {gender.value} '1'
Qcode.valueNAOK samme som Qcode.value - se omtalen av NAOK {gender.valueNAOK} '1'
Qcode.shown visningsverdien for spørsmålet {implode(',',name.shown,gender.shown)} 'Tom','Male'
Qcode.question teksten i spørsmålet {gender.question} 'What is your gender?'
Qcode.mandatory om spørsmålet er obligatorisk (Y/N) {gender.mandatory} 'N'
Qcode.qid det interne spørsmålsnummeret (ikke det sekvensielle nummeret) {gender.qid} 337
Qcode.type spørsmålstypen {gender.type} 'G'
Qcode.jsName det korrekte JavaScript-navnet for spørsmålet, uavhengig av om det er deklarert på denne siden eller ikke {gender.jsName} 'java1827X3X337'
Qcode.gid det interne gruppenummeret (ikke det sekvensielle nummeret) {gender.gid} 3
Qcode.qseq det sekvensielle nummeret til spørsmålet, med start fra 0 {gender.qseq} 5
Qcode.gseq det sekvensielle nummeret til gruppen, med start fra 0 {gender.gseq} 1
Qcode.relevanceStatus om spørsmålet for øyeblikket er relevant (0 eller 1) {gender.relevanceStatus} 1
Qcode.relevance relevansligningen på spørsmålsnivå {gender.relevance} '!is_empty(name)'
Qcode.grelevance relevansligningen på gruppenivå {gender.grelevance} 'num_children >= 5'
Qcode.sgqa SGQA-verdien for dette spørsmålet {gender.sgqa} '1827X3X337'


Problem med HTML-skriveprogrammet

Hvis du bruker HTML-skriveprogrammet, erstattes noen tegn med HTML-entiteter.

  • & med &amp;
  • < med &lt;
  • > med &gt;

Hvis du bruker HTML-skriveprogrammet, må du bruke:

  • and for &
  • lt for <
  • le for <=
  • gt for >
  • ge for >=


Det anbefales å fjerne HTML som vises i uttrykket ditt. Hvis du bruker LimeSurveys HTML-skriveprogram, klikker du på «Source»-knappen (øverst til venstre i skriveprogrammet) og sletter alle tegn som ikke er knyttet til uttrykket ditt (f.eks.

,
og så videre).

Navngiving av Qcode-variabler

Her er detaljer om hvordan du bygger en Qcode (og får tilgang til noen egenskaper) for hver spørsmålstype. Generelt bygges Qcodes slik:

 QuestionCode . '_' . SubQuestionID . '_' . ScaleId

For comment og other er de tilsvarende spørsmålskodene henholdsvis QuestionCode_comment og QuestionCode_other.

Type Beskrivelse Kode Underspørsmål Svaralternativer Skalaer Svarkode Vist svar Relevans
5 5-punkts valg, radioknapper Q1 1-5 {Q1} {Q1.shown} {Q1==3}
B Matrise (10 poengsvalg), radioknapper Q2 L1-L6 1-10 {Q2_L2} {Q2_L2.shown} {Q2_L2==7}
A Matrise (5-poengsvalg), radioknapper Q3 1-5 1-5 {Q3_1} {Q3_1.shown} {Q3_1>=3}
1 Matrise (fleksible etiketter), dobbel skala Q4 sq1-sq5 0:a1-a3 1:b1-b3 {Q4_sq1_0} {Q4_sq1_1.shown} {Q4_sq1_1=='b2'}
H Matrise (fleksibel) - kolonneformat Q5 1-5 s,m,t {Q5_1} {Q5_1.shown} {Q5_1=='s'}
F Matrise (fleksibel) - radformat Q6 F1-F5 1-5 {Q6_F3} {Q6_F3.shown} {Q6_F3==4}
E Matrise (øk/uendret/reduser), radioknapper Q7 1-7 I,S,D {Q7_4} {Q7_4.shown} {Q7_4=='D'}
: Matrise (multifleksibel) 1 til 10 Q8 ls1,todo,ls2 min,max,avg {Q8_ls1_max} {Q8_ls2_avg.shown} {Q8_ls2_min==7}
; Matrise (multifleksibel) tekst Q9 hp,st,sw 1st,2nd,3rd {Q9_hp_3rd} {Q9_hp_3rd.shown} {Q9_hp_3rd=='Peter'}
C Matrise (ja/usikker/nei), radioknapper Q10 1-5 Y,N,U {Q10_1} {Q10_1.shown} {Q10_3=='Y'}
X Tekstvisningsspørsmål Q11 {Q11.shown}
D Dato Q12 {Q12} {Q12.shown}
* Ligning Q13 {Q13} {Q13.shown} {Q13>5}
~124~ Filopplasting (registrerer antall opplastede filer) Q14 {Q14} {Q14>0}
G Kjønn, rullegardinliste Q15 M,F {Q15} {Q15.shown} {Q15=='M'}
U Ekstra lang fritekst Q16 {Q16} {Q16.shown} {strlen(Q16)>100}
I Språkspørsmål Q17 {Q17} {Q17.shown} {Q17=='en'}
! Liste - nedtrekksmeny Q18 1-5 {Q18} {Q18.shown} {Q18==3}
L Liste, rullegardinliste/radioknapper Q19 A-Z {Q19} {Q19.shown} {Q19=='X'}
O Liste med kommentar, rullegardinliste/radioknapper + tekstområde Q20 A-F {Q20},{Q20comment} {Q20.shown} {Q20=='B'}
T Lang fritekst Q21 {Q21} {Q21.shown} {strstr(Q21,'hello')>0}
M Flervalg, avkryssingsboks Q22 A-F, other {Q22_E}, {Q22_other} {Q22_E.shown}, {Q22_other.shown} {Q22_E=='Y'}
P Flervalg med kommentarer, avkryssingsboks + tekst Q23 A-F {Q23_D}, {Q23_Dcomment} {Q23_D.shown} {!is_empty(Q23)}
K Flere numeriske spørsmål Q24 self,mom,dad {Q24_self} {Q24_self.shown} {Q24_self>30}
Q Flere korte tekstfelt Q25 A-F {Q25_B} {Q25_B.shown} {substr(Q25_B,1,1)=='Q'}
N Numerisk spørsmålstype Q26 {Q26} {Q26.shown} {Q26 > 30}
R Rangeringsstil Q27 1-4 {Q27_1} {Q27_1.shown} {Q27_1==3}
S Kort fritekst Q28 {Q28} {Q28.shown} {Q28=='mine'}
Y Ja/nei, radioknapper Q29 {Q29} {Q29.shown} {Q29=='Y'}


Bruk av NAOK

NAOK --> «Not Applicable» (NA) er greit (OK)


Bruk av NAOK betyr at alle eller noen av variablene er irrelevante (dvs. «Not Applicable» (NA) er greit (OK)).

For eksempel: count(Q1_SQ1,Q1_SQ2,Q1_SQ3,Q1_SQ4) gir alltid en tom streng hvis ett underspørsmål i Q1 er filtrert bort. For å telle antall avkryssede underspørsmål i et slikt spørsmål kan du bruke count(Q1_SQ1.NAOK,Q1_SQ2.NAOK,Q1_SQ3.NAOK,Q1_SQ4.NAOK). Hvis underspørsmålet er skjult, returnerer EM en tom streng.

Uten NAOK returnerer EM alltid en tom streng (det samme som å returnere false) hvis ett spørsmål eller ett underspørsmål er skjult.

.shown bruker alltid NAOK-systemet (tom streng hvis skjult), men hvis du trenger svarkoden, er det alltid en god idé å legge til .NAOK etter spørsmålskoden (med mindre du trenger noe annet og vet hva du gjør).

Mer informasjon finner du i underkapittelet Overstyring av kaskaderende betingelser.


De reserverte variablene «this», «self» og «that»

Ofte vil du evaluere alle deler av et spørsmål, for eksempel telle hvor mange underspørsmål som er besvart eller summere poengsummer. Andre ganger vil du bare behandle bestemte rader eller kolonner i et spørsmål (for eksempel hente rad- eller kolonnesummer og lagre dem i databasen). Disse reserverte variablene gjør dette forholdsvis enkelt.


Variabelen «this»

Variabelen «this» brukes utelukkende i alternativene «Valideringsligning for hele spørsmålet» og «Valideringsligning for underspørsmål» (sistnevnte er ikke mulig fra det grafiske brukergrensesnittet). Den utvides til variabelnavnene til hver av cellene i disse spørsmålene. Hvis du for eksempel vil sikre at hver verdi er større enn tre, setter du «Valideringsligning for underspørsmål» til (this > 3).


Variabelen «self»

Variablene «self» og «that» er kraftigere og fungerer som makroer som utvides før ligninger behandles. Syntaksalternativene for variabelen «self» er:

  • self
  • self.suffix
  • self.sub-selector
  • self.sub-selector.suffix
  1. suffiks er et av de vanlige Qcode-suffiksene (f.eks. NAOK, value, shown)
  1. sub-selector kan være ett av følgende:
  • comments - kun underspørsmål som er kommentarer (f.eks. flervalg med kommentarer og liste med kommentar);
  • nocomments - kun underspørsmål som ikke er kommentarer;
  • sq_X - der X er en rad- eller kolonneidentifikator. Kun underspørsmål som samsvarer med mønsteret X blir valgt. Merk at søket gjøres på den fullstendige kodeidentifikatoren, og at sq_X samsvarer med og inkluderer underspørsmålene nX, X og Xn (f.eks. hvis du bruker sq_1, blir underspørsmålene a1, 1a, 1, 11 eller 001 inkludert). Vær oppmerksom på spørsmålstypen med to skalaer, der underspørsmålskodene er QCODE_SQCODE_1 og QCODE_SQCODE_1, og på rangeringsspørsmål, der underspørsmålskodene er QCODE_1, QCODE_2 ....

Eksempler:

  • Er noen del av et spørsmål besvart? -> {count(self.NAOK)>0}
  • Hva er vurderingspoengsummen for dette spørsmålet? -> {sum(self.value)}

Du kan også bruke disse til å hente rad- og kolonnesummer. Anta at du har en matrise med tall med radene A-E og kolonnene 1-5.

  • Hva er totalsummen? -> {sum(self.NAOK)}
  • Hva er summen for rad B? -> {sum(self.sq_B.NAOK)}
  • Hva er summen for kolonne 3? -> {sum(self.sq_3.NAOK)}


Variabelen «that»

Variabelen "that" er lik variabelen "self", men lar deg referere til andre spørsmål. Syntaksen er:

  • that.qname
  • that.qname.suffiks
  • that.qname.sub-selector
  • that.qname.sub-selector.suffiks

qname er spørsmålsnavnet uten noen underspørsmålsutvidelser. La oss si at vi oppretter et spørsmål «q1», der «q1» også er dets qname.

Eksempler:

  • Er noen del av spørsmål q1 besvart? -> {count(that.q1.NAOK)>0}
  • Hva er vurderingspoengsummen for q2? -> {sum(that.q2.NAOK)}
  • Hva er totalsummen for q3? -> {sum(that.q3.NAOK)}
  • Hva er summen for rad C i q4? -> {sum(that.q4.sq_C.NAOK)}
  • Hva er summen for kolonne 2 i q4? -> {sum(that.q4.sq_2.NAOK)}

Variablene «self» og «that» kan brukes i all relevans, validering og tilpasning.

Én ting å være oppmerksom på er at når du bruker funksjonen Vis logikkfil, vises den utvidede verdien av «self» og «that». Dette lar deg se den faktiske ligningen som genereres, slik at du (og EM) kan validere om variablene finnes. Dette kan virke forvirrende, siden ligningene kan bli ganske lange. Hvis du redigerer spørsmålet, vil du imidlertid se den opprinnelige ligningen med «self» og/eller «that».

Du bør ikke bruke disse variablene hvis du
  • vil navngi hver variabel som brukes i en ligning eksplisitt, eller
  • bruker variabler som ikke har underspørsmål (f.eks. spørsmål med ett svar). I slike tilfeller er det overkill å sette «that» foran en variabel, og du risikerer uventede resultater.

Tilgang til funksjoner

ExpressionScript gir tilgang til matematiske funksjoner, tekstfunksjoner og brukerdefinerte funksjoner, som vist nedenfor. Det finnes PHP- og JavaScript-ekvivalenter for disse funksjonene, slik at de fungerer likt på serversiden (PHP) og klientsiden (JavaScript). Det er enkelt å legge til nye funksjoner.


Implementerte funksjoner

Følgende funksjoner er tilgjengelige for øyeblikket:

Funksjon Betydning Syntaks
abs Absolutt verdi number abs(number)
acos Arc cosinus number acos(number)
addslashes Setter inn omvendt skråstrek foran spesialtegn i en tekststreng string addslashes(string)
asin Arc sinus number asin(number)
atan Arc tangens number atan(number)
atan2 Arc tangent av to variabler number atan2(number, number)
ceil Avrund brøker opp number ceil(number)
checkdate Returnerer "sann" (1) hvis datoen er gyldig i den gregorianske kalenderen bool checkdate(month,day,year)
convert_value Konverterer en numerisk verdi ved hjelp av en inndatatabell og en utdatatabell med numeriske verdier number convert_value(fValue, iStrict, sTranslateFromList, sTranslateToList)
cos Cosinus number cos(number)
count Teller antall besvarte (ikke-tomme) spørsmål i listen number count(arg1, arg12, ..., argN)
countif Teller antall besvarte spørsmål i listen som er lik det første argumentet number countif(matches, arg1, arg2, ... argN)
countifop Teller antall besvarte spørsmål i listen som oppfyller kriteriet (arg op value) number countifop(op, value, arg1, arg2, ... argN)
date Formatere lokaldato/-tid string date(format [, timestamp=time()])
exp Regner ut eksponenten til e number exp(number)
fixnum Viser tall med komma som desimaltegn, om nødvendig string fixnum(number)
floor Avrund brøker ned number floor(number)
gmdate Formatere GMT-dato/-tid string gmdate(format [, timestamp=time()])
html_entity_decode Konverterer alle HTML-entiteter til de tilsvarende tegnene (bruker alltid ENT_QUOTES og UTF-8) string html_entity_decode(string)
htmlentities Konverterer alle aktuelle tegn til HTML-entiteter (bruker alltid ENT_QUOTES og UTF-8) string htmlentities(string)
expr_mgr_htmlspecialchars Konverterer spesialtegn til HTML-entiteter (bruker alltid ENT_QUOTES og UTF-8) string htmlspecialchars(string)
expr_mgr_htmlspecialchars_decode Konverterer spesielle HTML-entiteter tilbake til tegn (bruker alltid ENT_QUOTES og UTF-8) string htmlspecialchars_decode(string)
idate Formater lokal tid/dato som heltall (integer) string idate(string [, timestamp=time()])
if Excel-lignende if(test,result_if_true,result_if_false) if(test,result_if_true,result_if_false)
implode Sett sammen matriseelementer med en tekststreng string implode(glue,arg1,arg2,...,argN)
intval Få heltall-verdien av et variabel int intval(number [, base=10])
is_empty Avgjør om en variabel anses som tom bool is_empty(var)
is_float Finner ut om typen til en variabel er flyttall bool is_float(var)
is_int Finner ut om typen til en variabel er heltall bool is_int(var)
is_nan Finner ut om verdien er ikke et nummer bool is_nan(var)
is_null Finner ut om en variabel er NULL bool is_null(var)
is_numeric Finner ut om en variabel er et tall eller en numerisk tekststreng bool is_numeric(var)
is_string Finner ut om typen til en variabel er tekststreng bool is_string(var)
join (New in 2.0 build 130129) Slå sammen elementer til en ny tekststreng join(arg1, arg2, ... argN)
list Returnerer en kommadelt liste med ikke-tomme verdier string list(arg1, arg2, ... argN)
listifop (New in 3.16.1 ) Returnerer en liste, adskilt av «glue», med den angitte egenskapen (retProp) fra spørsmål i listen som oppfyller kriteriet (cmpProp op value) string listifop(cmpProp, op, value, retProp, glue, sgqa1, sgqa2, ... sgqaN)
ltrim Fjerner mellomrom (eller andre tegn) fra begynnelsen av en tekststreng string ltrim(string [, charlist])
max Finn den høyeste verdi number max(arg1, arg2, ... argN)
min Finn den laveste verdi number min(arg1, arg2, ... argN)
mktime Henter UNIX timestamp for en dato (alle seks argumentene er valgfrie) number mktime([hour [, minute [, second [, month [, day [, year ]]]]]])
modulo-function Modulo-funksjonen støttes ikke ennå. Du kan bruke funksjonen floor() i stedet floor(x/y)==(x/y)
nl2br Setter inn HTML-linjeskift foran alle linjeskift i en tekststreng string nl2br(string)
number_format Formater et nummer med grupperte tusener string number_format(number)
pi Få verdien av pi number pi()
pow Eksponentiell uttrykk number pow(base, exp)
quoted_printable_decode Konverterer en quoted-printable-tekststreng til en 8-bits tekststreng string quoted_printable_decode(string)
quoted_printable_encode Konverterer en 8-bits tekststreng til en quoted-printable-tekststreng string quoted_printable_encode(string)
quotemeta Sett metategn i anførselstegn string quotemeta(string)
rand Generer tilfeldig heltall, se dette eksempelet int rand() OR int rand(min, max)
regexMatch sammenligner en tekststreng med et regulært uttrykk bool regexMatch(pattern,input)
round Avrunder tall til valgfri presisjon number round(val [, precision])
rtrim Fjerner mellomrom (eller andre tegn) fra slutten av en tekststreng string rtrim(string [, charlist])
sin Sinus number sin(arg)
sprintf Returnerer en formatert tekststreng string sprintf(format, arg1, arg2, ... argN)
sqrt Kvadratrot number sqrt(arg)
stddev Regner ut utvalgets standardavvik for listen med tall number stddev(arg1, arg2, ... argN)
str_pad Fyller en tekststreng til en bestemt lengde med en annen tekststreng string str_pad(input, pad_length [, pad_string])
str_repeat Repeter en streng string str_repeat(input, multiplier)
str_replace Erstatter alle forekomster av søketeksten med erstatningsteksten string str_replace(search, replace, subject)
strcasecmp Sikker binærsammenligning av tekststrenger som ikke tar hensyn til små eller store bokstaver int strcasecmp(str1, str2)
strcmp Binærsikker sammenligning av tekststrenger int strcmp(str1, str2)
strip_tags Fjerne HTML og PHP tags fra en strenge string strip_tags(str, allowable_tags)
stripos Finner posisjonen til første forekomst av en unicode-tekststreng uten hensyn til store og små bokstaver (starter på 0, returnerer «false» hvis ikke funnet) int stripos(haystack, needle [, offset=0])
stripslashes Tar bort anførselstegn fra en tekststreng string stripslashes(string)
stristr strstr uten hensyn til store og små bokstaver string stristr(haystack, needle [, before_needle=false])
strlen Få lengde på strenge int strlen(string)
strpos Finner posisjonen til første forekomst av en unicode-tekststreng (starter på 0, returnerer «false» hvis ikke funnet) int strpos(haystack, needle [ offset=0])
strrev Reverser en tekststreng string strrev(string)
strstr Første forekomsten av en tekststreng string strstr(haystack, needle[, before_needle=false])
strtolower Gjør en tekststreng om til små bokstaver string strtolower(string)
strtotime Tolker omtrent enhver engelsk tekstlig beskrivelse av dato og tid og gjør den om til et Unix timestamp int strtotime(string)
strtoupper Gjør en tekststreng om til store bokstaver string strtoupper(string)
substr Returnerer en del av en unicode-tekststreng string substr(string, start [, length])
sum Regne ut summen av alle verdier i en matrise number sum(arg1, arg2, ... argN)
sumifop Summerer verdiene av besvarte spørsmål i listen som oppfyller kriteriet (arg op value) number sumifop(op, value, arg1, arg2, ... argN)
tan Tangens number tan(arg)
time Returner gjeldende UNIX timestamp number time()
trim Fjerner mellomrom (eller andre tegn) fra begynnelsen og slutten av en tekststreng string trim(string [, charlist])
ucwords Gjør første tegn i hvert ord i en tekststreng til stor bokstav string ucwords(string)
unique Returnerer "sann" hvis alle ikke-tomme besvarelser er unike boolean unique(arg1, ..., argN)
Klikk her hvis du vil vite mer om planlagte funksjoner (eller funksjoner som vurderes).

<span id="Create_new_expression_functions_with_plugin_ (New in 4.0.0 )">

Opprett nye uttrykksfunksjoner med et tillegg (New in 4.0.0 )

Hvis du trenger en ny funksjon som ikke finnes i kjernen, kan du opprette en med et tillegg. En slik ny funksjon opprettes ved hjelp av hendelsen expressionManagerStart.

ExpressionScript vet hvilke variabler som er lokale

For å kunne bygge JavaScript for en side riktig må EM vite hvilke variabler som er satt på siden, og hva JavaScript-ID-en deres er (f.eks. for document.getElementById(x)). EM må også vite hvilke variabler som er satt på andre sider (slik at det sikres at de nødvendige <input type='hidden' value='x'>-feltene finnes og er fylt ut).


Kaskaderende betingelser

Hvis én av variablene er irrelevant, blir hele ligningen irrelevant (false). I tabellen nedenfor betyr N/A at en av variablene ikke var relevant:


Operator Eksempel a b Resultat
+ (unary) +a N/A false
! !a N/A false
== (or eq) a == b N/A 5 false
== (or eq) a == b N/A 0 false
== (or eq) a == b N/A N/A false
!= (or ne) a != b N/A 5 false
!= (or ne) a != b N/A N/A false
!= (or ne) a != b N/A 0 false
> (or gt) a > b N/A 5 false
>= (or ge) a >= b N/A 5 false
< (or lt) a < b N/A 5 false
<= (or le) a <= b N/A 5 false
and a and b N/A 5 false
and a and b N/A N/A false
or a or b N/A N/A false
or a or b N/A 5 false
+ a + b N/A 5 false
* a * b N/A 5 false
/ a / b 5 N/A false
() (a) N/A false
(exp) (a && b) N/A 5 false
(exp) op (exp) (b + b) > (a && b) N/A 5 false
function sum(a,b,b) N/A 5 false
function max(a,b) N/A 5 false
function min(a,b) N/A 5 false
function implode(', ',a,b,a,b) N/A 5 false
function if(a,a,b) N/A 5 false
function is_empty(a) N/A false
function is_empty(a) 0 (or blank) true
function !is_empty(a) N/A false


Overstyring av kaskaderende betingelser

Si at du vil vise en løpende sum av alle relevante svar. Du kan da prøve å bruke ligningen {sum(q1,q2,q3,...,qN)}. Denne oversettes imidlertid internt til LEMif(LEManyNA("q1","q2","q3",...,"qN"),"",sum(LEMval("q1"),LEMval("q2"),LEMval("q3"),...,LEMval("qN"))). Hvis én av verdiene q1-qN er irrelevant, vil ligningen derfor alltid returnere false. I dette tilfellet vil sum() vise «0» helt til alle spørsmål er besvart.

For å komme rundt dette kan hver variabel få suffikset «.NAOK» (som betyr at Not Applicable er OK). Da skjer følgende. Si at du har en variabel q1.NAOK:

  1. q1 legges ikke til i LEManyNA()-leddet
  2. LEMval('q1') vil fortsatt sjekke om besvarelsen er relevant, og vil returnere "" hvis den ikke er det (slik at enkeltstående irrelevante besvarelser ignoreres, men ikke gjør hele uttrykket ugyldig).

Løsningen på problemet med løpende sum er altså å bruke ligningen sum(q1.NAOK,q2.NAOK,q3.NAOK,...,qN.NAOK).

Bruken av suffikset .NAOK gjør det også mulig for forfattere å lage undersøkelser med flere mulige veier som senere møtes igjen i felles veier. Si for eksempel at deltakere besvarer en undersøkelse på en måte som ligger utenfor det normale svarområdet. Forfatteren kan da gjøre deltakerne oppmerksomme på at de kanskje ikke får gyldige resultater, og spørre om de virkelig vil fortsette med undersøkelsen. Hvis de svarer «Ja», vises resten av spørsmålene. Betingelsen for «resten av spørsmålene» vil sjekke om de første besvarelsene lå innenfor det normale området ELLER om deltakeren svarte «Ja» på spørsmålet som bare er relevant hvis vedkommende svarte utenfor det normale området.

Hvordan støtter ExpressionScript betinget mikrotilpasning?

Her er et eksempel på mikrotilpasning (der Spørsmålstype=='expr' betyr en ligning):


Spørsmålskode Relevans Spørsmålstype Spørsmål
name 1 text Hva heter du?
age 1 text Hvor gammel er du?
badage !is_empty(age) expr {(age<16) or (age>80)}
agestop badage message Beklager, {name}, du er for {if( (age<16),'ung',if( (age>80),'gammel','middelaldrende') ) } for denne testen.
kids !badage yesno Har du barn?
parents 1 expr {!badage && kids=='Y'}
numKids parents text Hvor mange barn har du?
kid1 parents && numKids >= 1 text Hvor gammelt er ditt første barn?
kid2 parents && numKids >= 2 text Hvor gammelt er ditt andre barn?
kid3 parents && numKids >= 3 text Hvor gammelt er ditt tredje barn?
kid4 parents && numKids >= 4 text Hvor gammelt er ditt fjerde barn?
kid5 parents && numKids >= 5 text Hvor gammelt er ditt femte barn?
sumage 1 expr {sum(kid1.NAOK,kid2.NAOK,kid3.NAOK,kid4.NAOK,kid5.NAOK)}
report parents text {name}, du oppga at du er {age} og at du har {numKids}. Summen av alderen til de første {min(numKids,5)} barna dine er {sumage}


For å laste ned eksempelundersøkelsen ovenfor, klikk på følgende lenke: Eksempelundersøkelse med antall barn.

Alle disse spørsmålene kan ligge på én enkelt side (f.eks. i samme gruppe), og bare de relevante spørsmålene vises. Når du oppgir barnas alder, oppdateres dessuten sum()-uttrykket i det siste spørsmålet dynamisk.

ExpressionScript gir denne funksjonaliteten ved å omgi hvert uttrykk med et navngitt <span>-element. Hver gang en verdi endres, beregnes uttrykket som skal vises i dette <span>-elementet på nytt, og visningen genereres på nytt. Du kan ha titalls eller til og med hundrevis av slike tilpassede uttrykk på samme side.


Syntaksutheving

For å hjelpe deg med å skrive og validere uttrykk tilbyr EM syntaksutheving med følgende egenskaper:

Typer og betydninger av syntaksutheving

Farge Eksempel Betydning Verktøytips Kommentarer
beige bakgrunn Eksempel hele ligningen ingen Alt innenfor krøllparenteser som gjenkjennes som en ligning (f.eks. uten innledende eller avsluttende mellomrom) får beige bakgrunnsfarge for å skille det fra teksten rundt
fet rød tekst Eksempel En feil En forklaring på feilen Kan være en ukjent variabel eller en feil i en funksjon. Undersøkelsen er ødelagt, og spørsmål som er avhengige av det aktuelle uttrykket vil ikke vises for respondentene.
blå tekst Eksempel funksjonsnavn betydning og tillatt syntaks Gjelder funksjonsnavn eller ting som bør være funksjoner siden de etterfølges av en åpen parentes. De vises med fet blå tekst. Verktøytips viser betydningen og tillatt syntaks for funksjonen.
grå tekst Eksempel streng ingen Strenger med enkle og doble anførselstegn vises med grå tekst.
cyan tekst Eksempel variabel satt på samme side [navn]: spørsmål; verdi; svarliste som viser koder for hver verdi Alle variabler som er satt på samme side som spørsmålet du redigerer, vises med cyan tekst (de kan oppdateres i JavaScript). Verktøytipset viser navnet, selve spørsmålet og gjeldende verdi (eller tomt hvis den ikke er satt). Hvis spørsmålstypen forventer besvarelser fra et oppsett av oppregnede verdier, vises tilordningen av kodene til visningsverdiene.
grønn tekst Eksempel variabel satt på en tidligere side [navn]: spørsmål; verdi; svarliste som viser koder for hver verdi Alle variabler som er satt på en tidligere side, vises med fet grønn tekst. Verktøytipset viser navnet, selve spørsmålet og gjeldende verdi (eller tomt hvis den ikke er satt). Hvis spørsmålstypen forventer besvarelser fra et oppsett av oppregnede verdier, vises tilordningen av kodene til visningsverdiene.
fet rosa tekst Eksempel variabel satt på en senere side vanligvis tom ved start av undersøkelsen, men kan fylles ut via indeks eller ved å gå tilbake [navn eller SGQA-kode]: spørsmål; verdi; svarliste som viser koder for hver verdi Alle variabler som er satt på en senere side, vises med fet rosa tekst. Verktøytipset viser navnet, selve spørsmålet og gjeldende verdi (eller tomt hvis den ikke er satt). Hvis spørsmålstypen forventer besvarelser fra et oppsett av oppregnede verdier, vises tilordningen av kodene til visningsverdiene.
fet beige-brun tekst Eksempel en Lime-erstatningsverdi verdien Lime-erstatningsstrenger (som {TOKEN:xxx}, {PRIVACY_MESSAGE}) vises med fet beige-brun tekst.
rød tekst Eksempel tilordningsoperator (=) advarsel Hvis du bruker tilordningsoperatoren (=), vises den med rød tekst. Dette skal hjelpe deg å unngå utilsiktet omtilordning av verdier når du egentlig ville sjekke om a == b i stedet for å sette verdien a = b.
vanlig svart tekst Eksempel skilletegn ingen Alle andre skilletegn i uttrykket vises med vanlig svart tekst.
tekst i rød boks en fet rød linje omgir feilen syntaksfeil beskrivelse av feilen Alle oppdagede syntaksfeil vises i røde bokser. Verktøytipset viser feilen. Eksempler er parenteser som ikke har et par, bruk av udefinerte funksjoner, feil antall argumenter til funksjoner, dårlig strukturerte uttrykk (f.eks. manglende operatorer mellom variabler), forsøk på å tilordne en ny verdi til en skrivebeskyttet variabel, forsøk på å tilordne verdier til noe som ikke er variabler, eller bruk av syntaks som ikke støttes. Merk at systemet for oppdagelse av syntaksfeil kanskje bare rapporterer én feil i et uttrykk selv om det er flere; hvis det oppdages feil, vises likevel minst én feil.


Med verktøytips mener vi meldingen som vises i en popup når du holder musepekeren over visse funksjoner og variabler.


Videre lesning

Eksempelundersøkelser for ExpressionScript

Bruksområder og veiledninger

Trinnvise eksempler

Referanse for utviklere

Veikart, status og gjøremålsliste