È possibile usare le espressioni in un rilevamento per controllare il comportamento predefinito delle domande. Utilizzando le espressioni nella colonna relevant, è possibile nascondere o mostrare una domanda o un gruppo di domande in base alle risposte precedenti. Quando una domanda è nascosta tramite un'espressione nella colonna relevant, nessun dato viene inviato per la domanda.
Nota:
In Survey123 Mobile e nell'app da campo, se una risposta viene inserita in una domanda che in seguito viene nascosta tramite un'espressione relevant, la risposta viene cancellata. Se la domanda torna a essere rilevante deve essere fornita una nuova risposta. Nell'app Web, la risposta non viene cancellata, quindi se la domanda torna a essere rilevante la risposta precedente verrà utilizzata.
Puoi anche applicare espressioni alla colonna readonly, che può disabilitare l'input a una domanda o a un gruppo in base al risultato dell'espressione. Anche la colonna required supporta le espressioni, consentendo al rilevamento di richiedere all'utente di rispondere a una domanda solo in condizioni specifiche.
Nota:
Le espressioni di sola lettura non sono supportate nell'app Web.
Le domande precedenti devono sempre essere indicate nelle espressioni con il formato ${field_name}.
Visibilità domanda
È possibile nascondere una domanda dalla vista con un'espressione usando la colonna body::esri:visible.. Questa colonna nasconde la domanda se l'espressione che contiene non restituisce true, mantenendo comunque i contenuti della domanda. Ad esempio, l'espressione ${edit_location}='yes' fa sì che la domanda venga visualizzata solo se la domanda edit_location è uguale a yes.
Questo comportamento è simile alla colonna relevant, con entrambe le colonne che nascondono una domanda fino a che l'espressione nella colonna restituisce true. La differenza principale è che body::esri:visible non elimina il valore di una domanda resa invisibile dall'espressione e invia i valori esistenti al feature layer. Utilizzare la colonna relevant anziché body::esri:visible quando si desidera assicurarsi che la domanda non presenti valori calcolati o memorizzati quando non è rilevante.
Quando si utilizzano le colonne body::esri:visible o relevant per controllare la visibilità delle domande, i requisiti, i valori predefiniti, i vincoli e le maschere di input vengono applicati solo quando la domanda è visibile.
È inoltre possibile controllare la visibilità delle domande usando il tipo di domanda nascosta e l'aspetto nascosto, ma questi non possono essere controllati con un'espressione.
Nota:
Le domande immagine, audio e file non possono essere nascoste dalla colonna body::esri:visible.
Espressioni semplici
Il modo migliore per utilizzare una di queste espressioni consiste nel modificare il comportamento o la visibilità della domanda, a meno che in precedenza sia stata fornita una determinata risposta. Ad esempio, la seguente espressione verifica che la risposta alla domanda precedente sia true:
${previous_question} = 'true'
Il seguente esempio verifica che la risposta alla domanda precedente sia maggiore o uguale a 100:
${previous_question} < 100
I tipi di domande select_multiple gestiscono i loro valori in modo diverso rispetto ad altri tipi di domande, con ciascuna risposta selezionata inserita nell'ordine di selezione separata da virgole. Ad esempio, selezionando le risposte A e B in questo ordine mostrerà le risposte come A,B. Per utilizzare una domanda select_multiple come parte di un'espressione, è necessario utilizzare la funzione selected. Il seguente esempio verifica che l'utente abbia risposto alla domanda precedente con A e funziona indipendentemente dalle altre risposte scelte:
selected(${previous_question}, 'A')
La funzione count-selected conta il numero di opzioni selezionate un una domanda select_multiple e fornisce un numero da utilizzare come operatore. Il seguente esempio verifica che la domanda precedente abbia avuto più di due scelte selezionate:
count-selected(${previous_question}) > 2
È possibile usare la funzione count-selected come vincolo sulle domande image o file con l'aspetto multiline, per controllare il numero di file inviati.
Espressioni matematiche
Il seguente esempio abbina più operatori e domande:
${previous_question} + ${other_previous_question} <= 100
Quando si usano gli operatori matematici, potrebbe essere necessario convertire i valori in numeri. Nell'esempio precedente, si presumeva che previous_question e other_previous_question fossero interi o decimali, ma se i tipi di domanda sono stringhe, eseguire quanto segue:
int(${previous_question}) + int(${other_previous_question}) <= 100
È anche possibile eseguire espressioni matematiche su domande date, che vengono salvate come tempo Epoch, ovvero il numero di millisecondi trascorsi dal 1° gennaio 1970. La seguente espressione rivela una domanda solo se la risposta alla domanda precedente è più di due settimane prima della data odierna:
if( ${previous_question}='',false,today() - ${previous_question} > 1000*60*60*24*15)
Espressioni regolari
Un'espressione regolare è una sequenza di caratteri utilizzata per abbinare i modelli nelle stringhe. In Survey123, se il modello viene abbinato, l'espressione restituirà true, altrimenti se il modello non viene abbinato l'espressione restituirà false.
È possibile creare un'espressione regolare dalle sottoespressioni riportate nella seguente tabella:
| Sottoespressione | Corrispondenza |
|---|---|
| ^ | Corrisponde all'inizio della linea. |
| $ | Corrisponde alla fine della linea. |
| . | Corrisponde a qualsiasi carattere singolo eccetto una nuova linea. |
| [...] | Corrisponde a qualsiasi carattere singolo tra parentesi quadre. |
| [^...] | Corrisponde a qualsiasi carattere non incluso tra parentesi quadre. |
| (re) | Raggruppa le espressioni regolari e ricorda il testo corrispondente. |
| (?: re) | Raggruppa le espressioni regolari senza ricordare il testo corrispondente. |
| a| b | Corrisponde ad a o b. |
| \A | Inizio dell'intera stringa. |
| \b | Corrisponde ai limiti di parola al di fuori delle parentesi e corrisponde a backspace (0x08) quando è all'interno di parentesi. |
| \B | Corrisponde ai limiti non parole. |
| \d | Corrisponde a cifre. È equivalente a [0-9] |
| \D | Corrisponde a non cifre. |
| \G | Corrisponde al punto in cui termina l'ultima corrispondenza. |
| \n, \t, \e ecc. | Corrisponde a nuova riga, tabulazione, escape e così via. |
| \N | Riferimento posteriore per acquisire il numero del gruppo N. |
| re* | Corrisponde a 0 o a più occorrenze dell'espressione precedente. |
| re+ | Corrisponde a 1 o a più occorrenze dell'espressione precedente. |
| re? | Corrisponde a 0 o 1 occorrenza dell'espressione precedente. |
| re{ n} | Corrisponde al numero esatto di occorrenze dell'espressione precedente definita al posto di n. |
| re{ n,} | Corrisponde a n o più occorrenze dell'espressione precedente. |
| re{ n, m} | Corrisponde almeno al numero delle occorrenze definito da n e, al massimo, a quelle definite da m nell'espressione precedente. |
| \s | Corrisponde a un carattere bianco: tabulazione, avanzamento riga, avanzamento carta, ritorno a capo o spazio. |
| \S | Corrisponde a non spazi. |
| \w | Corrisponde ai caratteri di parole. |
| \W | Corrisponde ai caratteri non di parole. |
| \z | Termine dell'intera stringa. |
| \Z | Termine dell'intera stringa eccetto il terminatore di riga finale consentito. |
È possibile utilizzare le espressioni regolari in qualsiasi colonna che accetti le espressioni per alterare il comportamento di una domanda, a meno che la stringa fornita da un'altra domanda sia in un dato formato. Il seguente esempio, quando posizionato nella colonna relevant, mostra solo una domanda se un'altra domanda è stata risposta con una lettera:
regex(${question},'[A-Za-z]')
Il seguente esempio, quando posizionato nella colonna choice_filter di una domanda select_one per i nomi di strade, mostrerà solo le scelte di strade contenute all'interno dell'elenco citystreets che corrispondono al nome della città selezionato in una domanda precedente denominata city:
regex(citystreets,${city})
Per ulteriori esempi su come utilizzare un'espressione regolare per aggiungere un vincolo a una domanda di un sondaggio, consultare Formule.
Espressioni condizionali
Le espressioni condizionali sono utilizzate per determinare se un'istruzione (condizione) restituisce vero o falso e per restituire un valore nominale per ciascun caso:
if(condition, value if true, value if false)
Nel seguente esempio, se la risposta a question_one è sì, la risposta alla domanda corrente sarà anch'essa sì. Se la risposta a question_one non è sì, la risposta alla domanda corrente è no:
if(selected(${question_one}, 'yes'), 'yes', 'no')
Possono essere utilizzate due domande in una condizione: Nel seguente esempio, se la risposta a entrambe question_one e question_two è sì, la risposta alla domanda corrente è anch'essa sì:
if(selected(${question_one}, 'yes') and selected(${question_two}, 'yes'), 'yes', 'no')
Nel seguente esempio, se la risposta a question_one o question_two è sì, la risposta alla domanda corrente è anch'essa sì:
if(selected(${question_one}, 'yes') or selected(${question_two}, 'yes'), 'yes', 'no')
Le espressioni condizionali possono anche essere nidificate, ma è importante includere sempre sia un valore per il caso true che quello per il caso false. Nel seguente esempio, se la risposta a question_one non è sì, viene valutata question_two. Se anche question_two non è sì, viene valutata question_three. Se la risposta a question_one, question_two e question_three non sono sì, allora la risposta alla domanda che utilizza questa istruzione sarà no.
if(selected(${question_one}, 'yes'), 'yes', if(selected(${question_two}, 'yes'), 'yes', if(selected(${question_three}, 'yes'), 'yes', 'no')))