Développer des workflows avec formulaires Infopath embarqués

Dans ce tutoriel, vous découvrirez comment associer des formulaires Infopath à vos workflows. Je remercie l'équipe Office pour sa relecture

- Titre : Développer des workflows avec formulaires Infopath embarqués

- Parution : 5 avril 2008

- 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. Pré-requis

- II. Introduction

- III. Types de formulaires

- III-A. Formulaire d'association

- III-B. Formulaire d'initiation

- III-C. Formulaire de tâche

- III-D. Formulaire de modification

- IV. Après la théorie, la pratique

- IV-A. Etapes pour créer un formulaire d'association ou d'initiation dans Infopath

- IV-A-1. Création du formulaire

- IV-A-2. Publication du formulaire

- IV-A-3. Sauver les sources et création de la classe de sérialization via XSD

- IV-A-3-a. Récupération de l'URN

- IV-A-3-b. Enregistrer les sources et utilisation de XSD

- IV-A-4. Association du formulaire au workflow

- IV-A-4-a. feature.xml

- IV-A-4-b. workflow.xml

- IV-A-5. Récupération des données d'association dans le workflow

- IV-A-6. Exécution de notre workflow

- IV-A-7. Spécificités du formulaire d'initiation

- IV-A-7-a. workflow.xml

- IV-A-7-b. Récupération des données d'association dans le workflow

- IV-B. Remarque importante concernant les formulaires d'association et d'initiation

- IV-C. Création d'un formulaire de tâche

- IV-B-1. Etapes du workflow créant une tâche

- IV-B-2. Référencement de notre formulaire dans workflow.xml

- IV-B-3. Exécution de notre workflow de tâche

- V. Un peu plus loin avec les formulaires Infopath

- VI. Téléchargement

- VII. Conclusion

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.