Repeaters
Sommaire
Les repeaters
Il est recommandé de lire conjointement la page relative aux Boucles, les deux notions étant étroitement liées.
Définition
Les répéteurs permettent de faire répéter une section du formulaire autant de fois que nécessaire.
Contexte
Comment gérer le cas d’une question, ou d’un groupe de questions, que l’on voudrait faire afficher un nombre de fois “indéfini” ?
Par exemple : je souhaite demander le prénom et l'âge des enfants de mon client, mais je ne sais pas à l’avance combien mon client a d’enfants. Peut-être aucun, peut-être un seul, peut-être 10… Je souhaite donc répéter ces questions autant de fois qu’il a d’enfant. “Quel est le prénom de votre 1er enfant ? Son âge ? … Quel est le prénom de votre 2ème enfant ? Son âge ?”
Autre exemple : je souhaite identifier des parties à un contrat. Or, pour certains types de contrats, il peut parfois y avoir plusieurs parties d'un côté ou de l'autre. Un contrat de cession de parts sociales pourra souvent avoir plusieurs cédant et/ou plusieurs cessionnaires. Il faut donc prévoir cette hypothèse dans le paramétrage : c'est-à-dire prévoir de laisser à l'utilisateur final le choix entre un cédant, deux cédants, trois cédants, etc ... Pareil du côté des cessionnaires ...
C'est précisément à ces problématiques que répondent les repeaters.
Mise en place - exemple
Premièrement, il faut déclarer une variable de type “list” dans le Datastore, elle servira à stocker les informations sur les N enfants souhaités.
Deuxièmement, il faut intégrer dans le formulaire (Field-form) la question sur le nombre d’enfant. “Combien avez-vous d’enfants à déclarer ?” . Cette question est reliée à une variable (ex: ENFANT_NB) qui doit être de type “numeric” puisqu’elle va recevoir un “nombre”. Les contraintes d’intégrité du DataStore (min et max) peuvent permettre de limiter à un nombre minimal ou maximal la réponse à cette question.
Pour toutes les nouvelles questions intégrées, il faut déclarer la variable correspondante dans le DataStore.
Cependant, les variables étant associées non plus au dossier, mais à chacun des éléments de la liste, il faut en tenir compte dans le choix du nom de la variable. Par exemple, pour une liste d’enfants, pour laquelle on veut stocker son prénom et son âge , il faudra créer les variables suivantes :
ENFANTS - type list
ENFANTS.PRENOM - type string
ENFANTS.AGE - type numeric
En image :
Ensuite, ll faut créer la section (= le groupe de question) que l’on souhaite faire répéter N fois. Cela se règle donc au niveau du Sections-Form, puis au niveau du Fields-Form dans lequel on doit déclarer les questions concernant chaque enfant.
Enfin, il faut déclarer cette section comme “répétable”. Pour cela, dans le Sections-Form, dans la colonne dédiée (colonne G, “Repeaters”), il faut indiquer :
reference: ENFANTS count: ENFANTS_NB
La première ligne (avec l’attribut “référence”) indique que la variable de référence pour chaque occurrence du “repeater” est la variable “ENFANTS”, et la seconde ligne, avec l’attribut “count”, indique qu’il faut répéter autant de fois que l’indique la variable ENFANTS_NB.
Cette configuration vous permet de faire répéter une section du formulaire pour un nombre de fois “dynamique”.
Variables “spéciales” au sein des éléments répétés :
Il est possible d’utiliser des variables dans les titres des sections ou des questions.
Pour cela il faut utiliser la syntaxe suivante : {VARIABLE}
(entre accolades)
Dans le contexte d’un “repeater”, la variable de référence (celle qui a le type “list”) possède deux sous-variables :
- La première est nommée “_INDEX” et a pour valeur l’index numérique de l'occurrence courante. Ex: 1, puis, 2, puis 3…
- La seconde variable est nommée “_COUNT” et a pour valeur le nombre d’élément dans la liste. Ex: 5
Ces variables sont toujours liées à une variable de type “list” et sont affichées en utilisant la syntaxe suivante : Ex : {ENFANTS._COUNT} pour afficher le nombre d’enfants dans la liste
Une fois les différentes questions répétées, il faut généralement aussi répéter les mêmes informations dans un SmartDoc : il faut donc utiliser les Boucles