Réutiliser une expression de boucle existante - 8.0

Guide de référence des fonctions de Talend Data Mapper

Version
8.0
Language
Français
Product
Talend Big Data Platform
Talend Data Fabric
Talend Data Management Platform
Talend Data Services Platform
Talend MDM Platform
Talend Real-Time Big Data Platform
Module
Studio Talend
Content
Création et développement > Création de Jobs
Last publication date
2023-10-26

Utilisez une fonction LoopReference (Référence de boucle) pour réutiliser une expression de boucle précédemment définie dans un autre élément.

Avant de commencer

Vous avez créé une map avec une structure d'entrée et de sortie. Vous pouvez utiliser les échantillons fournis ci-dessous.

Pourquoi et quand exécuter cette tâche

Dans cet exemple, un fichier XML contient des informations clients. Chaque élément customer contient le nom et l'État du client ou de la cliente. Vous souhaitez créer une sortie XML dans laquelle les client·es sont groupé·es par État. Vous pouvez utiliser l'échantillon XML suivant en entrée :
<customers>
	<customer>
		<lastName>Harrison</lastName>
		<firstName>Emily</firstName>
		<state>New Jersey</state>
	</customer>
	<customer>
		<lastName>Reagan</lastName>
		<firstName>James</firstName>
		<state>New Jersey</state>
	</customer>
	<customer>
		<lastName>Smith</lastName>
		<firstName>Karen</firstName>
		<state>Texas</state>
	</customer>
</customers>
Vous pouvez utiliser l'échantillon XML suivant pour créer votre structure de sortie :
<root>
	<customers>
		<state/>
		<customer>
			<lastName/>
			<firstName/>
		</customer>
		<customer>
			<lastName/>
			<firstName/>
		</customer>
	</customers>
	<customers>
		<state/>
		<customer>
			<lastName/>
			<firstName/>
		</customer>
		<customer>
			<lastName/>
			<firstName/>
		</customer>
	</customers>
</root>

Procédure

  1. Cliquez-droit sur l'élément de sortie customers et sélectionnez Split Loop pour créer une boucle séparée pour chaque valeur state.
  2. Cliquez sur la première boucle customers dans la structure de sortie et glissez-déposez une fonction FixedLoop dans son onglet Loop.
    Cela est utilisé pour indiquer que la sortie ne doit produire qu'une itération de cette boucle.
  3. Glissez-déposez une fonction Constant sur le premier élément de sortie Then, double-cliquez sur la fonction et saisissez New Jersey dans le champ Value, puis cliquez sur OK.
  4. Glissez-déposez l'élément d'entrée customer sur le premier élément de sortie customer.
    Une fonction SimpleLoop est automatiquement ajoutée.
  5. Glissez-déposez une fonction Equal sur l'argument Filter de la fonction SimpleLoop.
  6. Glissez-déposez l'élément d'entrée state sur l'argument First Value et glissez-déposez le premier élément de sortie state sur l'argument Second Value.
  7. Cliquez sur l'élément customers[2] et glissez-déposez une fonction FixedLoop dans son onglet Loop.
  8. Glissez-déposez une fonction Constant sur le second élément de sortie state et configurez sa valeur à Texas.
  9. Cliquez sur la seconde boucle de sortie customer et glissez-déposez une fonction LoopReference dans son onglet Loop.
  10. Glissez-déposez la première boucle de sortie customer sur l'argument Map Element.
    Cela vous permet de spécifier que la boucle utilisée dans cet élément doit être la même que celle définie dans le premier élément customer. À la différence de la fonction LoopCopy, LoopReference n'applique pas les filtres ou les clés de tri défini·es dans la boucle référencée.
  11. Ajoutez une fonction Equal à l'argument Filter et configurez l'entrée state à First Value et la seconde sortie state à Second Value.
  12. Glissez-déposez l'élément d'entrée customer sur la seconde sortie customer afin de mapper les éléments enfants.

Résultats

Votre map est configurée et doit ressembler à ceci :
Vous pouvez utiliser la fonctionnalité Test Run pour voir le résultat. Dans cet exemple, la sortie suivante est retournée :
<root>
  <customers>
    <state>New Jersey</state>
    <customer>
      <lastName>Harrison</lastName>
      <firstName>Emily</firstName>
    </customer>
    <customer>
      <lastName>Reagan</lastName>
      <firstName>James</firstName>
    </customer>
  </customers>
  <customers>
    <state>Texas</state>
    <customer>
      <lastName>Smith</lastName>
      <firstName>Karen</firstName>
    </customer>
  </customers>
</root>