Le Post Infeeny

Les articles des consultants et experts Infeeny

#SPC2012 : Breaking out into the cloud : Using Azure Worker Roles to automate document generation

Session de 10h30 à 11h45 animée par Ben Robb (SharePoint MVP)

Le but de la session va être de voir comment générer des documents Word devant être stockés dans SharePoint avec différentes solutions techniques

La première question est « pourquoi vouloir générer des documents automatiquement ? »

Les besoins sont multiples mais un peu toujours les mêmes dans différents métiers

  • Génération de contrats et documents légaux
  • Brochures commerciales
  • Rapports
  • Certificats de destruction (dans le Record Management)

Le scénario de la démo sera le suivant

  • Déclencher la création d’un document en mettant à jour une liste SharePoint
  • Recenser les informations dans différentes sources de données
  • Construire le document
  • Stocker la document finalisé dans SharePoint

Pour générer des documents de manière automatisée, il est nécessaire de connaitre OpenXML qui a fait son apparition avec Office 2007 et qui n’est qu’un conteneur ZIP de différentes informations

On passe à la démonstration pour voir dans Word 2013, à quoi ressemble le modèle de document que nous voulons générer de manière automatique (titre, description, date de publication, URL…)

On voit que chaque section du document est mappée sur un noeud XML et quand on renomme le fichier Word en ZIP et qu’on regarde à l’intérieur, on retrouve les éléments XML

On voit que dans le SDK OpenXML 2.5, un outil est fourni pour générer du code .NET à partir du schéma XML, pour mettre à jour l’intégralité ou une section particulière du document

Pour le document que nous allons utilisé, le code .NET généré à partir de l’outil précédent compte pas loin de 10 000 lignes

On voit maintenant le code d’une application console qui va chercher sur Internet dans une source OData des données, et qui utilise le code généré précédemment pour automatiser la création de centaines de documents en quelques secondes

On repasse rapidement sur les slides pour évoquer les méthodes disponibles pour uploader des documents dans SharePoint et on voit qu’on peut le faire avec le modèle objet client (CSOM) ou les services REST

On repasse sur la démo pour voir, via un bout de code récupérer sur Internet permettant de gérer l’authentification avec Office 365, comment uploader le fichier dans un site SharePoint depuis une application console

Retour aux slides maintenant que nous avons les bases pour générer les documents et les envoyer dans SharePoint afin d’évoquer comment déporter la génération dans Azure plutôt que l’application console

On commence par un rappel sur les Worker Roles qui sont l’équivalent des services Windows où aucune interface graphique n’est disponible (contrairement aux webroles)

Déporter la génération dans Azure fonctionne de la même manière que si on l’avait fait dans un TimerJob SharePoint mais en ajoutant un aspect haute disponibilité grâce au Cloud

On repasse dans Visual Studio pour créer un projet Worker Role grâce aux modèles de projets fournis avec le SDK Azure et on réexplique rapidement les propriétés du projet (taille des VMs, nombre d’instances…)

Pour gagner du temps, on repart d’un projet déjà créé pour voir le code et plus particulièrement le point d’entrée du Worker Role (méthode Run) dans laquelle une boucle infinie a été implémentée avec une pause de 10s entre chaque itération

Dans cette boucle, on va se connecter à SharePoint, récupérer les items d’une liste particulière en filtrant les lignes en fonction d’un statut et pour chaque élément on génère les documents avec le même code que vu précédemment, on upload le fichier dans SharePoint toujours avec le même code puis on met à jour la liste SharePoint quand c’est terminé

Le Worker Role ayant déjà été déployé dans Azure, on va modifier dans la liste SharePoint un élément pour lui donner le statut permettant au Worker Role de traiter les fichiers et comme attendu, on voir qu’au bout de quelques secondes (10 au maximum entre 2 itérations de la boucle), le traitement se déclenche et les fichiers sont uploadés dans la bibliothèque de documents

Retour aux slides pour évoquer le débogage dans Azure où cela passe par l’utilisation de l’émulateur en local sur son poste de développement, et l’utilisation des traces stockés dans une base SQL (par exemple) une fois l’application en production (des outils tiers existent pour analyser les logs stockés dans une base SQL)

Le premier scénario concernait Azure avec un système de Polling toutes les 10s mais nous pouvons faire l’inverse et que ce soit Office 365 qui Push une information à Azure pour lui demander de générer les documents

Cela est faisable grâce à la notion de Remote Events disponibles dans SharePoint et nous allons le voir en démonstration

Dans Visual Studio, on peut créer un Remote Event Receiver grâce au modèle disponible dans les éléments d’un projet

L’implémentation du receiver passe simplement par la surcharge d’une méthode (il en existe 2 pour la gestion synchrone/asynchrone) et il est évidemment recommandé d’implémenter le mode asynchrone pour éviter de bloquer le thread de l’application ce qui donne l’impression que celle-ci est plantée

Pour la publication d’application dans Azure, rien de nouveau car on voit Ben utiliser WebDeploy depuis Visual Studio

En conclusion, un petit rappel sur les nouvelles fonctionnalités de SharePoint 2013 utilisées pour mettre en oeuvre la démonstration à savoir Remote Events, OAuth et REST

Pour ce qui est de choisir entre le mode Polling ou Remote Events, chaque solution a ses avantages/inconvénients donc il n’y a pas un choix meilleur que l’autre

Une session intéressante, notamment sur la partie Remote Events de SharePoint 2013. En revanche la partie génération de documents en tant que telle n’a pas évoluée d’un pouce et repose à 100% sur OpenXML

Stéphane

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

%d blogueurs aiment cette page :