Altova MapForce 2025 Professional Edition

Exemple : Grouper et sous-grouper des enregistrements

Accueil Préc Haut Suivant

Le mappage illustré dans cet exemple est disponible sous DividePersonsByDepartmentIntoGroups.mfd dans le dossier <Documents>\Altova\MapForce2025\MapForceExamples\.

 

Ce mappage traite un fichier XML qui contient des enregistrements d'employés d'une compagnie fictionnelle. L'entreprise a deux bureaux : "Nanonull, Inc." et "Nanonull Partners, Inc". Chaque bureau possède plusieurs départements (par exemple, "IT", "Marketing", etc.), et chaque département compte un ou plusieurs employés. L'objectif du mappage est de créer des groupes d'un maximum de trois personnes de chaque département, quelque soit le bureau. La taille de chaque groupe est de trois par défaut ; néanmoins, cela devrait être simple à changer le cas échéant. Chaque groupe doit être enregistré en tant que fichier XML séparé, et le nom doit présenter le format "<Department Name>_GroupN" (par exemple, Marketing_Group1.xml, Marketing_Group2.xml, etc.).

mf_map_DividePersons

DividePersonsByDepartmentIntoGroups.mfd

Comme illustré ci-dessus, afin de pouvoir atteindre l'objectif de mappage, une variable complexe a été ajoutée au mappage, et quelques autres types de composant (surtout des fonctions). La variable présente la même structure qu'un item Department dans le XML de source. Si vous cliquez avec la touche de droite sur la variable pour consulter ses propriétés, vous remarquerez qu'elle utilise le même schéma XML que le composant de source, et contient Department en tant qu'élément de racine. Chose importante, la variable comporte deux items parent-context imbriqués, qui assurent que la variable est calculée tout d'abord dans le contexte de chaque département, et puis dans le contexte de chaque groupe dans le cadre de chaque département (voir aussi Changer le contexte et l'étendue des variables).

 

Au début, le mappage itère à travers tous les départements pour obtenir le nom de chaque département (cela sera ensuite exigé pour créer le nom de fichier correspondant à chaque groupe). Cela est réalisé en connectant la fonction group-by dans l'item de source Department, et en fournissant le nom du département en tant que clé de regroupement.

 

Ensuite, dans le contexte de chaque département, un deuxième groupement a lieu : le mappage appelle la fonction group-into-blocks pour créer les groupes des personnes requis. La taille de chaque groupe est fournie par un composant d'entrée simple d'une valeur par défaut de "3". La valeur par défaut est fournie par une constante. Dans cet exemple, afin de changer la taille de chaque groupe, il est facilement possible de modifier la valeurs constante selon vos besoins. Néanmoins, le composant d'entrée "size" peut aussi être modifié de manière à ce que, si le mappage est exécuté par le code généré ou avec MapForce Server, la taille de chaque groupe peut être fournie en tant qu'un paramètre dans le mappage. Pour plus d'informations, voir Fournir des paramètres au mappage.

 

Enfin, la valeur de la variable est fournie dans le composant XML PersonList cible. Le nom de fichier pour chaque groupe créé a été calculé en concaténant les parties suivantes, par le biais de la fonction concat :

 

1.Le nom de chaque département

2.Le string "_Group"

3.Le numéro du groupe dans la séquence actuelle (par exemple, "1" s'il s'agit du premier groupe pour ce département)

4.Le string ".xml"

 

Le résultat de cette concaténation est stocké dans l'item Name de la variable, puis est fourni en tant que nom de fichier dynamiques dans le composant cible. Cela entraîne la création d'un nouveau nom de fichier pour chaque valeur reçue. Dans cet exemple, la variable calcule huit groupes au total, donc huit fichiers de sortie sont créés lorsque le mappage est exécuté, le cas échéant. Pour plus d'informations concernant cette technique, voir Traiter plusieurs fichiers d'entrée ou de sortie dynamiquement.

© 2018-2024 Altova GmbH