Le passage d’un format de message à plat à un message avec des nœuds qui se répètent est une problématique fréquente. Biztalk et son mapper permettent assez simplement de réaliser ces transformations. Concrètement, ce mapping sert à passer d’un schéma source structuré (à plat) vers une structure de type « clé / valeur ».
Cet article propose un exemple d’utilisation des map Biztalk et des functoids Table Looping & Table Extractor pour réaliser la transformation. L’exemple est réalisé avec Microsoft Biztalk 2013 R2 et Visual Studio 2013.
Ci-dessous, les deux schémas des messages qui nous servent d’exemples. La map Biztalk va nous permettre de transformer les messages du format de gauche vers celui de droite.
Si on analyse le schéma xsd cible, notez que le nœud « Parameters » est répétable.
Maintenant que les différents schémas sont présentés, focalisons nous sur la map Biztalk. Nous créons une map, choisissons les schémas source et cible, puis nous insérons le functoid
Le functoid Table Looping prend les deux entrées suivantes :
Après ces deux paramètres, tous les autres paramètres liés au functoid viendrions peupler le tableau de données.
Pour configurer notre functoid Table Looping, nous utilisons le nœud « Order » comme scope et nous précisons que nous souhaitons 2 colonnes dans notre grille. La première colonne de notre grille contiendra le nom de la propriété qu’on souhaite mappeur, la seconde la valeur de cette propriété.
Pour réaliser cette première configuration, il faut, dans l’ordre :
Nous nous retrouvons alors avec le panneau de configuration suivant :
A ce stade, il faut bien comprendre que le mappeur Biztalk ne va traiter que la propriété « Date » de notre schéma source. Pour finaliser la configuration du functoid Table Looping, nous lions donc toutes les autres propriétés. En réalité, hormis les deux premiers paramètres, l’ordre de liaison des données n’a pas d’importance. Néanmoins, if faut préférer lier les données dans un ordre qui simplifie la lisibilité.
Maintenant que les entrées de notre functoid sont renseignées, nous allons configurer la grille de données. Pour rappel, le functoid Table Looping a été configuré avec une grille à deux colonnes. Cette configuration se réalise dans le second onglet du panneau de configuration du functoid Table Looping. Cette configuration consiste à construire le tableau de données en choisissant, parmis les paramètres en entrées lesquelles constituent notre grille.
En résume, la grille ci-dessus contient en première colonne un libellé et en seconde colonne une valeur.
La prochaine étape de notre map consiste à exploiter cette grille. Nous ajoutons à notre map, 2 functoids « Table Extractor ». Ces functoids permettront d’extraire les éléments de notre grille.
Pour le mappeur Biztalk, chaque functoid « Table Extractor » doit avoir 2 paramètres en entrée :
Dans notre exemple, notre première functoid est configuré de la sorte :
Le second :
Notez que la sortie de chaque functoid « Table Extractor » est lié au nœud cible souhaité.Et voilà, c’est terminé. En testant notre map avec le message source suivant :
On obtient la structure répétée suivante :