I. Pré-requis▲
Voici une liste non-exhaustive des pré-requis nécessaires pour pouvoir aisément comprendre ce tutoriel.
- Bien connaître Sharepoint dans son utilisation
- Savoir comment développer un workflow sans formulaire associé
- Connaître les bases d'Infopath
- Connaître au moins en théorie le mécanisme de feature de Sharepoint
II. Introduction▲
Ce tutoriel focalise uniquement sur l'association de formulaires Infopath aux workflows. Si vous ne savez pas comment créer un workflow, je vous suggère de consulter ce tutoriel. Afin de faciliter la compréhension, trois projets embarquant trois types de formulaires différents sont disponibles en téléchargement. Ces projets sont volontairement simples et épurés afin de n'aborder que la création et l'association de formulaires Infopath.
Ces trois projets feront ceci:
- Un workflow comprenant un formulaire d'association et récupérant les données de l'association en les stockant dans le champ Titre d'un élément de liste
- Un workflow comprenant un formulaire d'initiation et récupérant les données en les stockant dans le champ Titre de l'élément d'une liste
- Un workflow créant une tâche et embarquant un formulaire Infopath d'édition de tâche
Les workflows en eux-mêmes ne seront pas d'un grand intérêt mais illustreront bien la mécanique d'association de formulaires Infopath aux workflows Sharepoint.
Enfin, pour pouvoir être en mesure de reproduire ou d'utiliser les projets, vous devez disposer d'Infopath 2007 et d'un MOSS 2007.
III. Types de formulaires▲
III-A. Formulaire d'association▲
Un formulaire d'association permet de définir certains paramètres lors de l'association d'un workflow à une liste
Voici par exemple le formulaire d'association (une partie) du workflow standard d'approbation de MOSS
Ce formulaire sert à collecter des informations importantes pour le déroulement du workflow. Il permet notamment de spécifier si l'on
souhaite permettre à la personne initialisant une approbation de réassigner le workflow à une autre personne, il permet de spécifier une date d'échéance
etc...
Ce formulaire est ouvert lors de l'association d'un workflow à une bibliothèque. Ces paramètres ne sont donc demandés qu'une seule fois par bibliothèque.
III-B. Formulaire d'initiation▲
Un formulaire d'initiation permet de définir certains paramètres lorsque l'on démarre une nouvelle instance de workflow. On va définir ce type de formulaire lorsqu'une intervention humaine est requise et lorsque le contexte d'évolution du workflow justifie l'acquisition de certains paramètres pouvant influer sur le déroulement du workflow.
Voici par exemple le formulaire d'initiation (une partie) du workflow standard d'approbation de MOSS
En fonction des paramètres définis lors de l'association et lors de chaque nouvelle instance du workflow d'approbation, ce formulaire est ouvert et offre la possibilité
de spécifier certaines données lors de l'exécution du workflow. Il a aussi récupéré certaines données qui ont été définies lors de l'association.
III-C. Formulaire de tâche▲
Le concept de tâche est assez classique dans Sharepoint. Il s'agit de demander l'intervention d'un utilisateur dans le processus d'un workflow. Par exemple, on peut créer une tâche qui demande à un utilisateur d'approuver un document, de relire un document, de valider une suppression....
La dite tâche est créée dans une liste de tâches. En fonction de ce que l'on demande à l'utilisateur de faire, on devra très souvent créer un formulaire spécial permettant à l'utilisateur d'effectuer son intervention. Cette tâche va généralement basculer le workflow en statut In Progress jusqu'à ce que l'utilisateur l'ait complétée.
Voici un exemple de formulaire d'une tâche créée par le workflow d'approbation de MOSS.
Dans le cas présent, en cliquant sur le bouton Approve ou Reject, l'utilisateur clôturera la tâche et répercutera le statut de cette
approbation au niveau du document associé.
III-D. Formulaire de modification▲
Ce formulaire permet de modifier des paramètres liés à une instance de workflow en cours d'exécution. On peut par exemple décider de réassigner une tâche à un autre utilisateur ou encore modifier n'importe quel autre paramètre influant sur l'exécution du workflow
IV. Après la théorie, la pratique▲
IV-A. Etapes pour créer un formulaire d'association ou d'initiation dans Infopath▲
Je regroupe la création d'un formulaire d'initiation et d'association au sein de la même section car les mécanismes sont identiques. Seul le formulaire de tâche requiert une procédure légèrement différente.
IV-A-1. Création du formulaire▲
Ouvrez Infopath et créer un nouveau formulaire. Nommez-le SimpleAssociation.xsn. Ensuite, la première chose à faire est de rendre notre formulaire compatible avec Forms Services. En effet, Forms Services est le service qui sera sollicité par MOSS lors de l'association du workflow à une liste lorsqu'il invoquera notre formulaire. Une bonne pratique consiste à spécifier cette exigence de compatibilité dès la création du formulaire car pas mal de contrôles sont incompatibles avec Forms Services et Infopath les enlève lorsqu'il détecte que vous souhaitez construire un formulaire Forms Services. L'intérêt est donc d'éviter de construire entièrement le formulaire et de se rendre compte en fin de conception que la moitié des contrôles que vous avez utilisé sont en fait incompatibles et inutilisables pour votre workflow :).
Pour rendre le formulaire compatible, cliquez sur Design Checker
Ensuite cliquez sur Change compatibility settings
Cochez la case comme illustré.
Cliquez ensuite sur Security and Trust et spécifiez le mode
Full Trust
Le mode Full Trust est requis pour exécuter les formulaires Infopath au sein des workflows.
Veillez à présent à construire votre formulaire afin d'obtenir ceci:
L'interface utilisateur
La source de données
veillez à nommer votre source de données SimpleAssociationData comme illustré sur
l'image.
Le bouton Valider permet de soumettre les données d'association et est lié à une connexion permettant l'envoi de données vers le processus appelant. Le bouton Annuler quant à lui exécute une action consistant à fermer le formulaire sans envoyer les données vers l'hôte. Voici comment créer la connexion liée au bouton Valider
Dans la partie Data Sources, cliquez sur Manage Data Connections et ensuite sur Add, vous obtenez le formulaire suivant:
Choisissez Create a new connection to Submit data et ensuite cliquez sur Next pour obtenir l'écran suivant
Choisissez l'option illustrée par l'image, ensuite cliquez sur Next et appelez la connexion Soumettre
Il est à présent temps d'associer notre bouton Valider à la connexion Soumettre. Double-cliquez sur le bouton Valider pour obtenir cet écran
Cliquez ensuite sur Rules et ensuite sur Add, vous obtenez l'écran suivant
Nommez la règle ValiderEtFermer et ensuite cliquez sur Add Action
Remplissez l'écran comme illustré ci-dessus. Ensuite, cliquez à nouveau sur Add Action et choisissez l'action
Close this form..., vous devez obtenir au final, ceci
Le bouton Valider est à présent opérationnel. Pour le bouton Annuler procédez comme pour le bouton Valider mais n'ajoutez que l'action
Close the form...
Le formulaire est prêt. Il ne reste plus qu'à le publier
IV-A-2. Publication du formulaire▲
Les étapes de publication du formulaire sont assez simples. Il s'agit de le publier vers un répertoire ou une ressource réseau. Le formulaire ainsi publié sera référencé par notre workflow et chargé dans Sharepoint lors de l'installation de la feature liée au workflow.
Avant la publication, enregistrez votre formulaire quelque part sur votre disque dur. Je vous conseille de l'enregistrer en dehors de votre projet Visual Studio lié à votre workflow ou alors dans un répertoire bien distinct pour éviter toute confusion ultérieure.
Cliquez sur Publish form template
Choisissez ensuite, To a network location et spécifiez le chemin du répertoire cible
Idéalement, placez la version publiée du formulaire dans le répertoire FeatureFiles de votre projet
Visual Studio. Dans mon cas, c'est le répertoire C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\SimpleAssociation\DeploymentFiles\FeatureFiles
Si vous avez un chemin dans la zone de texte, retirez-le et cliquez sur Next. Enfin, pour terminer, cliquez sur Publish puis sur Close
Le formulaire est à présent publié et prêt à l'emploi.
IV-A-3. Sauver les sources et création de la classe de sérialization via XSD▲
Maintenant que vous avez créé et publié le formulaire, il reste deux choses à faire :
- Récupérer l'URN du formulaire
- Enregistrer le formulaire en mode source et générer la classe .cs qui nous permettra de collecter les données d'association entrées par l'utilisateur
IV-A-3-a. Récupération de l'URN▲
Ouvrez le menu File => Properties
et récupérez l'URN
On utilisera l'URN dans la section suivante. En attendant, faites un copier/coller dans le bloc note
IV-A-3-b. Enregistrer les sources et utilisation de XSD▲
Cliquez sur File=>Save as source files...
choisissez un répertoire cible et cliquez sur Ok. Fermez Infopath.
Dans le répertoire où vous avez enregistré les sources, vous devez retrouver ces fichiers
Le seul qui nous intéresse vraiment est myschema.xsd qui contient le schéma de notre datasource principal.
C'est à partir de ce fichier que nous allons créer la classe csharp correspondante. Ouvrez une commande DOS (visual studio tools) et positionnez-vous dans
le répertoire où vous avez enregistré les sources. Exécutez ensuite cette commande
xsd myschema.xsd /c
Cette commande vous créerez le fichier myschema.cs
Pour terminer, ajoutez ce fichier à votre solution Visual Studio et donnez-lui un nom approprié, comme par exemple DonneesAssociation
IV-A-4. Association du formulaire au workflow▲
La dernière étape consiste à associer le formulaire au workflow. Pour ce faire, vous devez éditer les fichiers feature.xml et workflow.xml.
IV-A-4-a. feature.xml▲
La seule chose à faire au niveau du fichier feature.xml est de spécifier que l'on souhaite enregistrer le formulaire dans le "magasin" de formulaire de notre ferme. Ceci se fait grâce à la directive RegisterForms couplée à la directive ElementFile qui spécifie l'emplacement et le nom du/des formulaires à charger
<Feature
Id
=
"2A4B0389-5ED3-423e-9CB0-E347342B21F4"
Title
=
"Simple Association"
Description
=
"Ce workflow utilise un formulaire d'association"
Version
=
"12.0.0.0"
Scope
=
"Site"
ReceiverAssembly
=
"Microsoft.Office.Workflow.Feature, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
ReceiverClass
=
"Microsoft.Office.Workflow.Feature.WorkflowFeatureReceiver"
xmlns
=
"http://schemas.microsoft.com/sharepoint/"
>
<ElementManifests>
<ElementManifest
Location
=
"workflow.xml"
/>
<ElementFile
Location
=
"SimpleAssociation.xsn"
/>
</ElementManifests>
<Properties>
<Property
Key
=
"GloballyAvailable"
Value
=
"true"
/>
<Property
Key
=
"RegisterForms"
Value
=
"*.xsn"
/>
</Properties>
</Feature>
Si vous souhaitez isoler vos formulaires dans un répertoire séparé, il suffit de renseigner le chemin relatif à la directive ElementFile pour indiquer à la feature où se trouvent les formulaires.
IV-A-4-b. workflow.xml▲
Dans ce fichier, nous devons spécifier que nous souhaitons utiliser un formulaire d'association. Pour ce faire, nous devons renseigner l'attribut AssociationUrl et le metadata Association_FormURN.
<Elements
xmlns
=
"http://schemas.microsoft.com/sharepoint/"
>
<Workflow
Name
=
"Simple Association"
Description
=
"Ce workflow utilise un formulaire d'association"
Id
=
"FBAD33C1-D237-455f-875E-F68A92314288"
CodeBesideClass
=
"SimpleAssociation.Workflow1"
CodeBesideAssembly
=
"SimpleAssociation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=34c70c0a7a1ac3ee"
TaskListContentTypeId
=
"0x01080100C9C9515DE4E24001905074F980F93160"
AssociationUrl
=
"_layouts/CstWrkflIP.aspx"
StatusUrl
=
"_layouts/WrkStat.aspx"
>
<Categories/>
<!-- Tags to specify InfoPath forms for the workflow; delete tags for forms that you do not have -->
<MetaData>
<Association_FormURN>
VOTRE URN</Association_FormURN>
</MetaData>
</Workflow>
</Elements>
AssociationUrl contient la page standard d'encapsulation du formulaire Infopath. Le metadata Association_FormURN contient l'URN de notre formulaire que nous avons récupéré dans la section précédente. Dans notre exemple il s'agit de cette URN :
urn:schemas-microsoft-com:office:infopath:SimpleAssociation:-myXSD-2008-03-03T12-51-23
IV-A-5. Récupération des données d'association dans le workflow▲
Maintenant que nous avons procédé à toutes les étapes de création et d'association de notre formulaire d'association au workflow, voici comment récupérer les données du formulaire. Grâce à la classe générée par XSD et nommée DonneesAssociation dans notre exemple, nous pouvons sur l'activation du workflow récupérer les données comme suit
XmlSerializer serializer =
new
XmlSerializer
(
typeof
(
SimpleAssociationData));
XmlTextReader reader =
new
XmlTextReader
(
new
System.
IO.
StringReader
(
workflowProperties.
AssociationData));
SimpleAssociationData Assoc =
(
SimpleAssociationData)serializer.
Deserialize
(
reader);
if
(
Assoc.
TexteAssociation !=
null
&&
Assoc.
TexteAssociation !=
""
)
workflowProperties.
Item[
"Title"
]
=
Assoc.
TexteAssociation;
else
workflowProperties.
Item[
"Title"
]
=
"Aucune donnée spécifiée"
;
workflowProperties.
Item.
Update
(
);
Ce code initialise un serialiseur XML et un reader pour desérialiser le XML contenu dans les données d'association et en faire une instance valide de classe de type SimpleAssociationData qui est le nom de la classe du fichier DonneesAssociation.cs qui a été créé à l'aide de l'outil XSD
Ensuite pour que notre workflow effectue quand même une action, on met à jour le champ Titre de l'élément de liste sur lequel le workflow a été exécuté.
IV-A-6. Exécution de notre workflow▲
Les quelques captures d'écran ci-dessous montrent les étapes d'exécution de notre workflow.
Lors de l'ajout de notre workflow à une bibliothèque, notre formulaire d'association apparaît
Démarrage du workflow
Résultat après exécution
Le champ Title contient bien la valeur test que l'on a encodée dans notre formulaire d'association.
IV-A-7. Spécificités du formulaire d'initiation▲
Toutes les étapes de création du formulaire d'initiation avec Infopath sont identiques à celles requises pour créer un formulaire d'association. Ceci est d'ailleurs tellement vrai que les projets SimpleAssociation et SimpleInitiation disponibles en téléchargement utilisent le même formulaire. Les seules différences se situent au niveau de notre workflow Visual Studio pour associer le formulaire d'initiation au workflow et pour récupérer les données.
Voici le détail pour gérer ces différences
IV-A-7-a. workflow.xml▲
Dans ce fichier, vous devez à présent renseigner l'attribut InstantiationUrl et le metadata Instantiation_FormURN. La démarche est donc identique à ce que nous faisions pour le formulaire d'association, simplement les attributs changent
<Elements
xmlns
=
"http://schemas.microsoft.com/sharepoint/"
>
<Workflow
Name
=
"Simple Initiation"
Description
=
"Simple Initiation"
Id
=
"ADCC8485-F36C-404b-93E2-D6D0629ABC19"
CodeBesideClass
=
"SimpleInitiation.Workflow1"
CodeBesideAssembly
=
"SimpleInitiation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1e28b168300722b5"
TaskListContentTypeId
=
"0x01080100C9C9515DE4E24001905074F980F93160"
InstantiationUrl
=
"_layouts/IniWrkflIP.aspx"
StatusUrl
=
"_layouts/WrkStat.aspx"
>
<Categories/>
<!-- Tags to specify InfoPath forms for the workflow; delete tags for forms that you do not have -->
<MetaData>
<Instantiation_FormURN>
VOTRE URN/Instantiation_FormURN>
</MetaData>
</Workflow>
</Elements>
Où VOTRE URN est la même que pour le formulaire d'association puisque nous utilisons le même formulaire :).
Le fichier feature.xml reste quant à lui inchangé.
IV-A-7-b. Récupération des données d'association dans le workflow▲
Le code est exactement le même si ce n'est qu'on récupère les données de la propriété InitiationData et non AssociationData
XmlSerializer serializer =
new
XmlSerializer
(
typeof
(
SimpleAssociationData));
XmlTextReader reader =
new
XmlTextReader
(
new
System.
IO.
StringReader
(
workflowProperties.
InitiationData));
SimpleAssociationData Init =
(
SimpleAssociationData)serializer.
Deserialize
(
reader);
if
(
Init.
TexteAssociation !=
null
&&
Init.
TexteAssociation !=
""
)
workflowProperties.
Item[
"Title"
]
=
Init.
TexteAssociation;
else
workflowProperties.
Item[
"Title"
]
=
"Aucune donnée spécifiée"
;
workflowProperties.
Item.
Update
(
);
Note : Pour vous montrer à quel point les formulaires d'association et d'initiation se traitent de la même manière, j'ai utilisé le même formulaire. C'est pour cela que l'instruction typeof référence toujours le type SimpleAssociationData que l'on avait créé avec XSD. Dans un contexte réel, si cela vous arrive d'utiliser le même formulaire pour l'association et l'initiation, vous veillerez bien sûr à donner un nom générique pour éviter toute confusion.
IV-B. Remarque importante concernant les formulaires d'association et d'initiation▲
Lorsque vous utilisez un formulaire d'association et un formulaire d'initiation au sein d'un même workflow, Sharepoint tentera de passer les données de l'association au formulaire d'initiation. Ceci implique que ces deux formulaires doivent impérativement avoir le même schéma, faute de quoi une erreur surviendrait et vous seriez incapable de démarrer votre workflow correctement.
Pour pallier à ce "problème", il faut soit utiliser le même formulaire (comme on l'a fait dans ce tuto) et éventuellement masquer/montrer des parties de formulaire en fonction du contexte (association ou initiation), soit utiliser deux formulaires différents mais en veillant à ce qu'ils aient le même schéma XSD.
IV-C. Création d'un formulaire de tâche▲
Les étapes de création du formulaire Infopath sont presque totalement identiques. La seule différence est qu'il faut créer une source de données supplémentaire pour définir le schéma de notre tâche. Cette source de données doit s'appeler ItemMetadata. Nous reviendrons sur la création de cette source de données un peu plus tard.
Voici tout d'abord à quoi ressemble notre formulaire de tâche.
Le formulaire
La source de données principale (Primary Data Source)
Toutes nos connexions dont ItemMetadata. Soumettre est simplement une connexion de type Submit To Host comme
pour nos autres formulaires.
Notre source de données principale myFields contient les champs Approuve et Commentaire. Le champ Approuve est un booléen dont la valeur sera définie par les boutons Approuver et Rejeter. Ce booléen sera récupéré par notre workflow pour savoir si la tâche est clôturée ou pas. Comme pour notre formulaire d'association, des règles sont associées à ces boutons. Voici le détail de la règle associée au bouton Approuver
- La première action consiste à mettre la valeur du champ Approuve à TRUE
- La deuxième action soumet les données au processus appelant
- La troisième action ferme le formulaire
Pour les autres règles, je vous laisse éditer le formulaire Infopath disponible en téléchargement
Voyons à présent comment créer la source de données secondaire ItemMetadata. Ouvrez le bloc notes et insérez-y ceci
<z:row xmlns:z="#RowsetSchema"
ows_Commentaire = ""
/>
où ows_Commentaire représente le nom du champ de notre source de données principale. Vous pouvez placer dans ItemMetada.xml tous les champs faisant partie de votre source de données principale et dont vous souhaitez garder la valeur dans le formulaire de tâche. La seule obligation est de préfixer le nom du champ par ows_
Lorsque vous avez créé ce fichier XML, dans Infopath, ajoutez une nouvelle connexion comme suit:
Spécifiez bien entendu la location de votre fichier
Note: veillez à bien respecter la casse pour ItemMetadata. Tout non respect de cette casse impliquera un dysfonctionnement.
Ensuite, cliquez sur Finish
Ceci fait, il reste à lier le contrôle Commentaire au noeud ows_Commentaire définit dans ItemMetadata. Double-cliquez sur le contrôle Commentaire. Vous obtenez ceci
Cliquez sur Fx puis sur Insert Field Or Group, vous obtenez l'écran de sélection, choisissez l'entrée comme illustré ci-dessous
La création de la source de données secondaire ItemMetadata est un peu contraignante mais permet d'éviter de générer une classe avec XSD. Nous pouvons dès à présent publier le formulaire de la même manière que les autres types de formulaires.
IV-B-1. Etapes du workflow créant une tâche▲
Le workflow, également disponible en téléchargement le plus basique possible pour créer une tâche correspond à ceci
soit
- L'activité SurActivation obligatoire
- L'activité CreeTache qui crée la tâche Sharepoint
- Une boucle (WhileAcitivy) qui vérifie si la tâche est complète ou non et qui encapsule l'activité QuandTacheChange
- L'activité CompleterTache qui termine la tâche
- L'activité de logging qui affiche le commentaire inséré dans la tâche dans l'historique du workflow
Je ne vais pas expliquer en détail le workflow et le code de celui-ci, vous pourrez l'examiner en téléchargeant le projet. Il faut simplement retenir que pour accéder aux données de notre tâche, nous passons cette fois par la collection ExtendedProperties proposée par le type SPWorkflowTaskProperties.
Dans cet exemple simpliste, les données de la tâche sont accédées comme suit
bool
Statut =
Convert.
ToBoolean
(
QuandTacheChange_ApresModif.
ExtendedProperties[
"Approuve"
].
ToString
(
));
TacheCommentaire =
QuandTacheChange_ApresModif.
ExtendedProperties[
"Commentaire"
].
ToString
(
);
if
(
Statut)
TacheApprouvee =
true
;
else
TacheApprouvee =
false
;
Comme vous pouvez le voir, c'est assez simple et ne nécessite aucune désérialization préalable.
IV-B-2. Référencement de notre formulaire dans workflow.xml▲
Vous l'avez compris, chaque formulaire a son propre noeud metadata. Pour un formulaire de tâche, il s'agit du noeud Task0_FormURN. Vous noterez la présence du "0". En réalité, vous pouvez avoir plusieurs formulaires de tâche dans un même workflow, dans ce cas, il vous suffira d'utiliser le noeud Task1_FormURN, Task2_FormURN etc...
Voici donc à quoi ressemble le code complet de workflow.xml
<Elements
xmlns
=
"http://schemas.microsoft.com/sharepoint/"
>
<Workflow
Name
=
"SimpleTache"
Description
=
"Ce workflow assigne une tâche"
Id
=
"4E7191A0-8E91-4b4b-8BFB-45A86BB4A554"
CodeBesideClass
=
"SimpleTache.Workflow1"
CodeBesideAssembly
=
"SimpleTache, Version=1.0.0.0, Culture=neutral, PublicKeyToken=67b46027114cd162"
TaskListContentTypeId
=
"0x01080100C9C9515DE4E24001905074F980F93160"
StatusUrl
=
"_layouts/WrkStat.aspx"
>
<Categories/>
<!-- Tags to specify InfoPath forms for the workflow; delete tags for forms that you do not have -->
<MetaData>
<Task0_FormURN>
urn:schemas-microsoft-com:office:infopath:SimpleTache:-myXSD-2008-03-02T13-45-52</Task0_FormURN>
</MetaData>
</Workflow>
</Elements>
IV-B-3. Exécution de notre workflow de tâche▲
Lorsque vous avez associé le workflow à une bibliothèque et lorsque vous l'avez exécuté sur un élément de liste, celui-ci reste en statut In Progress jusqu'à ce que la tâche soit approuvée
Il crée la tâche suivante:
qui redirige la personne à qui elle est assignée sur notre formulaire
Ce qui a pour effet de terminer notre workflow
Note: une fois de plus, cet exemple consiste à démontrer l'association d'un formulaire de tâche à un workflow. Ce n'est en aucun cas utilisable dans un environnement réel car :
- La tâche est assignée "en dur" à un utilisateur
- Aucun contrôle n'est fait en cas de suppression de tâche
- Aucune action n'est réalisée lorsque la tâche est refusée
- Bref, c'est du basique de chez basique :)
V. Un peu plus loin avec les formulaires Infopath▲
Si vous souhaitez associer du code behind à vos formulaires Infopath, je vous encourage à lire les posts suivants sur mon blog
Déployer une DLL avec un formulaire Infopath destiné à être utilisé dans un workflow
Manipuler une listbox Infopath Forms Services via du code behind
VI. Téléchargement▲
Vous trouverez ci-dessous les projets SimpleAssociation, SimpleInitiation et SimpleTache en téléchargement. Vous trouverez également dans un répertoire séparé, les 2 formulaires "sources" Infopath utilisés dans ce tutoriel.
Simple Association
Simple Initiation
Simple Tâche
Source Infopath
VII. Conclusion▲
Nous avons vu brièvement comment travailler avec des formulaires Infopath dans nos workflows. Pour ne pas compliquer les choses, j'ai isolé les types de formulaires dans des projets séparés. Il est bien sûr possible et même fréquent de travailler avec plusieurs types de formulaires pour un même workflow. On peut par exemple disposer d'un workflow ayant un formulaire d'association, un d'initiation et un ou plusieurs formulaires de tâches. Infopath offre une grande flexibilité en terme de conception d'interface utilisateur. Il est clairement plus facile et plus pratique à utiliser que des pages aspx classiques auxquelles il faut ajouter des instructions en inline code csharp pour pouvoir envoyer les données des formulaires vers le processus appelant.
L'utilisation de pages aspx n'a pas été abordée dans ce tutoriel mais est à proscrire si vous en avez la possibilité. La seule raison évidente d'utiliser des pages aspx plutôt que des formulaires Infopath est lorsque vous ne disposez pas de Forms Services dans votre ferme Sharepoint.