La boucle For-each

Il s'agit de la forme de boucle la plus simple disponible, car elle se comporte de la même manière. Lors de l'ajout d'une boucle for-each à votre script, vous devez indiquer une entité dans le magasin de données à utiliser pour la boucle. Lorsque le système détecte la boucle, il extrait toutes les instances de cette entité au sein de son entité parent, et effectue une itération de la boucle (en présentant chaque page dans la boucle) pour chaque instance renvoyée. Par exemple, la boucle suivante peut être utilisée pour afficher la page ExtraPersonDetailsPage pour chaque personne de cette application (l'entité racine dans notre exemple ci-dessus) :

Figure 1. Boucle For-each
<loop loop-type="for-each" entity="Person">
  <question-page id="ExtraPersonDetailsPage">
    ...        
  </question-page>
</loop>

En règle générale, vous ne devez pas utiliser une boucle sur toutes les instances d'une entité, auquel cas vous pouvez ajouter un critère que le système utilisera pour sélectionner uniquement les instances de l'entité qui correspondent aux critères. Par exemple, pour réaliser une boucle sur toutes les personnes pour lesquelles l'attribut "hasIncome" a été défini sur " true", utilisez une boucle comme suit :

Figure 2. Boucle For-each avec critères
<loop loop-type="for-each" entity="Person" 
criteria="hasIncome==true"> 
  <question-page id="IncomeDetailsPage" entity="Income"> 
    ...       
  </question-page>
</loop>

Si un critère est utilisé dans une boucle for-each, les critères doivent contenir de préférence une expression simple, se rapportant à un attribut unique de type booléen (par exemple "hasIncome==true"). Si un attribut unique est indiqué dans les critères, l'attribut peut être automatiquement mis à jour par IEG lors de l'utilisation de liens récapitulatifs (par exemple, lorsque toutes les entités imbriquées sont supprimées, l'attribut peut être défini sur false ; lorsque la première entité imbriquée est ajoutée, l'attribut peut être défini sur true). Cette fonctionnalité n'est pas disponible si le critère contient une expression complexe. Il est également recommandé de définir une valeur par défaut dans le schéma du magasin de données pour cet attribut.