Présentation de Forms Services

Cet article a pour but de présenter Forms Services, un des nouveaux composants de MOSS 2007 via un exemple concret. Toutes les étapes liées à la création d'un formulaire Forms Services seront décrites (création, publication, déploiement, utilisation)

- Titre : Présentation de Forms Services

- Parution : 28 octobre 2007

- Licence : Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.

Sommaire

- I. Introduction

- II. Forms Services, c'est quoi et à quoi ça sert?

- III. Différences entre formulaires Infopath et ceux destinés à Forms Services

- III-A. Les contrôles

- III-B. La publication

- III-C. Le code

- IV. Présentation de l'interface offerte par Infopath 2007

- IV-A. Principaux composants

- IV-B. Les sources de données ou DataSources

- IV-C. Le Design Checker et les paramétrages liés

- IV-D. Les règles

- IV-E. L'affichage conditionnel

- IV-F. La validation automatique des données

- V. Création d'un formulaire de gestion de congés

- V-A. Ajout de nos connexions

- V-A-1. Connexion vers la liste Types de congés

- V-A-2. Connexion pour la soumission de notre formulaire

- V-B. Ajout de nos champs

- V-C. Ajout de notre section d'approbation

- V-D. Ajout de notre bouton de soumission

- V-E. Le code de notre formulaire

- V-D-1. Accès au code, choix du langage et outils nécessaires

- V-D-2. Le code

- VI. Déploiement de notre formulaire vers MOSS

- VI-A. Publication dans Infopath

- VI-B. Chargement du formulaire dans MOSS via la centrale d'administration

- VI-C. Association du formulaire à une bibliothèque

- VII. Téléchargement

- VIII. Conclusion

I - Introduction

MOSS 2007 est un produit qui est décidément fort intéressant tant il offre des possibilités. Le but de ce tutoriel est d'approcher de manière plus appronfondie l'une d'entre-elles, j'ai nommé Forms Services.

Nous explorerons une partie des capacités de Forms Services via un exemple concret. En effet, je vais développer au travers de ce tutoriel un formulaire de demande de congé. Ce formulaire communiquera en réception et en soumission de données avec Sharepoint. Le formulaire incluera une possibilité d'approbation/rejet de la demande et celle-ci se basera sur le profil utilisateur stocké dans Sharepoint. Une procédure en code-behind sera donc associée au formulaire afin d'identifier l'utilisateur courant et d'afficher/masquer la section d'approbation en conséquence.

Grâce à ce formulaire pas trop complexe, nous aurons une vision assez complète du potentiel de Forms Services et d'Infopath.

Afin d'avoir une idée plus précise du résultat obtenu, voici deux captures d'écran montrant le formulaire de demande de congé.

L'image ci-dessous représente un formulaire de demande de congé en mode normal, c'est à dire sans avoir la possibilité d'approuver. La capacité d'approbation sera réservée au manager de l'employé.

Vue normale

L'image ci-dessous représente le même formulaire affichant les contrôles permettant d'approuver ou de rejeter la demande.

Vue pour le manager

II - Forms Services, c'est quoi et à quoi ça sert?

Forms Services est un nouveau moteur disponible dans MOSS 2007 qui permet d'héberger des formulaires Infopath sur le serveur MOSS et de les convertir en page Web afin que les clients n'aient pas besoin de disposer d'Infopath sur leur machine pour pouvoir exploiter les formulaires.

Les formulaires Infopath sont des documents électroniques permettant de stocker de l'information dans les documents eux-mêmes et dans des métadonnées de liste Sharepoint. Ils bénéficient de divers contrôles de saisie qui peuvent se révéler très utiles dans un contexte web. Il est également possible d'associer du code behind C# ou VB.Net aux dits contrôles. L'interface bénéficie par ailleurs de techniques permettant d'afficher/masquer des contrôles aisément via l'affichage conditionnel, d'effectuer des validations sur les données, d'associer des "règles" effectuant certaines actions lorsqu'un évènement se produit.

Tous ces éléments vont permettre au développeur d'implémenter des solutions robustes de manière efficace et rapide. En outre, le développeur pourra associer ses propres modules de code pour effectuer des actions orientées métier en s'appuyant sur la désormais très riche plate-forme dotnet.

Enfin, il est également possible d'utiliser des formulaires Infopath dans des workflows Sharepoint. Ceci permettra de générer une IHM de qualité à moindre coût.

III - Différences entre formulaires Infopath et ceux destinés à Forms Services

Il paraît difficile de dresser une liste exhaustive des différences entre les formulaires Infopath classiques et ceux destinés à être exécutés par Forms Services. Cependant, lorsque l'on spécifie à Infopath que l'on souhaite développer un formulaire destiné à Forms Services, il va automatiquement retirer les contrôles qui ne sont pas compatibles avec ce dernier. Une procédure de vérification automatique est également enclenchée par Infopath pour s'assurer que votre formulaire est bel et bien compatible avec Forms Services.

III-A - Les contrôles

Le tableau ci-dessous reprend la liste des contrôles d'Infopath ainsi que leur compatibilité avec Forms Services

Contrôle

Description

Compatible

Textbox

Permet de saisir du texte

Oui

Rich Text Box

Permet de saisir du texte mis en forme

Oui

Drop down List Box

Expose une liste de données

Oui

Date Picker

Expose un calendrier permettant à l'utilisateur de spécifier une date

Oui

Check Box

Case à cocher

Oui

Option Button

Bouton d'option

Oui

Section

Permet de contenir un ensemble de sous-contrôles

Oui

Optional Section

Permet d'afficher une section de contrôles optionnelle. L'utilisateur peut l'enlever du formulaire

Oui

Repeating Section

Permet de créer une section de contrôles pouvant se répéter.

Oui

Repeating Table

Permet de créer une section de lignes de données comme par exemple des lignes de commandes. L'utilisateur pourra alors cliquer sur "New Row" ou "Delete Row"

Oui

File Attachement

Permet à l'utilisateur d'associer une ou plusieurs pièces jointes au formulaire

Oui

Hyperlink

Permet de créer des hyper-liens.

Oui

Expression Box

Permet d'afficher le résultat d'une expression

Oui

Picture

Non

Ink Picture

Non

Vertical Label

Non

Scrolling Region

Non

Horizontal Region

Non

Choice Group

Non

Repeating Choice Group

Non

Choice Section

Non

Repeating Recursive Section

Non

Horizontal Repeating Table

Non

Master/Detail

Non

Bulleted List

Non

Numbered List

Non

Plain List

Non

Multiple Section List Box

Non

Comme vous pouvez le constater, pas mal de contrôles ne sont pas disponibles pour des formulaires Forms Services. Néanmoins, la série de contrôles compatibles couvre déjà largement les besoins élémentaires en terme d'IHM de saisie.

III-B - La publication

La manière de publier les formulaires diffère en fonction du composant qui les exécutera. Nous aborderons cela dans la section VI.

III-C - Le code

Le code que vous utiliserez dans vos formulaires ne pourra pas être le même si c'est du Infopath ou du Forms Services. Par exemple, Forms Services exclut toute une série d'espaces de noms que vous ne pourrez donc pas utiliser. Il faut se rendre compte que ce sont en effet deux mondes différents. Lorsqu'un formulaire Infopath est exécuté par le Smart Client, c'est à dire par Infopath lui-même, cela se déroule dans un environnement Windows. Lorsque c'est Forms Services, le contexte d'exécution est un environnement Web. Le Web étant lui-même basé sur un serveur web et des protocoles plus contraignants et ayant pour seuls clients des navigateurs (IE, Firefox etc..), il est donc tout à fait naturel d'être confronté à ces restrictions.

IV - Présentation de l'interface offerte par Infopath 2007

IV-A - Principaux composants

L'image ci-dessous représente ce que j'appelle le "Tableau de bord" d'Infopath. C'est simplement une barre d'outils qui vous permet de gérer tout ce qu'il y a à gérer dans un formulaire.

Tableau de bord

Layout

Permet d'utiliser des tables diverses permettant de disposer les éléments de manière organisée sur le formulaire

Controls

Permet d'accéder à la liste des contrôles telle qu'exposée dans la section précédente

Datasource

Permet d'accéder à tous les contrôles contenus dans le formulaire courant ainsi qu'aux diverses connections vers le monde extérieur. Ces connections peuvent se faire vers des services webs, des bases de données et des listes Sharepoint

Views

Permet d'accéder aux différentes vues de notre formulaire. Un formulaire classique est généralement composé d'au moins deux vues, une vue de travail et une vue d'impression

Design Checker

Permet de spécifier les aspects liées à la sécurité, compatibilité, les fonctionnalités disponibles

Publish Form Template

Permet de publier le formulaire vers Sharepoint. Le mode de publication dépendra du type de formulaire à déployer

IV-B - Les sources de données ou DataSources

Les sources de données vous donnent accès aux différentes données contenues dans votre formulaire ainsi qu'aux connexions éventuelles vers des sources extérieures.

Voici l'écran que vous obtenez lorsque vous cliquez sur le lien DataSource de la barre d'outils principale

Datasource

Dans l'exemple illustré par l'image, on retrouve tous les éléments de notre formulaire Demande de congé. Un formulaire Infopath étant basé sur une structure XML, chaque élément du datasource est en fait un noeud XML. En double-cliquant sur une colonne on peut accéder à ses propriétés. On peut ajouter un nouvel élément, soit directement en faisant un glisser/déplacer d'un contrôle sur le formulaire, soit en le créant directement à partir du datasource comme illustré par l'image ci-dessous

Datasource

Outre le fait de pouvoir ajouter/supprimer des éléments (noeuds XML) à notre formulaire, on va également pouvoir ajouter des connexions vers le monde extérieur en cliquant sur le lien "Manage Data Connections" figurant en bas de l'écran Datasources.

Ces connexions peuvent être de deux types

- Submit data : pour envoyer des données vers un service web, un email, une liste Sharepoint

- Receive data : pour recevoir des données provenant d'un service web, un fichier XML, une liste Sharepoint ou une base de données

Note: Il est également possible d'utiliser des connexions partagées stockées sur un serveur Sharepoint. L'avantage de ce type de connexion est qu'elle peut être réutilisée plusieurs fois par des formulaires différents. En terme de maintenance, cela signifie que si la source des données change, nous ne devons effectuer qu'une seule mise à jour. Si on utilise des connexions normales, il faudra effectuer autant de mises à jour que l'on a de connexions.

Le but de ce tutoriel n'étant pas de faire une présentation complète des fonctionnalités d'Infopath, nous allons uniquement détailler comment effectuer une connexion vers une liste Sharepoint telle que cela a été fait pour le formulaire Demande de congé

Cliquez sur Design Tasks => Data Source => Manage Data Connections => Add. Vous obtenez l'écran suivant:

Datasource

Choisissez l'option Receive et ensuite l'option Sharepoint library or list

Datasource

Saisissez ensuite l'URL du site contenant la liste qui contient les données

Datasource

Et ensuite la liste contenant les données

Datasource

Enfin, choisissez la colonne de la liste qui contient l'information que vous souhaitez utiliser

Datasource

Cliquez ensuite sur Next jusqu'à la fin. Votre connexion est à présent créée et peut-être utilisée par les composants du formulaire. Elle peut-être utilisée plusieurs fois et également dans le code behind. Nous verrons plus tard comment la lier à une liste déroulante.

Note: Je n'aborderai pas ici les autres types de connexions. Simplement, pour les services webs, si vous souhaitez vous familiariser rapidement avec leur utilisation via Infopath,

IV-C - Le Design Checker et les paramétrages liés

Le Design Checker permet de basculer vers un écran de paramétrage complet concernant la sécurité, les options à montrer à l'utilisateur du formulaire etc...mais l'une des principales options et qu'il vaut mieux activer dès la création du formulaire est celle qui consiste à indiquer à Infopath que l'on crée un formulaire pour Forms Services.

En cliquant sur Design Checker et ensuite sur Change Compatibility Settings, on obtient l'écran suivant sur lequel on peut cocher la case "Design a form template that can be opened in a browser or Infopath"

Compatibility

Notez que cet écran peut également être obtenu en cliquant sur le menu Tools -> Form Options

IV-D - Les règles

Les règles constituent un mécanisme permettant d'effectuer une action lorsqu'un évènement se produit. Elles permettent d'effectuer certaines actions qui ne sont pas possibles via du code behind. Elles jouent donc un rôle crucial dans l'élaboration d'un formulaire Infopath.

Voici les différentes actions possibles pour Forms Services

Action

Description

Switch Views

Permet de basculer le formulaire d'une vue vers une autre.

Set a field's value

Permet d'affecter une valeur à un champ du formulaire. Cette valeur peut-être le résultat d'une fonction, d'une expression ou une simple valeur texte.

Query Using A Data Connection

Permet d'exécuter une requête à partir d'une connection définie. Lorsque vous définissez une connexion, le système active automatiquement l'option qui exécute la connexion dès le chargement du formulaire. On peut décider de désactiver cette option si l'on souhaite exécuter celle-ci plus tard, par exemple par le biais de cette règle

Submit Using A Data Connection

Permet de soumettre le formulaire en utilisant une connexion de type "Submit"

Close the form

Permet de fermer le formulaire

Pour affecter une ou plusieurs règles à un contrôle, il suffit de double-cliquer sur celui-ci et de cliquer sur le bouton Rules. Si l'on souhaite par exemple ajouter un bouton permettant de fermer le formulaire, on va ajouter ce bouton via l'onglet des contrôles, double-cliquer dessus et ensuite ajouter la règle "Close the form" au bouton.

Chaque règle peut-être exécutée de manière conditionnelle.

Note: Les règles peuvent donc soit se déclencer automatiquement soit conditionnellement. Il n'est par contre pas possible de les déclencher via le code behind (en tous cas j'ai jamais trouvé). Pour déclencher une règle via du code behind, il faut donc créer une règle se déclenchant lorsqu'un champ interne a une certaine valeur et affecter cette valeur via notre code.

IV-E - L'affichage conditionnel

Chaque contrôle (zone de saisie, bouton etc..) bénéficie de l'affichage conditionnel. On va donc pouvoir associer des conditions à nos contrôles qui permettent d'influer sur le comportement de celui-ci. Par exemple, on peut basculer un contrôle de Visible à Invisible, d'actif à inactif. On peut y associer de la mise en forme telle que couleur, gras, font etc...

On va typiquement utiliser l'affichage conditionnel pour n'activer des boutons que lorsque tous les champs requis sont bien remplis, afficher/masquer des zones en fonction de la personne connectée etc...

Note: Comme pour les règles, l'affichage conditionnel n'est pas accessible par le code behind. En outre, il n'est pas possible non plus (en forms services) de cibler directement un contrôle pour spécifier que celui-ci doit être visible/invisible, activé/désactivé etc...L'affichage conditionnel est donc incontournable.

IV-F - La validation automatique des données

Dès que vous placez un contrôle sur votre formulaire, celui-ci pointe automatiquement vers un noeud XML. Si ce contrôle correspond à une zone de saisie, celle-ci sera typée (texte, date, numérique etc...). Une validation automatique des données saisies se produit. Par exemple, dès qu'un utilisateur entrera du texte à la place d'un nombre dans une zone numérique, le système lui affichera un message d'erreur et empêchera la soumission du formulaire.

V - Création d'un formulaire de gestion de congés

V-A - Ajout de nos connexions

V-A-1 - Connexion vers la liste Types de congés

Reportez vous à la section IV-B qui détaille comment cette connexion a été réalisée

V-A-2 - Connexion pour la soumission de notre formulaire

Cette connexion nous permet de sauvegarder notre formulaire dans une bibliothèque de documents. Voici les étapes à suivre

Création d'une nouvelle connexion en mode soumission de données

On spécifie que la cible est une bibliothèque Sharepoint

On fournit l'URL de la bibliothèque et on indique que le nom de fichier vient de notre champ IDDemande (dont la valeur est attribuée par le code behind dans notre cas). On dit que l'on peut écraser le fichier s'il existe déjà. Etant donné que nous ne laissons pas l'utilisateur définir le nom de fichier, on sait que quoi qu'il arrive on ne risque pas d'écraser la demande de congé de quelqu'un d'autre.

V-B - Ajout de nos champs

Notre formulaire est consistué des champs suivants:

Champ

Type

Description

Employe

Texte

Contient le login de l'employé

Congés

Groupe répétitif

Contient les lignes de la demande. En effet une demande peut contenir plusieurs types de congés (RTT, Légaux etc..)

DateDebut

Date - DatePicker

Date de début de la ligne de demande

DateFin

Date - DatePicker

Date de fin de la ligne de demande

Type

Texte - Dropdown

Contient la liste des types de congés définie dans Sharepoint

Jours

Numérique

Contient le nombre de jours correspondants à la ligne de demande

StatutApprobation

Texte

Spécifie si la demande est approuvée/rejetée

TotalJours

Double

Nombre de jours total pour la demande

RaisonRejet

RichText

Raison du rejet éventuel

PeutApprouver

Booléen

Permet d'afficher ou non la zone d'approbation (champ Approbation) via l'affichage conditionnel

Approbation

Section

Zone contenant les boutons Approuver et Rejeter. Sera seulement affichée si l'utilisateur en cours est le manager de la personne ayant créé la demande

Erreur

Texte

Permet d'afficher une erreur à l'utilisateur. En effet, il n'est pas possible d'afficher un message box...

IDDemande

Texte

Contient le nom du fichier (LoginEmploye + Date du jour)

Pour ajouter un champ, il faut cliquer sur la source de données, faire add, spécifier le type et le nom du champ. Ensuite, il se retrouve dans la liste. Pour le placer sur le formulaire, il suffit alors de cliquer dessus et de choisir le type de contrôle (TextBox, Dropdown etc...).

Je ne détaillerai donc que la création du champ Type correspondant au type de congés (RTT, Légaux..). Afin de ne pas avoir une valeur figée, cette liste provient d'une liste Sharepoint (voir première connexion de notre formulaire). Pour créer ce champ, il fallait donc l'ajouter comme décrit ci-dessus et ensuite le sélectionner et cliquez sur Dropdown pour avoir un contrôle de liste associé sur notre formulaire. Lorsque vous avez cela, vous procédez comme suit:

Sélectionnez votre liste et cliquez sur le bouton droit pour aller dans ses propriétés

Choisissez l'option "Lookup ...external data sources" et ensuite choisissez la source préalablement définie qui pointe vers votre liste Sharepoint. Notez que vous pouvez directement créer une nouvelle connexion via le bouton Add. Vous devez ensuite spécifier la paire clé->valeur constituant votre liste en cliquant simplement sur le bouton entouré en rouge.

V-C - Ajout de notre section d'approbation

L'intérêt d'utiliser le contrôle section réside notamment dans le fait que l'on va pouvoir afficher/masquer toute une série de contrôles uniquement en mettant une règle d'affichage conditionnelle sur la section entière. Pour ajouter une section, il suffit d'aller dans nos contrôles et de faire un glisser-déplacer du contrôle section dans le formulaire.

Ajoutez-y également deux boutons (Approuver/Rejeter) en faisant un glisser-déplacer du contrôle bouton vers l'intérieur de la section. Vous devez obtenir ceci

Commencons par appliquer un affichage conditionnel sur la section. Pour ce faire, cliquez sur la section avec le bouton droit, allez dans Section Properties et ensuite choisissez l'onglet Display

Cliquez ensuite sur Conditional Formatting puis sur Add et ajoutez-y la règle suivante

Cette règle dit que si le champ PeutApprouver interne à notre formulaire a la valeur FALSE, la section sera masquée.

Il ne nous reste plus qu'à paramétrer nos boutons Approuver et Rejeter qui doivent simplement mettre la valeur du champ StatutApprobation à Approuvé ou Rejeté. Pour ce faire, rien de plus simple, il suffit d'utiliser les règles (exemple pour le bouton approuver).

Double-cliquez sur le bouton Approuver et ensuite sur le bouton Rules, puis sur Add et paramétrez cette règle

Il suffit de créer une règle similaire pour le bouton Rejeter

V-D - Ajout de notre bouton de soumission

Faites un glisser-déplacer d'un contrôle bouton sur le formulaire. Double-cliquez dessus et choisissez l'action Submit dans la liste d'actions. Si vous avez préalablement créé la connexion de soumission (expliquée en section V-A-2), Infopath liera automatiquement le bouton à votre connexion.

V-E - Le code de notre formulaire

V-D-1 - Accès au code, choix du langage et outils nécessaires

Pour choisir son langage, il faut aller dans le menu Tools -> Form Options -> Programming et choisir son langage. Celui par défaut est le Visual Basic.NET

Il n'est pas nécessaire de disposer de Visual Studio pour coder en Infopath. VSTO suffit.

Lorsque vous avez fait le choix du langage, pour accéder au code de votre formulaire, une des possibilités est Tools -> Programming -> Loading Event

V-D-2 - Le code

/// <summary>
/// Cette méthode est automatiquement appelée lors du chargement du formulaire
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void FormEvents_Loading(object sender, LoadingEventArgs e)
{
//Vérifie si on est bien dans le contexte d'un navigateur
//n'ira donc pas dans le if si on fait un preview à partir d'Infopath
if (Application.Environment.IsBrowser)
{
//Champ interne permettant d'afficher une erreur
ResetError();
//Création d'un navigateur Xpath pointant sur les données de notre formulaire
XPathNavigator MainData = MainDataSource.CreateNavigator();
//On pointe sur IDDemande pour lui attribuer un nom car cette donnée sert de nom
//de fichier
if (MainData.SelectSingleNode("/my:DemandeConge/my:IDDemande", NamespaceManager).Value == "")
{
//En cas de premier chargement, il faut créer le nom de la demande
MainData.SelectSingleNode("/my:DemandeConge/my:Employe",
NamespaceManager).SetValue(Application.User.LoginName);

MainData.SelectSingleNode("/my:DemandeConge/my:IDDemande", NamespaceManager).SetValue(
Application.User.LoginName + "_" + DateTime.Now.ToShortDateString());
}
//Booléen interne activant ou non l'affichage conditionnel de la section
//d'approbation présente dans le formulaire
MainData.SelectSingleNode("/my:DemandeConge/my:PeutApprouver",
NamespaceManager).SetValue("false");

//si l'utilisateur actuel n'est pas la personne qui a créé la demande
if (Application.User.LoginName != MainData.SelectSingleNode("/my:DemandeConge/my:Employe", NamespaceManager).Value)
{
//Si c'est le manager de la personne
if (IsManager(Application.User.LoginName))
{
//On affiche la section d'approbation
MainData.SelectSingleNode("/my:DemandeConge/my:PeutApprouver", NamespaceManager).SetValue("true");
}
}

}
}
/// <summary>
/// Vérifie que le login passé en paramètre correspond au manager de la personne
/// ayant créé la demande de congé
/// </summary>
/// <returns></returns>
private bool IsManager(string Person)
{
try
{
UserProfileManager ProfileManager = new UserProfileManager(
ServerContext.GetContext(SPContext.Current.Site));
UserProfile CurrentProfile = ProfileManager.GetUserProfile(
MainDataSource.CreateNavigator().SelectSingleNode("/my:DemandeConge/my:Employe",NamespaceManager).Value);
if (CurrentProfile["Manager"].Value != null && CurrentProfile["Manager"].Value.ToString() == Person)
{
return true;
}

}
catch (UserNotFoundException)
{
ShowError("Le profil de l'employé n'a pu être trouvé parmi les profils utilisateurs");

}
catch (Exception Ex)
{
ShowError("Une erreur s'est produite:" + Ex.Message);

}
return false;
}

VI - Déploiement de notre formulaire vers MOSS

Le déploiement d'un formulaire vers MOSS se fait en trois étapes.

VI-A - Publication dans Infopath

Pour publier un formulaire de type Forms Services, il faut le publier vers une ressource réseau, disque dur local sous forme de fichier. Le mode de publication peut varier en fonction du contenu du formulaire (code behind par ex). Voici comment le formulaire Demande de congé a été publié.

Il faut tout d'abord cliquer sur le lien Publish Form Template présent dans le tableau de bord. On obtient alors l'écran suivant par lequel on spécifie que l'on souhaite publier vers un serveur Sharepoint. Ceci servira à Forms Services lors du chargement du formulaire dans Sharepoint

Ensuite, on saisit l'URL du serveur en question.

Ensuite, étant donné que notre formulaire contient du code behind, on est obligé de le publier en tant que "Administrator Approved Form".

L'étape suivante consiste à sauvegarder le template sur notre disque dur ou une ressource réseau. C'est ce fichier qu'on ira rechercher lorsque l'on souhaitera charger le formulaire dans Sharepoint

Cette étape est très importante car elle permet de spécifier les colonnes de notre formulaire que l'on souhaite voir apparaître en tant que métadonnée dans le type de contenu qui sera utilisé par le formulaire. Ces colonnes pourront ensuite faire l'objet de workflows, de filtres, de vues, d'event handler etc... car elles existeront en dehors du formulaire Infopath lui-même. Cette étape porte le nom de Property Promotion

Ensuite, il suffit de cliquer Next puis Finish.

VI-B - Chargement du formulaire dans MOSS via la centrale d'administration

Pour passer à cette étape, il faut impérativement publier le formulaire au préalable (voir section précédente). Lorsque vous avez publié votre formulaire, vous avez dû spécifier un emplacement sur votre disque dur ou sur le réseau. Dans notre exemple, j'ai publié mon formulaire vers c:\, le formulaire publié est donc c:\DemandeConges.xsn

Note : il est possible d'utiliser l'outil stsadm pour charger un formulaire Infopath dans Forms Services.

Ouvrez la centrale d'administration et allez dans Application Management. Dans la section Forms Services, cliquez sur le lien Upload Form Template

Décochez la case intitulée "Upgrade...." et cliquez sur Upload. Ensuite, vous cliquez sur le bouton Ok. Ceci vous bascule vers la liste de tous les formulaires existants.

Note: lorsque vous chargez/modifiez/supprimez un formulaire, le pool d'application IIS lié à votre application est recyclé. Il peut donc parfois arriver que vous tombiez sur une page vous affichant "Service not available..." mais ceci ne sera que temporaire, le temps que le recyclage du pool soit terminé.

Si tout se passe bien, vous devez donc tomber sur cet écran

Vérifiez bien que votre le statut soit à "Ready" ou "Prêt". Si ce n'est pas le cas et que ça traîne un peu, vous pouvez forcer la mise à jour du système via la commande stsadm -o execadmsvcjobs. Ensuite, pour mettre votre formulaire à disposition d'une collection, vous devez l'activer en cliquant sur Activate to a Site Collection

Cliquez sur la collection de votre choix (choisissez la bonne application) et ensuite cliquez sur Ok.

Voici ce que fait réellement Sharepoint lorsque vous activez un formulaire Forms Services pour une collection

- Il crée une site collection feature (à disposition dans Site Collection Features)

- Il ajoute votre formulaire à la liste Form Templates

- Il crée un type de contenu dans le groupe Microsoft Office Infopath portant le nom de votre formulaire et les promoted properties (propriétés promues en métadonnées)

VI-C - Association du formulaire à une bibliothèque

Lorsque vous avez chargé votre formulaire dans Sharepoint et que vous l'avez activé pour une collection particulière, vous pouvez aller dans votre collection. Dans mon cas, cette collection est http://sey-pc:2351/sites/developpez. Vous devez y retrouver la liste Form Templates et y trouver votre formulaire à l'intérieur.

Maintenant que vous l'avez, il faut pouvoir l'utiliser. Pour ce faire, vous allez l'associer à une bibliothèque de documents. Comme je vous l'ai dit précédemment, Sharepoint a créé un type de contenu associé à votre formulaire, le voici sur mon installation

Je n'ai donc qu'à associer ce type de contenu à ma bibliothèque. Il faut donc faire ce qui suit:

- Aller dans les propriétés avancées de la bibliothèque de son choix et activer la gestion de types de contenu, activer également l'option Display as web page

Note: par défaut, MOSS essaye d'ouvrir le formulaire avec Infopath si celui-ci est installé sur la machine cliente. Si vous souhaitez forcer l'ouverture en page Web (préférable pour être certain que votre formulaire fonctionne correctement avec Forms Services) , vous devez activer l'option Display as web page

- Ajouter le type de contenu DemandeConges et éventuellement supprimer le type Document pour permettre uniquement la création de demandes de congés pour cette bibliothèque

- Ceci aura pour effet direct d'ajouter les colonnes liées au type de contenu à votre bibliothèque

Vous pouvez dès à présent créer une nouvelle demande de congés.

VII - Téléchargement

Le formulaire est disponible en téléchargement. Par souci de faciliter, dézippez le fichier DemandeConge.zip dans le répertoire C:\Documents and Settings\Administrator\My Documents\InfoPath Projects. Celui-ci varie en fonction de votre installation. Le but est d'extraire l'archive dans Infopath Projects.

Voici le lien vers le projet

VIII - Conclusion

Nous avons vu au travers d'un exemple simple comment mettre en oeuvre une fonctionnalité via un formulaire Forms Services. Il va bien sûr de soi que cet exemple de gestion de congé ne constitue pas une solution clé en main.