[SSIS] Modifier l’apparence des packages via l’API [FAIL]

Ahhhh celle là on me l’a posée très récemment, au travers de la question « Comment ajouter programmatiquement des commentaires à un package » et je dois avouer que je me suis cassé la tête des nuits dessus il y a quelques mois, à la suite de la lecture d’un thread très proche entre Jamie Thomson et l’équipe de dev.

SSIS vous le savez fournit une très belle API de design de packages, qui permet de modifier tout un tas de composants appartenant à ce beau schéma que j’affectionne:

Mais dans ce schéma et dans la doc de l’API, aucune note sur l’apparence… Comment réorganiser les tâches, ajouter un commentaire?
Ouvrons donc un package SSIS en mode code pour voir comment cela est stocké. Un package est bien un fichier XML stockant toutes ses propriétés et composants sous format XML, comme on peut le voir ci-dessous:
En revanche dans ce code XML bien propre aucune mention de l’apparence, du positionnement des éléments, des commentaires. Par contre en scrollant un peu vers le bas, on trouve une propriété de package au nom étrange:

Hmm… et cette propriété contient du code XML dont les balises > et < ont été échappées avec leur code (gt, lt). Ce code XML est très long et abscons et décrit des positions d’objets. Un commentaire, objet qui n’apparait pas dans l’api, apparaît ici sous cette forme (j’ai « deséchappé » les caractères pour que ça ressemble à du XML (le commentaire est encodé en binaire dans la propriété binary) :

<ddscontrol controlprogid=« MSDDS.Text » left= »-5172″ top= »-129″ logicalid= »38″ controlid= »20″ masterid= »8″ hint1= »0″ hint2= »0″ width= »2970″ height= »344″ noresize= »1″ nomove= »0″ nodefaultattachpoints= »1″ autodrag= »1″ usedefaultiddshape= »1″ selectable= »0″ showselectionhandles= »0″ allownudging= »1″ isannotation= »0″ dontautolayout= »1″ groupcollapsed= »0″ tabstop= »0″ visible= »1″ snaptogrid= »0″><ddsxmlobjectstreaminitwrapper binary= »000200009a0b000058010000030000000000050″ />

La première chose que l’on remarque ici c’est le nom du contrôle de commentaire, MSDDS.Text. Qu’est ce que c’est que ça?

Quelques recherches plus tard vous auriez appris que DaVinci Design Surface est une très vieille API native de design de diagrammes (tiens donc…) utilisée dans Visual Studio 5.0 et 6.0 mais ayant vocation à disparaître. La team SSIS l’aurait utilisé en 2005 faute de mieux. Il y a donc une grosse différence entre MSDDS – le code XML échappé bourré au milieu des éléments – et la structure des packages.
Un commentaire ne fait pas partie des objets de package… Too bad.
Je vais vous épargner mes digressions au Reflector et mes réouvertures de packages en interop MSDDS pour modifier les commentaires, tentatives ayant toutes abouti à créer des monstres imparsables (jouer au Dr Frankenstein n’est décidément pas rentable).
Moralité: pour le moment, pour de la documentation automatique, utilisez les champs Description des objets, c’est bien plus facile, accessible via l’API, et en plus ça tiendra probablement la migration en SSIS Denali, ce qui ne serait probablement pas le cas de mes cochoncetés en natif.
A bientôt!

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s