Procedure ExpressionScript
From LimeSurvey Manual
Panoramica di quanto spiegato in precedenza
Se finora hai seguito la struttura del manuale di LimeSurvey, significa che conosci già la Terminologia di LimeSurvey. Successivamente, abbiamo trattato espressioni e variabili per imparare come migliorare i nostri sondaggi. Nella parte successiva, siamo passati ai tipi e ai significati di evidenziazione della sintassi per imparare a correggere gli errori di sintassi.
Con queste nozioni di base coperte, potremmo passare agli esempi e spiegare come funzionano le espressioni all'interno di LimeSurvey.
Evidenziazione della sintassi
Gli screenshot seguenti forniscono esempi, ma non mostrano i valori dei suggerimenti. Un suggerimento è una casella informativa che viene visualizzata ogni volta che si passa il mouse su parole in grassetto.
Grazie a questa evidenziazione della sintassi, è molto facile comporre espressioni corrette, anche quelle complicate. Sebbene il team di LimeSurvey intenda provare a creare una GUI di Expression Builder, puoi utilizzare l'evidenziazione della sintassi esistente per identificare e correggere rapidamente gli errori di battitura. Puoi anche utilizzare i suggerimenti per convalidare l'accuratezza delle tue espressioni (ad esempio, confermare di aver selezionato le variabili desiderate).
In ognuno degli esempi, ci sono tre colonne:
- Source - questo è il testo non elaborato che inseriresti nel campo della domanda di LimeSurvey
- Pretty Print - questo è l'equivalente evidenziato in sintassi di quello che hai inserito! N!#*Nota che le espressioni sono mostrate con uno sfondo marrone chiaro, ma non circondate da parentesi graffe in questa evidenziazione.
- Poiché EM supporta la sostituzione ricorsiva, mostrare le parentesi graffe nell'evidenziazione causerebbe errori di sintassi
- Risultato - questo è l'output generato quando EM elabora il sorgente
- Tutto ciò che può essere correttamente sostituito è
- Le espressioni con errori sono mostrate in linea, con l'evidenziazione della sintassi. Gli errori sono circondati da una casella bordata di rosso.
Sintassi corretta
Di seguito puoi trovare esempi di sintassi corretta:
- Values: mostra che le variabili note sono codificate a colori a seconda che siano impostate nella pagina corrente. Old-style INSERTANS:xxxx ottiene il proprio stile di codifica a colori
- Attributi domanda: mostra che la notazione punto può accedere ad alcune proprietà delle domande
- Math: mostra che sono supportati calcoli di base e complessi
- TextProcessing: mostra alcune delle funzioni disponibili per l'elaborazione del testo
- Dates: mostra due delle funzioni relative alla data disponibili
- Conditional: mostra l'utilizzo della funzione if(). Le scelte possono essere nidificate.
- Paragrafo su misura: puoi personalizzare completamente un report basato su valori precedenti
- EM processi all'interno di stringhe: mostra che può eseguire sostituzioni all'interno di stringhe. Questo esempio genera un nome immagine personalizzato.
- EM non elabora le parentesi graffe come queste: mostra che se le parentesi graffe sono sfuggite o c'è uno spazio bianco tra l'espressione e le parentesi graffe, ES ignora l'espressione.

Sintassi EM contenente errori
Ecco alcuni esempi di errori comuni durante la digitazione delle espressioni ES. Si noti che i suggerimenti forniscono informazioni aggiuntive.
- Inline Javascript che ha dimenticato di aggiungere spazi dopo la parentesi graffa
- Poiché "document.write" appare subito dopo una parentesi graffa, EM pensa che sia un'espressione e red- caselle "document" e "write" poiché sono variabili e funzioni non definite, rispettivamente
- Variabili, funzioni e operatori sconosciuti/errati
- Qui abbiamo dimenticato che stiamo usando il nome della variabile "gender" invece di " sex", ma EM rileva quell'errore. Inoltre, contrassegna in rosso '++', poiché non è un operatore supportato.
- Avverte se si usa = invece di eq o esegue assegnazioni di valori
- Notare che '=' e '+=' sono in testo rosso invece che nero. Se passi il mouse sopra di essi, vedrai avvertimenti che stai assegnando un valore.
- Numero errato di argomenti per le funzioni
- if() prende 3 argomenti, ma ne sono stati dati 4, quindi passandoci sopra sopra l'"if" nella casella rossa spiegherà l'errore e mostrerà la sintassi supportata
- sum() prende un numero illimitato di argomenti, ma avevamo una virgola finale prima delle parentesi di chiusura, quindi è nella casella rossa! N!#Parenti non corrispondenti
- Questo è uno degli errori più comuni durante la scrittura di espressioni.
- Questo mostra due esempi di parentesi di chiusura mancanti e un esempio di parentesi di chiusura troppe.
#Sintassi non supportata
- Se usi un operatore o una punteggiatura che ES non supporta, verrà inserito in una casella rossa.
- Assegnazioni non valide
- Alcune variabili sono readWrite e possono avere i loro valori modificati. Altre sono di sola lettura.
- Se provi a cambiare il valore di una variabile di sola lettura, non puoi. EM inserirà in una casella rossa il tentativo.
- Se provi ad assegnare un valore a un'equazione o a una stringa, otterrai anche un errore

"Live" esempi di evidenziazione della sintassi con suggerimenti attivi
Fonte | Bella stampa | Risultato |
---|---|---|
Ecco un esempio di sintassi OK con suggerimenti Ciao {if(gender=='M','Mr.','Mrs.')} {surname}, ora è {date('g:i a',time())}. Sai dove sono i tuoi {sum(numPets,numKids)} bambini e animali domestici? | Ecco un esempio di sintassi OK con suggerimenti Hello if ( gender == 'M' , 'Mr.' , 'Mrs.' ) cognome , ora è date ( 'g:i a' , time ()) . Sai dove sono i tuoi bambini e animali domestici ( numPets , numKids ) ? | Ecco un esempio di sintassi OK con suggerimenti Salve signor Smith , ora sono le 6:07. Sai dove sono i tuoi 3 bambini e gli animali domestici? |
Di seguito sono riportati gli errori comuni in modo da poter visualizzare i suggerimenti Variabili utilizzate prima di essere dichiarate: {notSetYet} Funzione sconosciuta: {iff(numPets>numKids,1,2)} Variabile sconosciuta: {sum(age,num_pets,numKids)} # parametri errati: {sprintf()},{if(1,2)},{date()} Assegna variabili di sola lettura:{TOKEN:ATTRIBUTE_1+=10},{name='Sally'} Parentesi non bilanciate: {pow(3,4},{(pow(3,4)},{pow(3,4))} | Di seguito sono riportati gli errori comuni in modo da poter visualizzare i suggerimenti Variabili usate prima di essere dichiarate: notSetYet Funzione sconosciuta: iff ( numPets > numKids ,1,2) Variabile sconosciuta: somma ( età , num_animali , numBambini ) # parametri errati: sprintf () , if (1,2) , date () Assegna variabili di sola lettura: TOKEN:ATTRIBUTE_1+= 10 , name= 'Sally' Parentesi non bilanciate: pow (3,4 , ( pow (3,4) , pow (3,4) ) | Di seguito sono riportati gli errori comuni in modo da poter visualizzare i suggerimenti Variabili usate prima di essere dichiarate: notSetYet Funzione sconosciuta: iff ( numPets > numKids ,1,2) Variabile sconosciuta: somma ( età , num_animali , numBambini ) # parametri errati: sprintf () , if (1,2) , date () Assegna variabili di sola lettura: TOKEN:ATTRIBUTE_1+= 10 , name= 'Sally' Parentesi non bilanciate: pow (3,4 , ( pow (3,4) , pow (3,4) ) |
Ecco alcune delle sintassi non supportate Nessun supporto per '++', '--', '%',';': {min(++age, --age,age % 2);} Né '|', '&', '^': {(sum(2 | 3,3 & 4,5 ^ 6)}} Né array: {nome[2], nome['mio']} | Ecco alcune delle sintassi non supportate Nessun supporto per '++', '--', '%',';': min ( ++ età , -- età , età % 2) ; Né '|', '&', '^': ( somma (2 | 3,3 & 4,5 ^ 6) } Né array: nome [ 2 ] , nome [ 'mio' ] | Ecco alcune delle sintassi non supportate Nessun supporto per '++', '--', '%',';': min ( ++ età , -- età , età % 2) ; Né '|', '&', '^': ( somma (2 | 3,3 & 4,5 ^ 6) } Né array: nome [ 2 ] , nome [ 'mio' ] |
Esempi di personalizzazione (ad es. estensione di {INSERTANS:xxx})
"Caro {Mr}/{Mrs} Smith..."
Utilizzare la funzione if() per scegliere in modo condizionale se visualizzare "Mr." o 'signora'.
La sintassi è if(test,do_if_true,do_if_false).
# | Codice | Domanda | Tipo |
1 | sesso | Qual è il tuo genere? | Sesso |
|example1 | Gender {if(gender=='M','Mr.','Mrs.')} Smith, ... | Testo libero lungo |

Come si può osservare di seguito, "Mr" e "Mrs" sono adattati a ciò che l'intervistato seleziona come risposta alla domanda "sesso".


"Gentile {Mr}/{Mrs} Smith..." nell'e-mail di invito
Puoi utilizzare l'esempio precedente nell'e-mail di invito utilizzando gli attributi della tabella dei token. Usa la funzione if() per scegliere se 'Mr.' o "signora". deve essere utilizzato nell'e-mail.
La sintassi è "if(test,do_if_true,do_if_false)".
# | attributo | valore |
1 | Cognome | Smith |
2 | Indirizzo email | test@test. com |
3 | ATTRIBUTE_2 | M |
Testo nell'e-mail di invito:
Gentile {if(ATTRIBUTE_2=='M','Mr','Mrs')} {LASTNAME},
sei stato invitato a partecipare a un sondaggio:
https:/...

e-mail Visualizza:

Calcolo / Esempi di valutazione
Calcola i valori di valutazione in fase di esecuzione e memorizza i risultati nei dati del sondaggio
Questo esempio utilizza tutte le funzionalità di EM, tra cui Rilevanza, Personalizzazione e il tipo di domanda Equazione.
Mostra anche che sono tutti abilitati per JavaScript, quindi se hai queste funzionalità su una pagina, cambierà dinamicamente man mano che le persone impostano e cambiano le loro risposte.
# | Codice | Domanda | Tipo | Rilevanza | |||||
1 | numBambini | Quanti figli hai? | Input numerico | - | 2 | kid1 | Quanti anni ha il tuo primo figlio? | Inserimento numerico | numKids >= 1 |
3 | kid2 | Quanti anni ha il tuo secondo child? | Input numerico | numKids >= 2 | |||||
4 | kid3 | Quanti anni ha il tuo terzo figlio? | Input numerico | numKids >= 3 | |||||
6 | sumKidAges | {sum(kid1.NAOK,kid2. NAOK,kid3.NAOK,kid4.NAOK)} | Equazione | 1 | |||||
7 | kidSummary | Hai detto di avere {numKids}. {if(numKids==1,'child','children')}. {if(numKids>1,implode(' ','La somma delle età dei tuoi primi ',min(numKids,4),' bambini è ',sumKidAges,'.'),' ')} | |1 |
Per scaricare questo esempio, fare clic sul seguente collegamento: Assessments_survey_example.
Di seguito sono disponibili schermate di domande rappresentative. Come puoi vedere, la sintassi EM evidenzia tutti i campi che potrebbero contenere la personalizzazione. Qui puoi vedere esempi di pertinenza con evidenziazione della sintassi, tipo di domanda Equazione e sostituzioni all'interno di una domanda. È inoltre possibile utilizzare le sostituzioni all'interno della Guida, della visualizzazione dell'intestazione del gruppo, del messaggio di benvenuto e del messaggio di fine.
Nel prossimo esempio, poiché la rilevanza è {numKids >= 2), la domanda sarà visibile solo se l'intervistato riferisce di avere almeno due figli.

Di seguito, puoi osservare che ogni variabile ha il suffisso .NAOK ad essa collegato. Ciò è dovuto al modo in cui EM supporta la pertinenza a cascata. Se non si dispone di .NAOK, la somma viene calcolata solo se la persona dice di avere 4 figli (ad esempio, se tutte le variabili sono rilevanti). L'uso di .NAOK significa che vogliamo calcolare la somma anche se tutte o alcune delle variabili sono irrilevanti (ad esempio, "Non applicabile" (NA) va bene (OK)).
Tuttavia, l'attributo .NAOK ha effetto solo sul passaggio delle variabili a EM. Se l'intervistato inizialmente afferma di avere 3 figli e inserisce l'età per ciascuno, poi cambia idea e dice di averne 2, non vogliamo vedere la somma dei 3 valori inseriti, poiché il terzo figlio è "non applicabile" nel nostro caso più:

Ogni espressione separata è codificata a colori con uno sfondo marrone chiaro. Come puoi vedere, ci sono tre espressioni separate qui. L'ultimo contiene un messaggio che viene mostrato in modo condizionale solo se la persona ha più di un figlio.

Ora, ecco gli screenshot del sondaggio in azione.
Quando visiti la pagina per la prima volta, vedi questo. Nota che dice "Hai 0 bambini" invece di "Hai 0 bambini".

Se cambio il valore per il numero di bambini a 1, il display cambia immediatamente in questo, anche se si trova sulla stessa pagina:

Ora nota che la grammatica è corretta: "Hai 1 figlio".
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:
