Visual Studio 2010 étant sorti il y a peu de temps, vous êtes certainement encore nombreux à ne pas disposer de Visual Studio 2010 pro ou supérieur (comme moi, snif :( ). Vous utilisez donc une version démo ou alors express de VS2010.

Dans le cas de VS2010 Express les lacunes relative à l’intégration de Worklow Foundation sont nombreuses :

  • Pas de template de projets WF4.
  • Pas de supports des projets WF4 édités avec une version pro ou supérieurs.
  • Pas de Designer de Workflow.
  • Pas d’attribut permettant l’intégration d’un fichier Xaml comme un workflow  normal.

“C’est le drame!”… Ceci en est même incompréhensible : Dans WF, il y a le mot “Foundation” au même titre que dans WPF ou WCF. Alors pourquoi pas de WF dans VS2010 Express? Si quelqu'un a une vrai réponse merci de me tenir informé, car je crois avoir raté un truc.

Qui n’aime pas les pandas dans l’équipe Visual Studio Express?

(craquage personnel… ceux qui connaissent la raison de l’acronyme WF comprendrons)

 

Le fait est que je ne me suis pas arrêté là. J’ai donc cherché à relever le défit et faire du WF4 avec VS2010 Express. Pour y arriver il nous faut donc un Visual Studio 2010 Express et évidemment un Framework 4. Le Framework étant installé WF4 l’est aussi ;-).

Commençons par faire le constat de ce que l’on peut faire ou pas avec notre version Express :

On ne peut pas :

  • Designer un Workflow Xaml.
  • Compiler un assembly contenant des workflows Xaml comme on pourrait le faire avec un version plus évoluée de VS 2010.

On peut :

  • Référencer les assemblies de Workflow Foundation.
  • Coder des workflows en C# ou Vb.
  • Coder des activités.
  • Invoquer des Workflow.
  • Utiliser les Services Xaml de WF4…
  • Faire du re-hosting

Pour conclure il nous manque juste un Designer… Mais on peut coder un designer ;-) et exécuter des Workflow!

Qu’a cela ne tienne, j’ai justement codé un re-hosting du Designer de Workflow il y a quelques temps. Il peut être téléchargé via Codes-Sources bien entendu.

Cela se passe par ici : [WF4] Réaliser son propre designer de workflow

Après téléchargement on peut ouvrir la solution dans VS 2010 Express. Arrive alors le message suivant :

wfExpress00

Pas de panique, cela ne posera pas de soucis : j’ai pour habitude de fournir les éventuels assemblies externes dans un dossier “References”. La version Express ne supportant pas cette fonctionnalité, il suffit d’aller dans l’explorateur de solution et de sélectionner l’objet “Reference” comme ceci :wfExpress01

On fait un petit click droit. Un menu s’ouvre et on peut supprimer “Reference”.

On peut enfin compiler notre solution et accéder à un Designer de workflow opérationnel :wfExpress02Ce petit programme (FlowPad) vous permettra d’éditer les workflows pour VS 2010 Express. Si d’aventure vous aviez besoin d’utiliser ou tester des activités custom, il suffit de les ajouter à la Toolbox via la méthode AddToolBoxCategory() de la classe WorkflowDesigner du projet MyLib.WorkFlow4. Ou bien encore, d’ajouter vos activités à ce projet (elles seront chargées automatiquement).

Pour mon exemple j’ai créé un simple projet console. J’ai ensuite créé un workflow (Workflow1.xaml) via FlowPad et je l’ai enregistré dans le répertoire de mon projet Console. Dans mon projet Console j’ai ensuite demandé à Visual Studio d’utiliser mon fichier. Pour cela, Visual studio dispose d’une commande en haut de l’explorateur de solution qui permet d’afficher les fichier cachés (petit bouton mise en surbrillance dans la capture suivante).

wfExpress09

Ensuite on fait un click droit sur le fichier Xaml et on l’ajoute au projet ;-).

Il reste à changer les propriétés de notre fichier Xaml pour qu’il soit considéré comme étant un contenu et qu’il soit copié en sortie du projet :

wfExpress10

Voila, le plus gros du travail est fait, on peut maintenant penser à exécuter notre workflow.

Pour charger et lancer un workflow  Xaml, le code est simple, très simple. Comme on peut le voir dans la méthode Main de mon projet ;-)

static void Main(string[] args)
{
    Activity monWorkflow = ActivityXamlServices.Load("Workflow1.xaml");

    WorkflowInvoker.Invoke(monWorkflow);
}

Voila!

Si on veut changer notre workflow, on peut toujours utiliser FlowPad à nouveau. On édite, on enregistre et on utilise le nouveau fichier automatiquement sans rien changer au projet.

On peut alors éditer et exécuter nos workflow avec Visual Studio Express. Seul ombre à cette méthode : nos workflows seront présents sous forme de fichiers Xaml qui devront être distribués avec les projets les utilisant…

Note sur ce petit désagrment : Je cherchais à présenter ici une solution simple applicable pour des développeurs de tout niveaux. On peut très bien contourner ceci en intégrant nos fichiers comme ressources et lire leurs définitions sous forme de String avant de les invoquer.

 

Bonne découverte de WF4 aux amateurs de VS2010 Express ;-)

Des remarques?