Je vous ai concocté une petite animation flash qui résume un peu la procédure qu'on va mettre en place pour poster notre news
Du code !
He oui, vous allez coder ! Je suis certains que beaucoup d'entre vous ne s'attendaient pas à ca en commencent à lire un article sur Office. C'est pourtant la vérité. Ne voyez pas en cela un manque de fonctionnalités d'InfoPath mais plutôt une ouverture vers des millions de scénarios possibles !
Comme vous avez pu le voir dans l'animation, Infopath envoie à notre serveur web le fichier xml contenant les informations relatives à la news.
Il est bien évident que dans le cadre de cet article nous n'allons pas réellement vous donner la possibilité d'envoyer des news vers notre serveur web :)
C'est pour cela que je vous invite à mettre en place un serveur IIS sur votre machine. Nous développerons une page aspx (technologie .NET) sur ce serveur qui aura pour unique tâche de récupérer le fichier xml envoyé par notre formulaire, extraire les informations de ce fichier, et les stocker dans une base de donnée Access. Nous ne développerons pas la dernière partie qui consiste à développer une page dynamique accédant à cette base de donnée pour afficher les news.
Récupérer le fichier xml envoyé
Nous aurons besoin de System.xml et System.IO pour mener à bien notre projet, pensez donc à rajouter ces espaces de noms :
Etant donné que le seul but de la page aspx que nous allons développer est de récupérer la news, nous allons définir cette action directement au niveau de la méthode Page_Load :
Notez également la déclaration des variables dans lesquelles seront recopiées les informations contenues dans le fichier xml
Ici, nous stockons dans str , via Request.InputStream , le flux reçus (le fichier xml) par la page à son lancement.
Si nous recevons effectivement un flux, (strLen>0), alors nous sauvegardons ce flux dans un fichier news.xml.
En voila le contenu une fois que InfoPath soumet le formulaire dûment remplit.
<my:NewsDesc > <div xmlns="http://www.w3.org/1999/xhtml">C'est en effet à l'occasion d'une interview donnée à <strong>PressPass</strong> pendant le <strong>Gartner Fall Symposium 2003 à Orlando </strong>, que <strong>Steve Balmer</strong> a déclaré, en se basant sur « les chiffres », la chose suivante :</div>
<div xmlns="http://www.w3.org/1999/xhtml"> </div>
<div xmlns="http://www.w3.org/1999/xhtml"><em>" In the first 150 days, and this is the kind of stuff we track, the first 150 days of Windows 2000 we had 17 critical vulnerabilities. The first 150 days of Windows 2003 we had four critical vulnerabilities. The first 150 days of Red Hat 6, go check the number, just go check the number. It's five to ten times higher than what we are showing."</em></div> </my:NewsDesc>
Vous remarquerez que nous retrouvons nos balises avec les nom de contrôles défini au niveau de notre formulaire InfoPath, mais également nos sections : UserSection et NewsSection
Maintenant que notre serveur web a récupéré le fichier xml contenant la news, il faut recharger ce fichier en mémoire avec un XmlNodeReader qui parcourra ce fichier xml et en extraira les informations.
Note : La méthode utilisée ici pour transférer les informations du flux xml à la base de donnée est loin d'être optimisée. Cependant je pense qu'elle a le mérite d'être simple, et accessible à tous.
Il ne nous reste plus qu'à renvoyer ces informations dans une base de donnée Access :
Maintenant que notre serveur est opérationnel, la dernière étape consiste à éditer à nouveau notre bouton « Envoyer » dans notre formulaire pour qu'il envoie le fichier xml à notre serveur :