Passer d’un nœud simple à un noeud répété avec le mapper Biztalk

Oguzhan YIGIT
Publié par Oguzhan YIGIT
Catégorie : BizTalk
18/07/2017

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.

schéma sourceschéma cible

 

Si on analyse le schéma xsd cible, notez que le nœud « Parameters » est répétable.

propriété répétable du noeud

 

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 :

  • Scope d’exécution : ce scope permettra de définir à quelle moment la transformation est exécutée et quel bloc elle concerne
  • Nombre de colonne de la grille : le functoid Table Looping va stocker les données que l’on souhaite passer de la structure à plat vers la structure répétée dans un tableau à deux dimensions. Le second paramètre que prend le functoid Table Looping définit le nombre de colonne de ce tableau

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 :

  • Lier le nœud « Order » du schéma source au functoid Table Looping
  • Renseigner la valeur « 2 » pour le second paramètre dans le panneau de configuration du functoid Table Looping
  • Renseigner « OrderDate » sous forme de chaîne de caractères pour le troisième paramètre : ce paramètre est libre, il permettra de définir la valeur qu’on attribue au schéma cible pour l’élément « Key »
  • Lier l’élément « Date » du schéma cible au functoid Table Looping : cette valeur sera utilisée pour renseigner l’élément « Value » de notre format cible

Nous nous retrouvons alors avec le panneau de configuration suivant :

Configuration de le functoid Table Looping

 

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é.

Lien vers le functoid Table Looping

 

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.

Configuration du functoid Table Looping

 

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 :

  • Le premier, vient du functoid Table Looping afin de déterminer la source depuis laquelle les données sont issues
  • Le second est un entier et permet de définir la colonne de la grille que l’on souhaite extraire

Dans notre exemple, notre première functoid est configuré de la sorte :

 

Biztalk map functoid Table Extractor

 

Le second :

 

Lien du functoid Table Extractor

 

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 :

message en entrée de la map Biztalk

 

On obtient la structure répétée suivante :

message en sortie de la map Biztalk