Double itération

La double itération, ou itération imbriquée, consiste à placer une itération à l’intérieur d’une autre. Chaque élément (DataIterator) exécute sa propre boucle sur son ensemble de données.
En pratique, l’internalName du premier DataIterator sert de préfixe au DataPath du second DataIterator. La réussite d’une double itération repose donc sur une bonne compréhension du fonctionnement du DataIterator.


Cas pratique du formulaire d’enrôlement des étudiants

Contexte du cas pratique : Chaque étudiant doit avoir une fiche contenant ses informations personnelles et ses diplômes.


Pour cet exercice, commencez par mettre en place :

  • Une section représentant la fiche de chaque étudiant, qui sera itérée en fonction de leur nombre.

  • Un content de cette section représentant les diplômes sera également itéré en fonction du nombre de diplômes de chaque étudiant.

Liste des attributs du 1er DataIterator

Ce premier DataIterator permet d’itérer sur la liste des étudiants, chaque itération correspondant à une fiche individuelle.

  • DataPath = ETUDIANTS

  • InternalName : id

Liste des attributs du 2nd DataIterator

Ce second DataIterator, placé à l’intérieur du premier, itère sur les diplômes associés à chaque étudiant.

  • DataPath = id|Diplomes

  • InternalName : diplome


Bon à savoir

  • L’internalName par défaut est nommé item.

  • Il est également possible de mettre en place une triple itération : le principe reste le même.

  • On peut itérer une Section qui contient un Content itératif, lui-même contenant une liste itérative.


Exemple de code JXML

<Section IsReadOnly="" NewPage="screen" OutputMode="all" OutputTarget="all" Type="standard">
  <Title TradId="2">Double itération (Enrôlement étudiant)</Title>

  <Section Type="standard" OutputMode="all" OutputTarget="all" NewPage="screen">
    <DataIterator AddInsert="false" Counter="countetudiant" DataPath="ETUDIANTS" InternalName="id"/>
    <Title>Fiche n°<Data Expression="$(countetudiant)+1" TradId="4"/></Title>

    <Content OutputMode="all" OutputTarget="all" NewPage="none" StyleName="remark">
      <QuestionSet HorizontalAlignment="left" LabelHorizontalAlignment="left" LabelPosition="auto"
                   OutputMode="all" OutputTarget="all" Spacing="normal" StyleName="fieldset">
        <Title TradId="3">Identification étudiant n° <Data Expression="$(countetudiant)+1" TradId="4"/></Title>

        <Question>
          <Label IsTooltipOnly="false" TradId="5">Nom</Label>
          <TextBox AutoSize="false" DataType="string" Name="id|Nom" NumberOfVisibleCharacters="15" RefreshOnExit="false"/>
        </Question>

        <Question>
          <Label IsTooltipOnly="false" TradId="6">Prénom</Label>
          <TextBox AutoSize="false" DataType="string" Name="id|Prenom" NumberOfVisibleCharacters="15" RefreshOnExit="false"/>
        </Question>

        <Question>
          <Label IsTooltipOnly="false" TradId="7">Âge</Label>
          <NumberBox AutoSize="false" FractionDigits="0" Name="id|Age" NumberOfVisibleCharacters="15" RefreshOnExit="false">
            <Description>Âge en années</Description>
          </NumberBox>
        </Question>
      </QuestionSet>
    </Content>

    <Content NewPage="none" OutputMode="all" OutputTarget="all" StyleName="definition">
      <DataIterator AddInsert="false" Counter="countdiplome" DataPath="id|DIPLOMES" InternalName="diplome"/>
      <Paragraph OutputMode="all" OutputTarget="all" Spacing="normal" TradId="10">Diplôme n° <Data Expression="$(countdiplome)+1" TradId="11"/></Paragraph>

      <QuestionSet OutputMode="all" OutputTarget="all" LabelHorizontalAlignment="left" LabelPosition="auto"
                   Spacing="normal" HorizontalAlignment="left" StyleName="oddEven">

        <Question>
          <Label IsTooltipOnly="false" TradId="12">Nom du diplôme</Label>
          <TextBox AutoSize="false" DataType="string" Name="diplome|Nom" NumberOfVisibleCharacters="30" RefreshOnExit="false"/>
        </Question>

        <Question>
          <Label IsTooltipOnly="false" TradId="12">Nom de l'établissement</Label>
          <TextBox AutoSize="false" DataType="string" Name="diplome|Etablissement" NumberOfVisibleCharacters="30" RefreshOnExit="false"/>
        </Question>

        <Question>
          <Label IsTooltipOnly="false" TradId="13">Date de délivrance</Label>
          <DateBox RefreshOnExit="false" Name="diplome|DateDelivrance" Format="form">
            <Description>Date de délivrance</Description>
          </DateBox>
        </Question>
      </QuestionSet>

      <Paragraph OutputMode="all" OutputTarget="all" Spacing="normal" HorizontalAlignment="right">
        <IteratorControlButton Type="delete">Supprimer</IteratorControlButton>
        <IteratorControlButton Type="insertAfter">Ajouter après</IteratorControlButton>
      </Paragraph>
    </Content>

    <Content OutputMode="all" OutputTarget="all" NewPage="none" StyleName="warning">
      <Paragraph HorizontalAlignment="right" OutputMode="all" OutputTarget="all" Spacing="normal">
        <IteratorControlButton Type="delete">Supprimer</IteratorControlButton>
        <IteratorControlButton Type="insertAfter">Ajouter après</IteratorControlButton>
      </Paragraph>
    </Content>
  </Section>
</Section>


Mode flow

1er DataIterator

2nd DataIterator


Rendu visuel

Dernière modification le 19-10-2025

Lorsque vous naviguez sur le campus Jway, des informations sont susceptibles d'être enregistrées (cookies) sur votre terminal pour personnaliser vos contenus et votre navigation.

Nous n'utilisons que des cookies indispensables au bon fonctionnement de ce site et dont le seul objectif est d'améliorer notre service aux usagers.

En savoir plus