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é.
L'image ci-dessous représente le même formulaire affichant les contrôles permettant d'approuver ou de rejeter la demande.
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.
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
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
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:
Choisissez l'option Receive et ensuite l'option Sharepoint library or list
Saisissez ensuite l'URL du site contenant la liste qui contient les données
Et ensuite la liste contenant les données
Enfin, choisissez la colonne de la liste qui contient l'information que vous souhaitez utiliser
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"
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.