Bucle for-each

Esta es el bucle más sencillo, ya que siempre se comporta de la misma manera. Cuando se añade un bucle for-each a un script, debe especificarse una entidad del Almacén de datos para utilizarla en el bucle. Cuando el sistema se encuentra con el bucle, recupera todas las instancias de dicha entidad dentro de su entidad padre y realiza una iteración del bucle (presentando cada página dentro del bucle) por cada instancia devuelta. ´Por ejemplo, el bucle siguiente puede utilizarse para mostrar la página ExtraPersonDetailsPage (página de detalles adicionales de persona) de cada persona en esta solicitud (la entidad raíz del ejemplo anterior):

Figura 1. Bucle for-each
<loop loop-type="for-each" entity="Person">
  <question-page id="ExtraPersonDetailsPage">
    ...        
  </question-page>
</loop>

Lo más frecuente es que no se desee iterar todas las instancias de una entidad, en cuyo caso puede añadirse un criterio que utilice el sistema para seleccionar solo aquellas instancias de la entidad que coincidan con el criterio. Por ejemplo, para iterar por todas las personas cuyo atributo 'hasIncome' se haya establecido a true, utilice un bucle como el siguiente:

Figura 2. Bucle for-each con criterio
<loop loop-type="for-each" entity="Person" 
criteria="hasIncome==true"> 
  <question-page id="IncomeDetailsPage" entity="Income"> 
    ...       
  </question-page>
</loop>

Si se utiliza un criterio en un bucle for-each, se recomienda que dicho criterio contenga una expresión simple que solo haga referencia a un único atributo de tipo booleano (por ejemplo, "hasIncome==true"). Si se hace referencia a un único atributo en el criterio, IEG puede actualizar automáticamente dicho atributo utilizando enlaces de resumen (por ejemplo, el atributo puede establecerse a false cuando todas las entidades anidadas se eliminan, o puede establecerse a true cuando se añade la primera entidad anidada). Esta funcionalidad no está disponible si el criterio contiene una expresión compleja. También se recomienda definir un valor predeterminado en el esquema de almacén de datos de este atributo.