Expressions de formulaire

Vous pouvez utiliser des expressions dans une enquête pour contrôler le comportement par défaut des questions. Il est possible de masquer et d’afficher une question ou un groupe de questions en fonction des réponses précédentes, en utilisant des expressions dans la colonne relevant (pertinent). Lorsqu’une question est masquée via une expression dans la colonne relevant (pertinent), aucune donnée n’est envoyée pour la question.

Remarque :

Dans l’application de terrain ArcGIS Survey123, si une réponse est saisie pour une question qui est ensuite masquée en raison d’une expression relevant (pertinent), la réponse est effacée. Si la question redevient pertinente, une nouvelle réponse doit être saisie. Dans l’application Web, la réponse n’est pas effacée. Ainsi, si la question redevient pertinente, la réponse saisie précédemment est utilisée.

Vous pouvez également appliquer des expressions à la colonne readonly (lecture seule), ce qui peut désactiver la saisie pour une question ou un groupe en fonction du résultat de l’expression. La colonne required (obligatoire) prend également en charge les expressions, si bien que l’enquête peut contraindre l’utilisateur à répondre à une question uniquement dans des conditions particulières.

Remarque :

Les expressions en lecture seule ne sont pas prises en charge dans lʼapplication Web.

Les questions précédentes doivent toujours être indiquées au format ${field_name} dans les expressions.

Visibilité des questions

Vous pouvez masquer une question à l’aide d’une expression qui utilise la colonne body::esri:visible. Cette colonne masque la question si l’expression qu’elle contient n’est pas évaluée comme vraie, tout en conservant le contenu de la question. Par exemple, l’expression ${edit_location}='yes' entraîne l’affichage de la question uniquement si la question edit_location est égale à yes.

Ce comportement est similaire à celui de la colonne relevant (pertinent), les deux colonnes masquant une question jusqu’à ce que l’expression de la colonne soit vraie. La principale différence concerne body::esri:visible qui n’efface pas la valeur d’une question rendue invisible par l’expression et envoie les valeur existantes à la couche d’entités. Utilisez la colonne relevant (pertinent) au lieu de body::esri:visible lorsque vous voulez vous assurer que la question n’a pas de valeurs calculées ni stockées lorsqu’elle n’est pas pertinente.

Pour contrôler la visibilité de la question, lors de l’utilisation des colonnes body::esri:visible ou relevant (pertinent), son caractère obligatoire, les valeurs par défaut, les contraintes et les masques d’entrée sont uniquement appliqués lorsque la question est visible.

Vous pouvez également contrôler la visibilité des questions à l’aide des questions masquées et de l’apparence masquée, mais ces paramètres ne sont pas contrôlables par une expression.

Remarque :

Les questions Image, Audio et Fichier ne peuvent pas être masquées par la colonne body::esri:visible.

Expressions simples

La meilleure manière d’utiliser l’une de ces expressions consiste à modifier le comportement ou la visibilité de la question, si aucune réponse n’a encore été apportée. Par exemple, l’expression suivante vérifie si la réponse à la question précédente est true (vrai) :

${previous_question} = 'true'

L’exemple suivant vérifie si la réponse à la question précédente était supérieure ou égale à 100 :

${previous_question} < 100

Les questions de type select_multiple (choix multiples) conservent les valeurs différemment des autres types de questions, les réponses cochées étant saisies dans l’ordre dans lequel elles ont été sélectionnées, séparées par des virgules. Par exemple, le fait de sélectionner les réponses A et B dans cet ordre présente la réponse sous la forme « A,B ». Pour utiliser une question select_multiple (choix multiples) dans le cadre d’une expression, vous devez utiliser la fonction selected. L’exemple suivant vérifie si l’utilisateur a répondu A à la question précédente, et s’applique quelles que soient les autres réponses choisies :

selected(${previous_question}, 'A')

La fonction count-selected compte le nombre d’options qui ont été sélectionnées dans une question select_multiple (choix multiples) et fournit un nombre à utiliser comme opérateur. L’exemple suivant vérifie si plus de deux choix ont été sélectionnés pour la question précédente :

count-selected(${previous_question}) > 2

Vous pouvez utiliser la fonction count-selected en tant que contrainte sur les questions de type image ou file (fichier) avec l’apparence multiline afin de contrôler le nombre de fichiers envoyés.

Expressions mathématiques

L’exemple suivant associe plusieurs opérateurs et questions :

${previous_question} + ${other_previous_question} <= 100

Lorsque vous utilisez des opérateurs mathématiques, vous pouvez être amené à redéfinir des valeurs en nombres. Les exemples précédents supposaient que previous_question et other_previous_question étaient des nombres entiers ou décimaux, mais si les questions sont de type chaîne, redéfinissez-les de la manière suivante :

int(${previous_question}) + int(${other_previous_question}) <= 100

Vous pouvez également exécuter des expressions mathématiques sur des questions date, qui sont enregistrées au format Epoch, soit le nombre de millisecondes écoulées depuis le 1er janvier 1970. L’expression suivante révèle une question uniquement si la réponse à la question précédente remonte à plus de deux semaines avant la date du jour :

if( ${previous_question}='',false,today() - ${previous_question} > 1000*60*60*24*15)

Expressions régulières

Une expression régulière est une séquence de caractères utilisée pour correspondre aux modèles des chaînes. Dans Survey123 si le modèle est respecté, l’expression renvoie true (vrai). Sinon, l’expression renvoie false (faux).

Vous pouvez utiliser des expressions régulières dans n’importe quelle colonne pour modifier le comportement d’une question, sauf si la chaîne fournie par une autre question est dans un format donné. L’exemple suivant, une fois placé dans la colonne relevant (pertinent), affiche une question uniquement si la réponse à une autre question ne contient qu’une lettre :

regex(${question},'[A-Za-z]')

L’exemple suivant, une fois placé dans la colonne choice_filter d’une question select_one pour les noms de rue, affiche seulement les choix de rue qui se trouvent dans la liste citystreets correspondant au nom de la ville sélectionnée dans une question précédente nommée city :

regex(citystreets,${city})

Pour plus d’informations sur les expressions régulières, reportez-vous à la rubrique Formules.