Grouper des itérations de boucles - 7.3

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

Version
7.3
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-01-09

Utilisez une fonction SimpleLoop avec une propriété Distinct Child Element afin de regrouper des itérations de boucles basées sur la valeur d'un élément enfant.

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 relatives à des commandes. Il contient plusieurs éléments item, dont certains appartiennent à la même commande. L'objectif est de créer un fichier XML avec une entrée unique par commande contenant l'ID de commande, les informations d'expédition et la liste des éléments. Vous pouvez utiliser l'échantillon XML suivant en entrée :
<orders>
  <item>
    <itemId>1268168</itemId>
    <orderId>45632</orderId>
    <customerName>John Smith</customerName>
    <shipping>
      <street>South Highway</street>
      <city>San Diego</city>
      <state>California</state>
    </shipping>
  </item>
  <item>
    <itemId>1684157</itemId>
    <orderId>45632</orderId>
    <customerName>John Smith</customerName>
    <shipping>
      <street>South Highway</street>
      <city>San Diego</city>
      <state>California</state>
    </shipping>
  </item>
  <item>
    <itemId>1168468</itemId>
    <orderId>46987</orderId>
    <customerName>Jane Harrison</customerName>
    <shipping>
      <street>Bailard Avenue</street>
      <city>Los Angeles</city>
      <state>California</state>
    </shipping>
  </item>
  <item>
    <itemId>1544417</itemId>
    <orderId>46987</orderId>
    <customerName>Jane Harrison</customerName>
    <shipping>
      <street>Bailard Avenue</street>
      <city>Los Angeles</city>
      <state>California</state>
    </shipping>
  </item>
  <item>
    <itemId>1168468</itemId>
    <orderId>47949</orderId>
    <customerName>Jack Monroe</customerName>
    <shipping>
      <street>Steele Lane</street>
      <city>Las Vegas</city>
      <state>Nevada</state>
    </shipping>
  </item>
  <item>
    <itemId>1388147</itemId>
    <orderId>47949</orderId>
    <customerName>Jack Monroe</customerName>
    <shipping>
      <street>Steele Lane</street>
      <city>Las Vegas</city>
      <state>Nevada</state>
    </shipping>
  </item>
</orders>
Vous pouvez utiliser l'échantillon XML suivant pour créer votre structure de sortie :
<orders>
	<order>
		<orderId/>
		<customerName/>
		<shipping>
			<street/>
			<city/>
			<state/>
		</shipping>
		<items>
			<itemId/>
			<itemId/>
		</items>
	</order>
	<order>
		<orderId/>
		<customerName/>
		<shipping>
			<street/>
			<city/>
			<state/>
		</shipping>
		<items>
			<itemId/>
			<itemId/>
		</items>
	</order>
</orders>

Procédure

  1. Glissez-déposez l'élément d'entrée item sur l'élément de sortie order, afin de mapper tous leurs éléments enfants.
    Une fonction SimpleLoop est automatiquement ajoutée. SI vous utilisez l'option Test Run à ce moment, la sortie contient un élément order pour chaque itération de l'élément d'entrée item.
  2. Double-cliquez sur la fonction SimpleLoop pour ouvrir ses propriétés.
  3. Sélectionnez orderId dans la liste déroulante Distinct Child Element et cliquez sur OK.
    Cette option vous permet de spécifier que chaque valeur orderId doit apparaître une seule fois dans la sortie.
  4. Glissez-déposez l'élément itemId dans la sortie correspondante.
  5. Ouvrez l'onglet Loop pour l'élément de sortie itemId et glissez-déposez une fonction SimpleLoop.
  6. Glissez-déposez l'élément d'entrée item dans l'argument Input Map Element.
  7. Glissez-déposez une fonction Equal sur l'argument Filter.
  8. Glissez-déposez l'élément d'entrée orderId sur l'argument First Value et glissez-déposez l'élément de sortie orderId sur l'argument Second Value.
    Cette expression vous permet de retourner tous les éléments itemId associés à l'itération courante de l'élément orderId.

Résultats

Votre map est à présent configurée. Vous pouvez utiliser la fonctionnalité Test Run pour voir le résultat. Dans cet exemple, la sortie suivante est retournée :
<orders>
  <order>
    <orderId>45632</orderId>
    <customerName>John Smith</customerName>
    <shipping>
      <street>South Highway</street>
      <city>San Diego</city>
      <state>California</state>
    </shipping>
    <items>
      <itemId>1268168</itemId>
      <itemId>1684157</itemId>
    </items>
  </order>
  <order>
    <orderId>46987</orderId>
    <customerName>Jane Harrison</customerName>
    <shipping>
      <street>Bailard Avenue</street>
      <city>Los Angeles</city>
      <state>California</state>
    </shipping>
    <items>
      <itemId>1168468</itemId>
      <itemId>1544417</itemId>
    </items>
  </order>
  <order>
    <orderId>47949</orderId>
    <customerName>Jack Monroe</customerName>
    <shipping>
      <street>Steele Lane</street>
      <city>Las Vegas</city>
      <state>Nevada</state>
    </shipping>
    <items>
      <itemId>1168468</itemId>
      <itemId>1388147</itemId>
    </items>
  </order>
</orders>