Un XLSForm può ripetere un gruppo di domande più volte. Esempi di ripetizioni includono i seguenti casi:
- Acquisire più risposte alla stessa domanda in un unico rilevamento.
- Acquisire raccolte separate più piccole di record, ad esempio nome, età e sesso di ogni membro di una famiglia.
- Acquisire più domande di mappa in un unico rilevamento.
Quando si pubblica un rilevamento che include ripetizioni, ciascuna ripetizione viene creata come tabella correlata nel feature layer o come layer correlato se la ripetizione contiene una domanda di geopunto, geotraccia o geoforma.
Utilizzare le ripetizioni
Per ripetere un gruppo di domande in Survey123 e acquisire più risposte, completa i passai seguenti nella scheda rilevamento del foglio di calcolo:
- Nella riga in cui desideri iniziare la ripetizione, digita inizia ripetizione nella colonna type.
- Indicare un nome per la ripetizione nella colonna name.
- Nelle righe successive a questa voce, immetti le domande da includere nella ripetizione.
- Immediatamente dopo le domande, digitare end repeat nella colonna type.
Nel rilevamento viene creato un gruppo di domande che può essere aggiunto ripetutamente ai risultati del rilevamento. Per impostazione predefinita, non vi sono limitazioni al numero di ripetizioni delle domande.
Le posizioni dei punti ricavate dalla prima domanda di geopunto in una ripetizione possono essere visualizzate su qualsiasi mappa del rilevamento. Per maggiori informazioni, vedi Sovrapposizioni di punti sulle mappe.
Limitare il numero di record ripetuti
Per definire il numero di ripetizioni in Survey123 impostare un conteggio delle ripetizioni completando i seguenti passi:
- Nella riga in cui desideri iniziare la ripetizione, digita inizia ripetizione nella colonnna type della scheda rilevamento.
- Indicare un valore numerico per il numero di ripetizioni nella colonna repeat_count. È inoltre possibile fornire un nome di domanda o un calcolo che restituisca un valore numerico.
- Indicare un nome per la ripetizione nella colonna name.
- Nelle righe successive a questa voce, immetti le domande da includere nella ripetizione.
- Nell'ultima riga digitare end repeat nella colonna type.
Quando un utente apre il rilevamento, appare già creato il numero di ripetizioni impostato nella colonna repeat_count. Gli utenti non possono creare o eliminare ripetizioni.
È necessario passare tra tutte le ripetizioni definite dal valore repeat_count prima che venga inviata la risposta al rilevamento, altrimenti non verranno inviati tutti i record di ripetizione. Per assicurarsi che tutte le ripetizioni vengano inviate, è possibile porre domande nelle ripetizioni. È necessario tenere presente, tuttavia, che le domande nelle ripetizioni a cui è applicata un'istruzione rilevante o richiesta in base alle condizioni non vengono valutate in fase di invio.
Nota:
Il comportamento di una ripetizione con un numero di ripetizioni variabile cambia a seconda che l'utente crei una risposta al rilevamento o ne modifichi una precedentemente inviata.
Quando si crea una risposta al rilevamento, il numero di ripetizioni per una ripetuzione da ridurre presenta un pulsante nella parte superiore di una ripetizione che consente di eliminare tutti i record che superano il nuovo numero di ripetizioni che contengono dati; i record vuoti vengono eliminati automaticamente. A prescindere che venga premuto il pulsante, l'invio della risposta al rilevamento non determina l'invio di record oltre il nuovo numero di ripetizioni.
Quando si modifica una risposta al rilevamento esistente, il numero di ripetizioni per una ripetizione da ridurre visualizza un messaggio nella parte superiore dell'avviso di ripetizione per indicare che la quantità di record di ripetizione è cambiata. L'utente non può inviare una risposta modificata con un numero di record di ripetizioni inferiore al numero originale. Ulteriori record di ripetizione vengono accettati solo se allowAdds è impostato su true nella colonna bind::esri:parameters. Se allowAdds è impostato su false, l'utente non può inserire un numero maggiore del numero originale di record di ripetizione.
Funzioni aggregate
È possibile usare funzioni aggregate che restituiscono valori derivati dalle risposte nelle ripetizioni. A tal fine, una domanda all'esterno di una ripetizione fa riferimento a una domanda all'interno della ripetizione. Per esempio, la seguente formula conta le risposte a una domanda singola tra le ripetizioni:
count(${repeated_question})
Possono essere utilizzate le seguenti funzioni per aggregare le risposte:
- count
- sum
- min
- max
- join
Queste funzioni si applicano solo alla risposta del rilevamento corrente. Non tengono in considerazione altri record nel feature layer. È anche possibile includere domande utilizzando sum e count nella ripetizione. Tuttavia, mentre i valori di sum e count vengono calcolati per ogni nuovo record aggiunto alla ripetizione, i calcoli nelle voci precedenti nella ripetizione non vengono aggiornati automaticamente. Tali calcoli possono essere aggiornati manualmente utilizzando il pulsante Aggiorna accanto alla domanda. L'uso di min e max è supportato solo all'esterno della ripetizione.
Nota:
Quando utilizzata nell'app da campo Survey123, sum e count possono essere posizionate dentro o fuori della ripetizione. Se sum e count devono essere utilizzate nell'app Web Survey123, devono essere posizionate fuori dalla ripetizione. È possibile fare riferimento a un valore sum o count esterno alla ripetizione in un calcolo all'interno della ripetizione.
È possibile utilizzare la funzione join per concatenare le domande che restituiscono una stringa. È anche possibile utilizzare la funzione sum per collegare le domande di geopunto nella ripetizione come domanda di geotraccia o geoforma all'eterno ripetizione.
Per informazioni su come utilizzare queste funzioni, consultare Formule.
Restituire l'indice di un record di ripetizione
La funzione position(..) può essere usata per restituire una riflessione intera dell'indice del record di ripetizione in una ripetizione. Per esempio, il primo record in una ripetizione restituirà 1, il secondo restituirà 2, e così via. Nel seguente esempio la funzione position(..) è utilizzata in una domanda a intero nascosto in ripetizione:
Attenzione:
La funzione position(..) restituisce sempre 0 nell'app di campo Survey123 o 1 nell'app web Survey123 se all'esterno di una ripetizione o in un gruppo all'interno di una ripetizione.
È inoltre possibile usare la funzione position(..) in una espressione. Nell'esempio seguente, la funzione selected-at() usa position(..) per restituire la scelta che è stata selezionata nella domanda select_multiple alla stessa posizione del record di ripetizione corrente e visualizza la scelta nella ripetizione come una nota. La funzione selected-at() inizia il conteggio di scelte da zero, così uno è sottratto da position(..) per assicurare la corrispondenza degli indici.
selected-at(${issues}, position(..)-1)
È possibile utilizzare la funzione position(..) in combinazione con indexed-repeat() per estrarre i valori della domanda da record di ripetizione specifici.
Usa valori dalle ripetizioni indicizzate
La funzione indexed-repeat() può essere usata per restituire il valore da una domanda specifica in un record di ripetizione. Questo richiede il nome della domanda, il nome della ripetizione e il numero dell'indice della ripetizione, nell'ordine. L'esempio seguente restituisce la risposta alla domanda room_no per il terzo record nella ripetizione floor:
indexed-repeat(${room_no}, ${floor}, 3)
La funzione indexed-repeat() può essere usata anche per ripetizioni all'interno di ripetizioni. Se usato in questo modo, riceverà solo i valori accessibili dalla ripetizione padre visibile corrente.
Attenzione:
La funzione indexed-repeat() non può essere usata nella ripetizione a cui fa riferimento poiché si determinerebbe un riferimento circolare. Ad esempio, la seguente espressione non può essere usata per un calcolo nella ripetizione denominata defects:
indexed-repeat(${defect_type}, ${defects}, 3)
Limitazioni note
Di seguito sono indicate limitazioni note e comportamenti imprevisti quando si usano ripetizioni in Survey123:
- Se il rilevamento contiene una ripetizione vuota senza domande tra begin ripeat ed end repeat non sarà inviata alcune risposta al rilevamento.
- Se il rilevamento contiene più ripetizioni e una di esse presenta una domanda di geopunto, geotraccia o geoforma, la denominazione delle relazioni potrebbe non essere pubblicata in ordine.
- Le ripetizioni annidate supportano solo relazioni uno-a-molti, e ogni figlio può avere solo un genitore.
- Le ripetizioni nidificate con un'espressione nella colonna relevant e un'espressione nella colonna repeat_count eliminano tutti i dati esistenti salvati nel primo record di ripetizione. Per evitare ciò, incorporare l'espressione rilevante nell'espressione repeat_count in modo che nessun record di ripetizione venga creato quando la ripetizione non è rilevante.