[WF4.5] Comprendre le choix des expressions Vb et C#

Avec l’arrivée de .net 4.5, WF a été renforcé de nombreuses fonctionnalités (voir cet article pour en savoir un peu plus) dont la possibilité d’utiliser C# dans un workflow Xaml.

Maintenant, si on créer un workflow, on peut donc utiliser du C# ou du Vb dans ses expressions.

  • Un nouveau workflow créer dans un projet C# utilisera par défaut des expressions C#.
  • Un nouveau workflow créer dans un projet Vb utilisera par défaut des expressions Vb.

Pour les anciens projets WF4 migrés vers WF4.5 les workflows existants ne sont pas modifiés. Ils restent donc avec des expressions Vb. Les règles pour la création de nouveaux workflows sont identiques. Par défaut, donc un ancien projet C# aura ses anciens workflows qui utiliseront des expressions Vb et les nouveaux, des expressions C#.

Il est possible de forcer le langage d’expressions d’un workflow

Ceci ne peut malheureusement se faire qu’en modifiant le fichier Xaml à la main. Pour ce faire, il faut ajouter l’a propriété ExpressionActivityEditor.ExpressionActivityEditor à son workflow (et respecter la section des namespaces utilisés par les expression : TextEpression.Namespaces).

Changer-langage-expression-WF4.5_thumb_4293C797

Bien entendu, il faudra aussi convertir vos expressions déjà existantes (c’est la partie pas vraiment drôle). Personnellement, je vous encourage à ne pas toucher à vos workflows existants. Je n’ai donné ces indications qu’à titre d’information pour les utilisateurs qui veulent impérativement avoir des expressions C#.

Attention au cas des workflows dynamiques !

(souvent issus d’un fichier Xaml déployé par copier-coller, ou extraits d’une base de données)

On ne peut pas le voir quand on créer et que l’on utilise un workflow via Visual Studio, mais un workflow qui utilise des expressions C#, passe obligatoirement par une étape de près-compilation. Le Xaml utilisé n’est donc plus le fichier Xaml que vous avez créé via Visual Studio, mais une version préparée par Visual Studio.

Le fichier que vous avez créé ne peut donc être repris pour être chargé dynamiquement via l’ActivityXamlService sans (ceci pourra faire l’objet d’un autre article). Je vous encourage vivement de n’utiliser que des expressions Vb dans ce type de workflows.

Si vous voulez impérativement utiliser des expressions C# pour ce type de workflows, il faudra donc modifier le code de votre hôte de workflow. Sachez que cette opération est plutôt lourde et qu’elle doit se faire en conservant la compatibilité avec vos instances de workflows déjà persistées. Autant dire que dans un environnement existant, il vaut mieux ne pas changer le langage d’expression.

Pensez à vos utilisateurs finaux.

Par expérience, j’ai constaté que les seules personnes intéressées par le fait d’avoir des expressions en C# étaient les développeurs. Les utilisateurs ayant pris l’habitude de Vb au travers d’Office et de Vba, les expressions Vb dans les workflows, ne les perturbent pas. Avant de les faire passer à C#, il faut donc se demander, si ses utilisateurs finaux ne sont pas impactés négativement par ce changement.

Personnellement, je passerai mes expressions en C# quand mes utilisateurs écriront leur macro Excel en C# (Vb vaincra!). Actuellement, j’ai fait le choix de me forcer à utiliser Vb pour mes projets WF4.5 (qu’ils soient en C# ou Vb).

Jérémy Jeanson

Comments

You have to be logged in to comment this post.