0. Introduction

Lorsque l'on développe un formulaire Web InfoPath, il existe certaines limitations que l'on ne retrouve pas sur la version cliente. Les filtres en cascade par exemple ne fonctionnent pas. Nous allons utiliser owssvr.dll de WSS 3.0pour permettre de filtrer des listes SharePoint.

I. Pré-requis

Il nous faut créer trois listes dans SharePoint et lier ces listes entre elles, avec une colonne du type recherche.

Catégorie1 Catégorie2 Catégorie3
image image image


Il faut ensuite créer un formulaire avec trois listes déroulantes :

image

II. Création des Data connections

Pour cela, on clique sur Tools, Data connections, Add, Create a new data connection to : Receive Date, puis on sélectionne XML Document.

Entrer un chemin du type :

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

Identifier le GUID de la liste

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

1. Naviguer jusqu'à la liste ;

2. Aller dans les paramètres de la liste ;

3. Dans la barre d'adresse, il faut copier l'information contenue dans « List= » ;

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 « } ».

On fera la même opération pour les listes «catégorie2» et «catégorie3».

Binder les listes déroulantes

clique droit sur la liste déroulante puis clic sur les propriétés. On sélectionne notre catégorie et on pointe notre valeur sur l'attribut ows_Title pour obtenir le titre.

image

On fait la même opération pour les 2 autres listes déroulantes.

III. Ajout du code dans le formulaire

Il faut maintenant ajouter du code afin de filtrer nos listes, dans mon exemple, j'utilise pour cela du C#.

clic droit sur notre catégorie 1, programming, Changed event.

 
Sélectionnez
XPathNavigator root = MainDataSource.CreateNavigator();

// recuperation des valeur de la categorie1
string Categorie2 = root.SelectSingleNode("//my:Categorie1",  this.NamespaceManager).Value;

// On efface la valeur de categorie2
root.SelectSingleNode("//my:Categorie2",this.NamespaceManager).SetValue("");

// On recupere notre dataconnection categorie2
FileQueryConnection Mycon = FileQueryConnection)DataConnections["Categorie2"];

// On modify notre chemin et on y inclut un filtre basé sur la categorie2
Mycon.FileLocation = @"http:// SharepointSite/_vti_bin/owssvr.dll" + "?Cmd=Display&List={GUID}"
+ "&XMLDATA=TRUE&FilterField1=Cat%5Fx00e9%5Fgorie1&FilterValue1=" + Categorie2;

// On execute notre nouvelle requete
Mycon.Execute();

Il faut remplacer GUID par l'ID de la liste.

On doit aussi ajouter un événement sur la categorie2.

clic droit sur notre catégorie 2, programming, Changed event.

 
Sélectionnez
XPathNavigator root = MainDataSource.CreateNavigator();

// recuperation des valeur de la categorie2
string Categorie3 = root.SelectSingleNode("//my:Categorie2",  this.NamespaceManager).Value;

// On efface la valeur de categorie3
root.SelectSingleNode("//my:Categorie3",this.NamespaceManager).SetValue("");

// On recupere notre dataconnection categorie2
FileQueryConnection Mycon = FileQueryConnection)DataConnections["Categorie3"];

// On modify notre chemin et on y inclut un filtre basé sur la categorie3
Mycon.FileLocation = @"http:// SharepointSite/_vti_bin/owssvr.dll" + "?Cmd=Display&List={GUID}"
+ "&XMLDATA=TRUE&FilterField1=Cat%5Fx00e9%5Fgorie1&FilterValue1=" + Categorie3;

// On execute notre nouvelle requete
Mycon.Execute();

IV. Publication du formulaire avec code

Lorsqu'un formulaire InfoPath en mode Form Server a du code managé, il doit être exécuté en « Full trust » et pour cela il faut qu'il soit signé. On se rend dans « Form option » , « Security and trust ». Dans « Security level », on sélectionne « Full trust ». Si vous ne disposez pas de certificat public vous pouvez en créer un par Office avec le bouton « Create certificate »

image

On peut maintenant enregistrer et publier ce formulaire. Lorsqu'on le publie dans SharePoint, l'assistant de publication nous informe que le formulaire doit être approuvé par un Administrateur avant d'être disponible pour les utilisateurs :

image

Sélectionnez un endroit pour sauvegarder votre formulaire puis dirigez-vous dans l'interface d'administration de SharePoint.

Dans l'onglet « Application Management », section « InfoPath Forms Services », téléchargez votre formulaire.

image

Cliquez sur votre formulaire puis sur « Activate to a Site Collection ». Sélectionnez votre collection de sites SharePoint puis cliquez sur « Ok ». Le statut de votre formulaire passe alors en « Ready ».

V. Configuration de la bibliothèque de documents

Ouvrez votre bibliothèque de documents et accédez aux propriétés de cette bibliothèque puis sur « Advanced Settings ». Sur la nouvelle page activez la gestion du type de contenu « Allow management of content types » et validez.

Dans la section « Content Types » cliquez sur « Add from existing site content types ».

Sélectionnez dans le menu déroulant « Microsoft Office InfoPath », vous pourrez alors voir votre formulaire InfoPath dans la liste et l'ajouter.

image

VI. Conclusions

Après les tests et la publication, on devrait avoir des filtres fonctionnels sous InfoPath Form server.

image

VII. Remerciements

Merci à toute l'équipe .NET pour les relectures et corrections, ainsi que Benjamin Roux pour son support.


Merci également à ram-0000, Caro-Line, Jacques-Jean, Pierre Fauconnier pour leur relecture finale.