Les Transactions dans SSIS 2012

A quoi servent les transactions ?

Les transactions sont des suites d’opérations (Insertion, Suppression, Mise à Jour…) qui font passer la base de données d’un état A (état initial avant les opérations) à un état B (après les opérations).
Dans le cas où une opération échoue, la transaction permet de revenir à l’état antérieur B, c’est-à-dire avant le démarrage de la transaction.
Toutes les modifications seraient dans ce cas annulées.

Dans l’exemple qui va suivre, nous allons voir comment mettre en place les transactions afin d’annuler des opérations opérées sur une base de données en cas d’échec.
Lire la suite

Tour de France Windows 8 et Windows Phone 8 – Mai 2013

Tour de France Windows 8 et Windows Phone 8

Tour de France Windows 8 et Windows Phone 8

Microsoft organise un Tour de France autour des applications Windows 8 et Windows Phone 8

« Apprendre à développer, sécuriser et optimiser vos « back-end » pour vos applications Windows 8 et Windows Phone 8″

Au programme 4 heures de :

  • Formation
  • Démo
  • Code

L’objectif est de vous apprendre, en une demi-journée, à développer, sécuriser et optimiser vos « back-end » pour vos applications Windows 8 et Windows Phone 8.

Les thèmes suivants (autour de Windows 8 et Windows Phone 8) seront abordés :

  • Tour d’horizon de la plateforme
  • Concepts fondamentaux pour la mise enplace d’API et les best pratices d’utilisation dans vos applications
  • L’implémentation de services de notification et de push
  • Les différentes approches pour sécuriser vos API et la mise en oeuvre de ces mécanismes
  • L’optimisation des ressources et des services mis enplace ainsi que la montée en charge de vos applications mobiles avec Windows Azure.

Les intervenants :
Ce Tour de France sera animé par des intervenants MCNEXT :

  • John Thiriet, consultant DotNET et MVP Expression Blend
  • Guillaume Leborgne, chef de projet et expert DotNET

Ils ont développé de nombreuses applications Windows 8 et Windows Phone 8 présentes dans le Microsoft Store. Ce sont leurs retours d’expériences autour de Windows 8 et Windows Phone 8 qu’ils souhaitent vous apporter.

Le public visé :
Développeurs généralistes
Niveau technique : 300

Pour en savoir plus :
http://www.mcnext.com/evenements/microsoft/Pages/tour-de-france-windows-8-et-windows-phone-8.aspx

Microsoft Dev Camp : Réussir la partie serveur de vos applications Windows 8 et Windows Phone Jeudi 2 mai 2013

Microsoft Dev Camp : Windows 8 et Windows Phone

Microsoft Dev Camp : Windows 8 et Windows Phone

Rendez-vous le Jeudi 2 mai 2013 à partir de 13h30 !

Qu’est-ce qu’un Dev Camp ?

Le Dev Camp est un événement destiné aux développeurs professionnels comme non professionnels animé par les experts Microsoft et ses partenaires.

Au programme 4 heures de :

  • Formation
  • Démo
  • Code

L’objectif de ce Dev Camp est de vous montrer comment développer, sécuriser, et optimiser les API et les services qui vous permettront d’exposer vos données pour des applications mobiles.

Les intervenants :
Cet après-midi sera animé par des intervenants MCNEXT :

  • John Thiriet, consultant DotNET et MVP Expression Blend
  • Guillaume Leborgne, chef de projet et expert DotNET

Ils ont développé de nombreuses applications Windows 8 et Windows Phone 8 présentes dans le Microsoft Store. Ce sont leurs retours d’expériences autour de Windows 8 et Windows Phone 8 qu’ils souhaitent vous apporter.

Lieu  :
Campus de Microsoft – Issy les Moulineaux

Pour en savoir plus : http://www.mcnext.com/evenements/microsoft/Pages/microsoft-dev-camp-reussir-la-partie-serveur-de-vos-applications-windows-8-et-windows-phone.aspx

Introduction à Data Explorer Preview pour Excel

Contexte

Nous travaillons avec beaucoup de fichiers Excel, mais n’avons pas forcément accès à un ETL de type SSIS. Ne vous inquiétez pas, Microsoft a pensé à cela et travaille actuellement sur une version finale de l’add-in Excel (2010 SP1 et 2013) permettant d’effectuer des tâches d’intégration basiques et courantes. Cet article a pour but de vous introduire le fonctionnement de cette preview add-in gratuit.

Lire la suite

Améliorer notre productivité avec Visual Studio 2012

Chaque sortie d’une nouvelle version de Visual Studio apporte aux développeurs son lot de nouveautés et d’innovations. La version 2012 de Visual Studio ne déroge pas à la règle. Par ce post, je souhaite vous faire partager mes différentes découvertes sur cette version, et principalement, tout ce qui peut et va améliorer notre productivité au quotidien.

 

Les généralités

Content before Chrome

La première constatation que j’ai fait, immédiatement après avoir ouvert Visual Studio 2012, est son apparence.
En effet, dès son ouverture, je me retrouve immergé dans un environnement quasi mono chrome. Il semble qu’il s’agit là d’une volonté de la part de Microsoft de revenir à la base de ce qu’est la conception de logiciel. Dans leur bonne pratique, Microsoft nomme cela Content before Chrome. Le contenu d’une application est l’élément principal de celle-ci. Microsoft a donc pris parti de ne plus ajouter de fioritures superflues à l’interface fourni aux développeurs, afin que ceux-ci puissent se concentrer sur le contenu, plutôt que de privilégier ce qui l’entoure.
On constate également le style épuré de la barre de menu, dont le texte est écrit en majuscule. Ainsi que le faible nombre de bouton raccourci de la barre de tâche.
On retrouve ce style dans tous les logiciels mis à jour en style Modern UI, comme Word 2013, Excel 2013, Etc.

La page de démarrage

Je parcours la page de démarrage. Elle propose une série de vidéos, type podcast, qui sont autant de tutoriels sur des sujets mise en avant par les équipes Microsoft. Ces vidéos se jouent directement dans Visual Studio 2012. Une coche apparait dans le coin inférieur droit pour indiquer celle que l’on a déjà joué.

StartPage

La recherche

L’un des raccourcis clavier, que tous les développeurs connaissent, après le copier/coller (Ctrl+C Ctrl+V), est la fonctionnalité de recherche (Ctrl+F). Visual Studio 2012 ajout le Quick Search aux outils de recherche fourni aux développeurs.
La fenêtre apparait en haut à droite de la page active. Tout d’abord, je la trouve moins intrusive. De plus, maintenant, elle est 100% compatible avec les expressions régulières (le RegEx). Et je garde le meilleur pour la fin, elle affiche le résultat en temps réel, en surlignant le texte d’une façon visible, en Jaune.
Ce mode de recherche est accessible sur chaque fenêtre présentée par Visual Studio 2012. On la retrouve dans l’explorateur de solution, la fenêtre de propriétés, etc.

QuickSearchQuickSearch2

Les performances

D’après des recherches effectuées par les équipes de Microsoft, le temps de chargement d’un projet à l’ouverture de Visual Studio est au minimum deux fois plus rapide. Il faut garder à l’esprit que cela dépend grandement de la technologie employée.

 

Les fenêtres

La gestion des fenêtres

Windows 8, permet de scinder l’écran affiché en deux moitié horizontal, par un simple glissé/déposé sur la partie gauche ou droite de l’écran.
Visual Studio 2012 a amélioré la gestion des fenêtres en les rendant totalement autonome. Microsoft, nous fait profiter là de toutes les innovations de Windows 8.
Voici une copie de mon écran. On constate qu’il est scindé en deux, j’ai affiché le fichier XAML d’un contrôle utilisateur à gauche et son fichier contenant le code behind à droite.
Naturellement, cela fonctionne avec toutes les fenêtres de Visual Studio 2012, l’explorateur de fichier, les fenêtres de débogage, etc.

DoubleEcran

La fenêtre de prévisualisation

Dans la vie d’un développeur, nous passons beaucoup de temps à chercher des informations spécifiques au travers de notre code. Pour cela, il utilise, généralement la fonction Go to reference (raccourci F12). Dans Visual Studio 2012, cela avait pour effet d’ouvrir des fenêtres, qui finissaient rapidement par polluer notre espace de travail. Pour éviter, cette pollution, on refermait manuellement les fenêtres superflues ouvertes de cette manière.
Visual Studio 2012 propose une vue de prévisualisation. Celle-ci affiche le contenu d’un fichier, en lecture seul. Il n’y a qu’une seule et unique vue de prévisualisation affichée. Dès lors, que l’on modification le contenu de cette fenêtre, ou que l’on clique sur le petit icône en forme de dossier se trouvant dans l’onglet, celle-ci passe en mode normal.

PreviewWindows

La multi-sélection des fenêtres

A l’aide du bouton Ctrl, on peut sélectionner plusieurs fenêtres, pour ainsi les déplacer toutes en même temps.

MultiWindowsSelection

Le pin’s

Visual Studio 2012 intègre, nativement, une fonctionnalité qui permet d’épingler une fenêtre. Une fenêtre épinglée reste en première position dans la barre de gestion des fenêtres de l’espace de travail.

Pins

Fermeture des fenêtres

Dans les évolutions anecdotiques, sur lesquels je me sens obligé de m’arrêter, il y a une nouvelle fonctionnalité qui permet lorsque l’on fait un clic droit sur l’onglet d’une fenêtre de fermer toutes les fenêtres de l’espace de travail, ainsi qu’une autre pour toutes les fenêtres épinglées. Ces fonctionnalités n’existaient pas sous Visual Studio 2010.

 

L’explorateur de solution

A première vue, l’explorateur de solution n’a pas beaucoup changé. La liste de bouton raccourci en haut de la fenêtre a été augmentée.
J’y retrouve les boutons de la précédente version, telle que Rafraichir, Afficher tous les fichiers, etc. Et puis, je découvre un bouton Tous réduire qui permet de réduire l’arbre de la solution à ces nœuds racines, ainsi qu’un bouton Propriété qui me permet d’ouvrir la fenêtre Propriétés de l’élément sélectionné dans mon arbre de solution.
Après une seconde, je découvre cependant un nouveau niveau logique ajouté à l’arbre. Celui-ci décrit et expose le contenu des fichiers ; Accesseur, Méthodes, Evènement, etc.
Un double clic sur l’un de ses éléments nous permet d’ouvrir le fichier, et positionne le curseur, sur celui-ci.
Sa manipulation a également changé. Un simple clic sur un élément de l’explorateur de solution l’ouvre dans la vue de prévisualisation. Un double clic l’ouvre en mode normal.
On trouve aussi un module de Quick Search, qui ouvre l’arbre sur tous les éléments trouvés (Voir image ci-dessous).

SolutionExplorerSolutionExplorerSearch

 

Les langages

Modern UI

Visual Studio 2012 fourni tous les outils pour permettre de développer des applications sous Windows 8 en Modern UI. Lorsque l’on souhaite lancer une application de Visual Studio 2012, on peut choisir le mode de lancement  (voir image ci-dessous).
Dans le cas des applications en Modern UI, on y trouve un simulateur qui ouvre une fenêtre qui ressemble à une tablette (voir image ci-dessous).
A l’aide de cette fenêtre, via les boutons à droite de l’écran, on peut simuler une touche du doigt (on ne peut pas tous être équipé d’écran tactile), faire pivoter la fenêtre (très important à tester), changer la résolution, etc.
Une autre innovation est la fonctionnalité Store, que l’on obtient grâce à un clic droit sur le projet. Il permet d’accédé à toutes les fonctionnalités de déploiement d’une application sur le Windows Store.

StartApp1Simulator

Web

Pour les développeurs web, l’auto complétion de Javascript, JQuery et des feuilles CSS est apparue. L’équivalant des commentaires C# (en ///) viens de faire son apparition. Permettant d’associer un commentaire à un paramètre d’une fonction, que l’on retrouve dans la bulle info de l’auto complétion.
Coté HTML, de petite innovation, bien pratique. Par exemple, lorsque l’on modifie une balise, sa balise homologue de fermeture est modifiée aussi, et vice-versa.
Tout comme Modern UI, les sites peuvent être lancés avec un navigateur (installé indépendamment sur la machine) ou à partir du Page inspector (voir image à gauche).
Le Page inspector permet de debugger plus efficacement le site en live.
Enfin, Visual Studio 2012 intègre les nouvelles normes de W3C appelé WAI-ARIA.
StartApp2

 

Conclusion

Il y aurait encore beaucoup de choses à explorer (l’explorateur de tests unitaires, la barre de Quick Launch, la connexion à TFS…), mais voilà déjà mes premières impressions sur cette  nouvelle version 2012 !

 

Intégration d’une source XML en SSIS

Contexte

Dans le cadre d’une mission, nous intégrons des données de facturation provenant d’un fournisseur externe , afin de les restituer dans nos cubes d’analyse. Ces informations transmises par fichiers XML sont intégrées dans une base de données SQL Server.

La structure du fichier d’échange XML n’est pas sous contrôle, celle-ci est imposée par l’émetteur : l’adaptation du consultant BI s’impose.

Voyons comment intégrer une source XML au travers « SQL Server Integration Services ».

L’influence de la structure du fichier

XML

Le XML « Extensible Markup Language » est un langage de balises lisible pour l’homme permettant de structurer de l’information en vue d’échange.

Voyons les composants XML de base constituant un arbre structuré

Nœud document Elément racine à tout XML. Il est le point de départ
Balise Une balise est un nom commode pour désigner les constructions entre deux chevrons <…> dans un fichier XML
Texte Un nœud texte n’ayant pas d’enfant. Il est toujours contenu dans une balise.
Attribut Un attribut est un nom et une valeur. Il est toujours porter par une balise. Sa valeur ne sera jamais nulle, mais vide <balise attribut= ‘’/>. L’attribut est unique sur une balise qui peut en avoir plusieurs. <balise attribut1=’valeur1’ attribut2=’valeur2’ …/>

Étudions dans un premier temps la structure de notre fichier XML.

Notre cas exemple

Structure du fichier
<?xml version="1.0" encoding="iso-8859-1"?>
<JD_GENERIQUE xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Definition>
    <PieceComptable>FARC130014</PieceComptable>
    <Redevance>RC</Redevance>
    <Activite>Act1</Activite>
    <SSActivite>ssAct1</SSActivite>
    <ServTransport>Train</ServTransport>
    <Date>10/12/2012</Date>
  </Definition>
  <TableauDetaille Search_Code="044101">
    <ENTETE>
      <ElementEnTete Nom="NM">044101</ElementEnTete>
      <ElementEnTete Nom="TYPCIRC">réelle</ElementEnTete>
      <ElementEnTete Nom="HD">00:10:00</ElementEnTete>
      <ElementEnTete Nom="DE">Cerbère</ElementEnTete>
      <ElementEnTete Nom="FE">Portbou</ElementEnTete>
      <ElementEnTete Nom="LT">0,9</ElementEnTete>
      <ElementEnTete Nom="MT">3,08</ElementEnTete>
    </ENTETE>
    <BODY>
      <LIGNE>
        <ElementDetail Nom="NL">994</ElementDetail>
        <ElementDetail Nom="SEGMTARIF">LC</ElementDetail>
        <ElementDetail Nom="LNG">0,0</ElementDetail>
        <ElementDetail Nom="TCT">FMC</ElementDetail>
        <ElementDetail Nom="PU">3,425</ElementDetail>
        <ElementDetail Nom="COEFTRAFIC">0,600</ElementDetail>
        <ElementDetail Nom="M">0,00</ElementDetail>
      </LIGNE>
      <LIGNE>
        <ElementDetail Nom="NL">995</ElementDetail>
        <ElementDetail Nom="SEGMTARIF">LC_FM</ElementDetail>
        <ElementDetail Nom="LNG">0,9</ElementDetail>
        <ElementDetail Nom="TCT">FMC</ElementDetail>
        <ElementDetail Nom="PU">3,425</ElementDetail>
        <ElementDetail Nom="COEFTRAFIC">1,000</ElementDetail>
        <ElementDetail Nom="M">3,08</ElementDetail>
      </LIGNE>
…
JD_GENERIQUE Balise racine du document
Definition Balise structurante, définissant le fichier dans sa globalité.
PieceComptable
RedevanceActivite
SSActivite
ServTransport
Date
Balises de données contenues dans la balise « Definition »
TableauDetaille Balise structurante, définissant des éléments de facturation
Entete Balise structurante, regroupant des éléments d’entête.
ElementEnTete Nom= »NM »
ElementEnTete Nom= »TYPCIRC »
ElementEnTete Nom= »HD »
ElementEnTete Nom= »DE »
ElementEnTete Nom= »FE »
ElementEnTete Nom= »LT »
ElementEnTete Nom= »MT »
Balises de données avec attribut structurant
BODY Balise structurante, définissant le corps
LIGNE Balise structurante, définissant une ligne
ElementDetail Nom= »NL »
ElementDetail Nom= »SEGMTARIF »
ElementDetail Nom= »LNG »
ElementDetail Nom= »TCT »
ElementDetail Nom= »PU »
ElementDetail Nom= »COEFTRAFIC »
ElementDetail Nom= »M »
Balises de données avec attribut structurant

? Une facture est constituée d’une unique entête, de plusieurs tableaux de facturation. Ces derniers sont composés d’une entête de tableau et de plusieurs lignes de détails.

Traitement des valeurs

Le traitement d’un fichier XML revient à remettre à plat les données qui ont été hiérarchisées. La difficulté vient de l’aisance à y arriver.

Le traitement d’un nœud comme celui « Definition » est relativement simple. La mise en colonne de l’information est triviale avec les outils SSIS

XML Noeud definition

Le traitement d’un nœud « Entete » ou « Ligne » demandera plus de manipulation pour préparer les données à l’intégration.

image003

Dans un but d’intégration des données, nous remarquerons qu’il y a de nombreux attributs de balise présent et ceux à plusieurs reprise dans les balises « ElementEntete » et « ElementDetail ». Ces derniers ont une valeur fonctionnelle réelle. L’information aurait pu être résumée comme suit pour notre exemple :

image007 image005

Le format du fichier XML nous étant imposé en l’état, aucun changement de la source n’est possible.

Comment traiter ces balises XML avec attributs fonctionnels ? Nous aborderons une façon de faire sans qu’elle soit unique dans la section suivante. Celle-ci traite de l’utilisation des tâches SSIS mise à disposition dans BIDS.

Traitement par SSIS sous BIDS SQL Server 2008 R2

Source XML

Comme son nom l’indique, la tâche Source XML permet d’utiliser les données stockées dans des fichiers XML dans le flux de données. Si le XML provient d’un fichier, il suffit de spécifier le chemin d’accès ou obtenir le chemin du fichier grâce à une variable au moment de l’exécution. Il est également possible de spécifier le chemin d’accès d’un XSD qui définit la structure de notre XML. Le XSD peut ce générer à partir du fichier XML renseigné.

Création d’un composent « XML Source ». Nous renseignons le document source avec la localisation. La génération d’un fichier XSD est obligatoire pour la structure.

image009

Sur la seconde page du composent « Columns », nous retrouvons les structures de données qui ont été importées.

image011

Pour garantir la hiérarchie du fichier XML d’entrée, le composant génère une multitude de structures imbriquées. Plusieurs sorties sont disponibles et un identifiant unique ID apparait pour garantir l’arborescence.

image015

image013

SSIS rajoute une clé de substitution à chaque élément enfant. Un identifiant ParentID est ajouté au parent, un ChildID à l’enfant et un ChildParentID pour désigner la liaison entre le parent et l’enfant. Les données sont aplaties dans une forme tabulaire en sortie du composant.

En fonction de la complexité de l’arborescence du fichier XML, nous pouvons vite imaginer la difficulté de gérer cette solution.

Il reste à achever le traitement de transformation une fois les sources de sortie du composent identifiées. Rappelez-vous les attributs de balise comme ElementEntete ou ElementDetail ! Comment prendre en compte le nom du champ contenu dans l’attribut et la valeur réelle dans le texte de la balise ? Et bien, on va pivoter le tout.

Pivot

Cette tâche de transformation de tableau croisé dynamique permet à un ensemble de données normalisées en ligne d’être modifier en données moins normalisées, mais plus compacte. Ceci grâce au croisement dynamique des données du flux.

A partir d’une représentation tabulaire d’un niveau (balise XML). La ligne d’entête est à extraire de la chaine.

XML source extrait

image017

Représentation tabulaire de sortie souhaitée

ENTETE_ID NM TYPCIRC HD DE FE LT MT
3 044101 Réelle 00:10:00 Cerbèce Portbou 0,9 3,08

En sortie du composant XML Source, la structure générée est la suivante :

image018

Les éléments attribut de balise XML sont récupérés sous le champ « Nom » et la valeur sous « text » (voir image ci-dessus).

En utilisant le composant de tâche Pivot, nous obtenons la représentation tabulaire de sortie souhaitée (voir ci-dessus le tableau). En effet, nous allons faire une transformation de pivot avec la valeur « Texte », en colonne « Nom » et en ligne l’identifiant de l’entête.

Pivot_Key Nom
Set Key ENTETE_ID
Pivot_Value Text

Mise en place de la tâche pivot.

1 – Positionner sur l’onglet des propriétés d’entrées et sortie. Etendre jusqu’au « Input Columns » est renseigné le paramètre « PivotUsage » des champs comme suit :

    • LIGNE_ID : PivotUsage à 1
    • Nom : PivotUsage à 2
    • Text : PivotUsage à 3

image020

PivotUsage 0 La valeur n’est pas pivotée, elle passe en sortie du traitement
1 La valeur fait partie de la clé d’ensemble qui identifie une ou plusieurs rangées dans le cadre d’une série. Toutes les lignes d’entrée avec la clé même ensemble sont combinées en une seule ligne de sortie.
2 La colonne est une colonne pivot. Au moins une colonne est créée à partir de chaque valeur de colonne.
3 Les valeurs de cette colonne sont mises en colonnes qui sont créées à la suite du pivotement.

2 – Configuration des champs de sortie. Cette partie est la plus manuelle

a. Etendre « Pivot Default Output » jusqu’au « Output Columns ».
b. Cliquer sur « Add Columns » pour obtenir 8 colonnes
c. Sélectionner la première colonne

i. Renommer la « LIGNE_ID »
ii. Changer la propriété « SourceColumn » pour qu’il corresponde avec la propriété « LineageID » du champ LIGNE_ID présent dans les « Input Columns ». Ici 85 dans notre exemple.

d. Sur le reste des colonnes

i. Renommer les champs avec les libellés contenus dans la colonne « Nom »
ii. Changer pour tous la propriété « SourceColumn » pour qu’il corresponde avec la propriété « LineageID » du champ Text présent dans les « Input Columns ». On renseigne ici l’alimentation de la future colonne de sortie lors du process.
iii.La propriété « PivotKeyValue » qui permet le dispache des données doit-être renseigner. Les valeurs possibles proviennent de la colonne d’entrée « Nom ». Exemple pour la sortie NM, PivotKeyValue = NM

image022

Sortie du composant Pivot

image024

Merge Join

Ce composant de rapprochement des données est utilisé pour reconstruire dans un dataset les valeurs qui seront par la suite stockées.

Nous n’allons pas revenir sur un composant simple. Il s’agit ici d’utiliser les identifiants ID générés automatiquement par la mise à plat du fichier XML.

Conclusion

Dans cet article, Intregration Services peut être utilisé pour sortir des données d’attribut des balises d’un fichier XML. Le composant source XML effectue un travail amont de tabularisation des données qui est simple d’exploiter. Le pivotement des données est clé dans l’exemple pris. N’oubliez pas que le traitement du fichier se réalise en mémoire vis-à-vis des volumétries.