0. Introduction

InfoPath permet de se connecter à différentes sources de données si on connecte une liste SharePoint à un formulaire InfoPath on pourra rendre son contenu dynamique et ne pas avoir à republier un formulaire à chaque changement. Par default lorsque l'on utilise le wizard d'InfoPath pour créer une nouvelle data connexion vers une liste SharePoint, le compte utilisé est celui de l'usager courant. C'est le fonctionnement standard et cela fonctionne très bien dans la plupart des cas. Toutefois, il arrive que l'on est besoin d'utilisé un formulaire sans forcément que notre ordinateur soit dans le même domaine, dans ce cas on devra se résoudre à s'authentifier plusieurs fois pour chacune de nos data connexions.

Cet article vous montreras comment récupérer l'information grâce à un compte de service et donc de ne plus vous authentifier pour chaque data connexion.

I. Configuration du formulaire

Nous utiliserons le C# comme langage. On se rend dans « Tools », « Form Option », « Security and trust », dans « Securtitylevel », on sélectionne full trust et on signe notre template de formulaire.

On se rend aussi dans « programming » et on choisi C# comme langage de programmation.

image

II. Création de la source XML

InfoPath permet de se connecter à différentes sources de données si on connecte une liste SharePoint a un formulaire on pourra rendre son contenu dynamique et ne pas avoir a republier un formulaire a chaque changement. Nous utiliserons une data connexion de type xml afin d'interroger une liste SharePoint. Nous utiliserons pour cela la owssvr.dll vous trouverez ici un article qui parle de son fonctionnement.

Dans un navigateur, on entre l'url qui va nous fournir notre XML :

http://SharepointSite/_vti_bin/owssvr.dll?Cmd=Display&List=GUID&View=ViewGUID &XMLDATA=TRUE&noredirect=true

Identifier le GUID de la liste et de la vue

Voici les étapes pour récupérer ces ID :

1. Naviguer jusqu'à la liste

2. Aller dans les paramètres de la vue (on clique sur modifier cet affichage)

3. Dans la barre d'adresse, il faut copier l'information contenu dans « List= » et « View »

image

  4. Le GUID doit avoir le format « {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Pour cela il faut remplacer « %7b » par le caractère « { », « %2D » par  « - » et « %7D » par le caractère « }

Si les ID sont correctement configurer le navigateur devrait vous renvoyer un fichier XML :

image

On sauvegarde ensuite ce fichier, « fichier », « save as », comme type on choisie XML et on entre un nom « categorie.xml ».

III. Création de la data connexion

Dans « data source », on sélectionne « manage data connections », « Add », « Receive Data »

image

On choisi comme type de donnée « XML » et on entre le chemin de notre fichier xml que l'on a sauvegardé précédemment.

On inclut les données dans le Template de notre formulaire et on clique sur «  next  », on déselectionne  «  Automatically retreive data when for mis opened » et on clique sur«  Finish ».

IV. Création d'un événement sur le « On-Load »

On clique sur « Tool», « programming», « loadingevent », une fenêtre de programmation VSTA devrait s'ouvrir.

Voici une fonction à ajouter après la fonction FormEvents_Loading. Cette fonction va intéroger la liste Sharepoint avec le compte de service que l'on aura entrer en paramètre.

 
Sélectionnez
public bool loadXMLValue(string URL, string itemGUID, string userName, string password, string domainName, XPathNavigator DataConnectionRoot, XmlNamespaceManager nsMgr)
        {
            XmlDocument xml = new XmlDocument();

            try
            {
                //creation de la requete
                String Query = URL + "/_vti_bin/owssvr.dll?Cmd=Display&List=" + itemGUID + "&XMLDATA=TRUE&noredirect=true";
                System.Net.HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(Query);
                HttpWebResponse webresponse;
                webrequest.PreAuthenticate = true;

                // on utilise les credentials passé en parametre s'il ne sont pas null ni vide.
                NetworkCredential authentication;
                if (!string.IsNullOrEmpty(userName))
                    authentication = new System.Net.NetworkCredential(userName, password, domainName);
                else
                    authentication = System.Net.CredentialCache.DefaultNetworkCredentials;

                webrequest.Credentials = authentication;

                //on interroge le Web service puis on met le résultat dans un xmldocument
                webresponse = (HttpWebResponse)webrequest.GetResponse();
                StreamReader loResponseStream = new StreamReader(webresponse.GetResponseStream());
                string Response = loResponseStream.ReadToEnd();

                xml.LoadXml(Response);

                //on remplace la valeur par défaut de la data connection par le xml qu'on viens de récupérer
                XPathNavigator rsData = xml.CreateNavigator().SelectSingleNode("//rs:data", nsMgr);
                DataConnectionRoot.SelectSingleNode("//rs:data", nsMgr).ReplaceSelf(rsData);

                return true;
            }
            catch
            {
                return false;
            }
        }

Dans la fonction FormEvents_Loading, on entre le code qui va appeler cette fonction

 
Sélectionnez
bool rec = loadXMLValue("http:// SharepointSite", "{GUIDLIST}","{GUIDVIEW}","Username", "Password", "Damainname", DataSources["Categorie"].CreateNavigator(),  this.NamespaceManager);

V. Conclusion

A chaque ouverture du formulaire la liste sera interrogée avec le compte de service.