Petites infos / petits rappels en vrac :

è WF4 ==> VS 2010 ==> WPF

è Dans WF4, 2 types de workflows sont actuellement mis à disposition via les templates de VS2010 : « Sequential » et  « Flowchart »

è Le designer de workflow a été revu. Alors pour le coup, on aime/on aime pas. Mon avis est mitigé. Je trouve que plus d’informations sont affichées, mais on obtient vite un effet brouillon où l’on se perd…

 

è La gestion des données des Workflows a aussi été revue à l’épurement. La gestion des variables et argument d’appel du WF sont intégrés à l’environnement du designer.

è L’objectif éternel de tout développeur qui se respecte est une fois de plus mis en avant :

« Dissocier le code du design !! » J

Ce qui se traduit dans le cadre de développement workflows par :

« Développer des activités avec du code, pour pouvoir designer le workflow (orchestrer les activités), sans une ligne de code ! »

On relève les manches et on code l’orchestration du workflow !

Allez, c’est parti. Je vous rappel que l’objectif final est d’arriver à la définition du Workflow. Un workflow est une suite d’activité, standards ou custo, mais au final tout cela revient à déclarer une suite d’activité. Et cette déclaration peut se faire uniquement avec le code.

Sequence workflowExemple = new Sequence

{

Activities = {

new WriteLine {Text = "Hello", TextWriter = writer},

new WriteLine {Text = "World", TextWriter = writer}

}

};

A quoi ca sert ? Franchement…à rien. Sauf à démontrer qu’une fois le workflow modélisé uniquement via le code :

-           on l’exécute

-          on le déserialise et on obtient le XAML de définition…

Pardon, vous avez dit XAML ?? Oui, j’ai dit XAML car ça y est! Comme son cousin WPF, la version 4 de Workflows Foundation se base sur une définition en XAML , pour créer un workflow, via le designer. On a donc une vraie isolation code / implémentation.

Au secours ! Y a-t-il un Designer (de WF) dans la salle !!

Heureusement, pour créer un workflow au quotidien, on utilisera le designer. Même si le design des activités et des Workflows ont changé, on n’est pas du tout déboussolé ! Le zoom / dézoom pas à pas est un vrai régal !

Bon, ce coup ci, on y va

1ère étape, on créer nos activités

Et là, on a le choix :

-          La première approche est d’utiliser un Workflow en tant qu’activité. Les Workflows s’appellent désormais clairement avec des paramètres passés lors de l’appel, et des variables de retour en fin d’exécution.

-          On créer une activité custo en se basant sur l’héritage suivant :

CodeActivity :

Activité définie uniquement par du code. Bien connue de tous les développeurs, elle rend de grand service ;)

 

AsynCodeActivity :

Le nom est parlant : il s’agit d’une activité asynchrone. Le fonctionnement est le même que pour des appels de services asynchrones…

 

NativeActivity :

Activité synchrone.

 

DynamicActivity :

Il s’agit de passer en paramètre une activité qui sera utilisé à un moment dans le processus de l’activité.

 

Un exemple s’impose pour la DynamicActivity :

1.       Appel de l’activité validation en lui passant en paramètre une activité d’envois de mail.

2.       Début de l’activité de validation : Création d’une tâche, alerte sur la tâche, le boss se connecte et valide

3.       Exécution de l’activité d’envois de mail passée en paramètre

4.       Fin de l’exécution de l’activité de validation.

2ème étape, on orchestre le Workflow

Et là, c’est fini ! On a dit plus une seul ligne de code … a oui mais :

J’ai une DateTime qui correspond à la date et l’heure de validation. Dans mon processus, je veux gérer différemment les validations qui sont faites après midi. Je dois donc utiliser une activité de « if » avec … du code pour extraire l’heure de la DateTime. Et là, c’est du Visual Basic Expression. Pfff, c’était trop beau. Je suis en plus curieux de savoir si ce VB compilé à l’exécution est vérifié au build…

Bonjour, j’ai un Workflow sans domicile fixe ? Vous me proposez quoi comme hébergement ?

La moindre des choses que l’on puisse dire, c’est que le choix est large.

La class WorkflowInvoker

Si vous n’êtes pas développeur, passez votre chemin, car il n’y a aucun autre intérêt que le debug, et encore… En effet, cette fonction très simple « WorkflowInvoker.Invoke(wf); » est séquentielle, et ne passera pas à la suite du code, tant que le Workflow n’est pas terminé !

Avec une Workflow Application

Equivalent au lancement que vous connaissez bien dans la version 3.5. Le lancement n’est donc pas bloquant, car exécuté dans un thread dédié.

Avec WCF

Dans ce cas, VS2010 génère un service WCF qui va supporter le workflow. Il s’agit d’un service standard. Vous pouvez donc le paramétrer comme bon vous semble (certificats, authentification, transport…).

Avec AppFabric

Pas plus d’infos, une session présentée par Stéphane Goudeau « Windows Server AppFabric » devrait éclairer les lanternes des plus curieux. (Session à laquelle je n’ai malheureusement pas pu assister, vivement les webcats !)

Avec MOSS 2010…ou pas !

Et oui messieurs les SharePointiens, pleurez… Pas de support WF4 annoncé pour le moment. Il ne reste plus qu’a prier pour une SP2010 R2 avec WF4 … bon ok, j’arrête !

J’en veux encore

Vous avez lu l’article jusqu'à ici, alors, vous êtes un mordu de Workflow Foundation. Je vous conseil donc l’article MSDN suivant de Matt Milner, qui regroupe bien avec la présentation :

http://msdn.microsoft.com/en-us/library/ee342461.aspx