Repeaters : Différence entre versions
(10 révisions intermédiaires par le même utilisateur non affichées) | |||
Ligne 14 : | Ligne 14 : | ||
<h2 id="mise-en-place-exemple">Mise en place - exemple</h2> | <h2 id="mise-en-place-exemple">Mise en place - exemple</h2> | ||
<p>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. </p> | <p>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. </p> | ||
− | <p>Deuxièmement, il faut intégrer dans le formulaire ([[Fields- | + | <p>Deuxièmement, il faut intégrer dans le formulaire ([[Fields-Form]]) la question sur le nombre d’enfant. “Combien avez-vous d’enfants à déclarer ?” . Cette question est reliée à une variable (ex: NOMBRE_ENFANTS) 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.</p> |
<p>Pour toutes les nouvelles questions intégrées, il faut déclarer la variable correspondante dans le DataStore. </p> | <p>Pour toutes les nouvelles questions intégrées, il faut déclarer la variable correspondante dans le DataStore. </p> | ||
<p>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 : </p> | <p>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 : </p> | ||
Ligne 26 : | Ligne 26 : | ||
<p>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.</p> | <p>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.</p> | ||
<p>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 : </p> | <p>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 : </p> | ||
− | <p>reference: ENFANTS | + | <p><code>reference: ENFANTS</code></p> |
− | count: | + | <p><code>count: NOMBRE_ENFANTS</p></code> |
− | <p>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 | + | <p>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 <code>NOMBRE_ENFANTS</code>.</p> |
<p><strong>Cette configuration vous permet de faire répéter une section du formulaire pour un nombre de fois “dynamique”.</strong></p> | <p><strong>Cette configuration vous permet de faire répéter une section du formulaire pour un nombre de fois “dynamique”.</strong></p> | ||
<hr> | <hr> | ||
<h2 id="variables-sp-ciales-au-sein-des-l-ments-r-p-t-s-">Variables “spéciales” au sein des éléments répétés :</h2> | <h2 id="variables-sp-ciales-au-sein-des-l-ments-r-p-t-s-">Variables “spéciales” au sein des éléments répétés :</h2> | ||
+ | <h3 id="index_count">Compter le nombre de répétition et connaître l'itération actuelle</h3> | ||
<p>Il est possible d’utiliser des variables dans les titres des sections ou des questions. </p> | <p>Il est possible d’utiliser des variables dans les titres des sections ou des questions. </p> | ||
<p>Pour cela il faut utiliser la syntaxe suivante : <code>{VARIABLE}</code> (entre accolades)</p> | <p>Pour cela il faut utiliser la syntaxe suivante : <code>{VARIABLE}</code> (entre accolades)</p> | ||
− | <p>Dans le contexte d’un “repeater”, la variable de référence (celle qui a le type | + | <p>Dans le contexte d’un “repeater”, la [[variable de référence]] (celle qui a le type “[[DataStore#Type|list]]”) possède deux sous-variables : </p> |
<ul> | <ul> | ||
<li>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…</li> | <li>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…</li> | ||
<li>La seconde variable est nommée “_COUNT” et a pour valeur le nombre d’élément dans la liste. Ex: 5</li> | <li>La seconde variable est nommée “_COUNT” et a pour valeur le nombre d’élément dans la liste. Ex: 5</li> | ||
</ul> | </ul> | ||
− | <p>Ces variables sont toujours liées à une variable de type “list” et sont affichées en utilisant la syntaxe suivante : | + | <p>Ces variables sont toujours liées à une variable de type “list” et sont affichées en utilisant la syntaxe suivante : </p> |
− | Ex : {ENFANTS._COUNT} pour afficher le nombre d’enfants dans la liste</p> | + | <p>Ex : <code>{ENFANTS._COUNT}</code> pour afficher le nombre d’enfants dans la liste</p> |
+ | <p>Ex : <code>{ENFANTS._INDEX}</code> pour afficher le rang concerné pour cet enfant</p> | ||
+ | </br> | ||
+ | <p>Ces variables sont spéciales et doivent être utilisées '''sans''' être déclarées sur le [[DataStore]].</p> | ||
+ | <h3 id="list_sum">Faire une somme sur une sous-variable de liste : la fonction list_sum</h3> | ||
+ | <h4 id="contexte">Contexte</h4> | ||
+ | <p>Il est parfois nécessaire d'additionner les différentes répétitions d'une même sous-variable d'un repeater.</p> | ||
+ | <p>Par exemple, dans cette situation :</p> | ||
+ | [[Fichier:List sum chemises.png|500px|vignette|néant|Une sous-variable répétée demande ici le prix d'une chemise. Comment faire pour obtenir la somme des prix de toutes les chemises ?]] | ||
+ | <h4 id="contexte">Paramétrage</h4> | ||
+ | <p>Le paramétrage prend la forme d'une simple [[SmartExpressions#Additionner_les_r.C3.A9p.C3.A9titions_d.27une_sous-variable_d.27un_repeater|fonction]] de [[Dynvars|Dynvar]], sous la forme suivante :</p> | ||
+ | <p><code>list_sum(VARIABLE_LISTE,"SOUS_VARIABLE")</code></p> | ||
+ | <p>Pour obtenir le prix de toutes les Chemises dans l'exemple ci-dessus, il faudra paramétrer une [[Dynvars|Dynvar]] dont la [[Dynvars#Formule|formule]] sera <code>list_sum(CHEMISES,"prix")</p> | ||
+ | <h2 id="ccl">Conclusion</h2> | ||
<blockquote> | <blockquote> | ||
− | <p>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]] | + | <p>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]] |
</p> | </p> | ||
</blockquote> | </blockquote> |
Version actuelle datée du 28 août 2020 à 13:10
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 (Fields-Form) la question sur le nombre d’enfant. “Combien avez-vous d’enfants à déclarer ?” . Cette question est reliée à une variable (ex: NOMBRE_ENFANTS) 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: NOMBRE_ENFANTS
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 NOMBRE_ENFANTS
.
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 :
Compter le nombre de répétition et connaître l'itération actuelle
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
Ex : {ENFANTS._INDEX}
pour afficher le rang concerné pour cet enfant
Ces variables sont spéciales et doivent être utilisées sans être déclarées sur le DataStore.
Faire une somme sur une sous-variable de liste : la fonction list_sum
Contexte
Il est parfois nécessaire d'additionner les différentes répétitions d'une même sous-variable d'un repeater.
Par exemple, dans cette situation :
Paramétrage
Le paramétrage prend la forme d'une simple fonction de Dynvar, sous la forme suivante :
list_sum(VARIABLE_LISTE,"SOUS_VARIABLE")
Pour obtenir le prix de toutes les Chemises dans l'exemple ci-dessus, il faudra paramétrer une Dynvar dont la formule sera list_sum(CHEMISES,"prix")
Conclusion
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