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 Survey123 Mobile et l’application de terrain, 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 si 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 (sélection multiple) 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 (sélection multiple) 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).

Il est possible de créer une expression régulière à partir des sous-expressions présentées dans le tableau suivant :

Sous-expressionApparier

^

Correspond au début de la ligne.

$

Correspond à la fin de la ligne.

.

Correspond à tout caractère unique sauf une nouvelle ligne.

[...]

Correspond à tout caractère unique entre crochets.

[^...]

Correspond à tout caractère unique sans crochets.

(re)

Regroupe les expressions régulières et mémorise le texte apparié.

(?: re)

Regroupe les expressions régulières sans mémoriser le texte apparié.

a| b

Correspond soit à a soit à b.

\A

Début de la chaîne entière.

\b

Correspond aux limites de mot en dehors de crochets, et au retour arrière (0x08) à l’intérieur de crochets.

\B

Correspond à des limites non alphanumériques.

\d

Correspond à des chiffres. Elle équivaut à [0 à 9].

D

Correspond à des caractères qui ne sont pas des chiffres.

\G

Correspond au point où la dernière correspondance a fini.

\n, \t, \e, etc.

Correspond à une nouvelle ligne, une tabulation, un espace, etc.

\N

Référence arrière pour capturer le numéro N d’un groupe.

re*

Correspond à 0 occurrence ou plus de l’expression précédente.

re+

Correspond à 1 occurrence ou plus de l’expression précédente.

re?

Correspond à 0 ou 1 occurrence de l’expression précédente.

re{ n}

Correspond au nombre exact d’occurrences d’une expression précédente défini à la place de n.

re{ n,}

Correspond à n occurrences ou plus de l’expression précédente.

re{ n, m}

Correspond au minimum au nombre d’occurrences défini par n et, au maximum, défini par m dans l’expression précédente.

\s

Correspond à un espace blanc : onglet, saut de ligne, saut de page, retour chariot ou espace.

\S

Correspond à des caractères qui ne sont pas des espaces blancs.

\w

Correspond à des caractères alphanumériques.

\W

Correspond à des caractères non alphanumériques.

\z

Fin de la chaîne entière.

\Z

Fin de la chaîne entière, sauf terminateur de dernière ligne autorisé.

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 obtenir plus d’exemples sur l’utilisation d’une expression régulière afin d’ajouter une contrainte à une question d’enquête, consultez Formules.

Expressions conditionnelles

Une expression conditionnelle permet de déterminer si une instruction (condition) est vraie ou fausse, et permet de renvoyer la valeur désignée dans chacun des cas :

if(condition, value if true, value if false)

Dans l’exemple ci-dessous, si la réponse à question_one est affirmative, la réponse à la question actuelle est également affirmative. Si la réponse à question_one n’est pas affirmative, la réponse à la question actuelle est négative :

if(selected(${question_one}, 'yes'), 'yes', 'no')

Deux question peuvent être utilisées pour une condition. Dans l’exemple suivant, si la réponse à question_one et à question_two est affirmative les deux fois, la réponse à la question actuelle est également affirmative :

if(selected(${question_one}, 'yes') and selected(${question_two}, 'yes'), 'yes', 'no')

Dans l’exemple suivant, si la réponse à question_one ou à question_two est affirmative, la réponse à la question actuelle est également affirmative :

if(selected(${question_one}, 'yes') or selected(${question_two}, 'yes'), 'yes', 'no')

Les expressions conditionnelles peuvent également être imbriquées, mais il est important de toujours inclure une valeur que le scénario soit vrai ou faux. Dans l’exemple ci-dessous, si la réponse à question_one n’est pas affirmative, question_two est évaluée. Si question_two n’est pas non plus affirmative, question_three est évaluée. Si les réponses à question_one, à question_two et à question_three ne sont pas toutes affirmatives, la réponse à la question utilisant cette instruction est négative.

if(selected(${question_one}, 'yes'), 'yes', if(selected(${question_two}, 'yes'), 'yes', if(selected(${question_three}, 'yes'), 'yes', 'no')))