BI experience

création d’un composant sous SSIS : XML Destination Adapter

| 1 Commentaire

Je voulais prendre des données présentes dans une BDD et les acheminer dans un fichier XML. Mais à ma grande surprise Microsoft a prévu un composant pour partir d’un fichier XML pour en extraire les données…Mais pas de composant qui permettrait de réceptionner les données pour les mettre dans un fichier XML…

Y a t il une logique dans tout ça???? Bref quand on a choisi une techno on assume.

J’ai donc créé un composant « Destination XML » à partir du code téléchargé sur ce site

Voici le mécanisme :

Ce code en C# est en fait un projet qui permet de créer une DLL.

Cette DLL est ensuite copié dans 2 répertoires clefs à partir de commande indispensable :

  • C:WindowsAssembly grâce à la commande : gacutil.exe
  • C:Program FilesMicrosoft SQL Server90DTSPipelineComponents » : qui permet de faire le lien dans SSIS.

Ensuite il faudra juste aller dans la barre d’outils de SSIS au niveau de destination :

clic droit > choisir élément > dataFlow>XML Destination Adapter

Le composant sera à votre disposition.

Le code que j’ai repris ne fonctionnait pas au premier abord. Voici ce que j’ai modifié:

  1. le fichier XML donné sur ce site n’est pas bon il faut ajouter un « / » à la dernière balise
  2. Quand vous ouvrez le projet contenu dans le .zip que vous aurez téléchargé, faites un clic droit sur le projet XMLDestination> évenements de génération. Vous allez voir dans évènements après génération et ajouter des guillemets autour de la variable $(TargetPath)
  3. faites de même pour le projet ColumnInformation
  4. Dans le code source allez dans le fichier XmlDestinationAdapter.cs présent dans le projet XMLDestination. Il y a des modifications à faire au niveau de la fonction : preExecute().

Après la ligne : IDTSInput90 input= ComponentMetaData.InputCollection[0]; Ajouter IDTSVirtualInput90 vInput = input.GetVirtualInput();

Remplacer input.InputColumnCollection.Count par vInput.VirtualInputColumnCollection.CounEt dans la boucle for ajouter la ligne colInfos[i] = new ColumnInformation();

Dans la boucle for il faut aussi remplacer toutes les expressions : input.InputColumnCollection[i] par vInput.VirtualInputColumnCollection[i]

Voilà ensuite vous n’avez plus qu’à générer la DLL tout se copie au bon endroit automatiquement et voilà !!!

Voici le code :

codexmldestination.JPG

Et le composant qui en découle :

xmldestination1.JPG
Et quand on double clique dessus pour lui indiquer le nom du fichier de sortie et les balises que l’on attend :

composantxml.JPG

Pour le débogage je sais qu’il y a une procédure sur msdn. Seulement je ne sais pas pourquoi mais je n’ai pas réussi à la mettre en pratique j’ai donc triché en écrivant les données que je voulais voir ou tester dans un fichier txt.

Bien sûr ce composant n’est pas aussi performant qu’un composant de destination XML de Datastage ou Informatica….Mais bon c’est un bon début!

Je vous laisse tester.

Un Commentaire

  1. Votre petite astuce fonctionne parfaitement.

Laisser un commentaire

Champs Requis *.

*