Sur la plateforme Windows Workflow Foundation 4.5 un ensemble de nouveautés font leur apparition sur différents thèmes tels la conception d’un flux, développements associés, utilisation du concepteur visuel etc. Ce billet a pour objectif de citer les évolutions les plus importantes à mon sens.
L’apparition d’une nouvelle classe WorkflowIdentity, elle permet d’héberger plusieurs versions d’un flux de travail côte à côte, ensuite le chargement d’une instance persistante se fait via la classe WorkflowApplicationInstance puis DefinitionIdentity peut être utilisé par l’hôte pour fournir la version appropriée de la définition de flux en instanciant WorkflowApplication.
Ci-dessous un fragment de code permettant de mettre en œuvre la classe WorkflowIdentity, elle est créée et associée à une instance.
WorkflowIdentity identityFirstVersion = new WorkflowIdentity
{
Name = "YourWorkflowFirstVersion",
Version = new Version(1, 0, 0, 0)
};
WorkflowApplication wfApp = new WorkflowApplication(new YourWorkflow (), identity);
// Configurer les services de persistence.
ConfigureWorkflowApplication(wfApp);
// Exécuter le flux.
wfApp.Run();
Ci-dessous un fragment de code permettant de mettre en œuvre le chargement du flux.
WorkflowApplication wfApp = new WorkflowApplication(new YourWorkflow (),identityFirstVersion);
ConfigureWorkflowApplication(wfApp);
// Charger le flux.
wfApp.Load(instanceId);
WorkflowServiceHost prend en compte le multi-versioning. Lorsqu’une nouvelle version d’un service de flux est déployée, les nouvelles instances sont créées à l’aide du nouveau service, mais les instances existantes s’exécutent à l’aide de la version antérieure.
WorkflowServiceHost contient deux propriétés pour configurer plusieurs versions d’un flux de travail de s’exécuter côte à côte : SupportedVersions qui contient les versions prises en charge du service de workflow et DefinitionIdentity qui permet d’identifier chaque service de workflow.
//Configurer WorkflowServiceHost une version actuelle.
WorkflowServiceHost host = new WorkflowServiceHost(serviceActualVersion,
new Uri("http://localhost:8080/YourWorkflow"));
//Créer une version précédente du flux.
WorkflowService serviceOldVersion = new WorkflowService
{
Name = "YourWorkflow",
Body = new YourWorkflow(),
DefinitionIdentity = new WorkflowIdentity
{
Name = " YourWorkflow",
Version = new Version(1, 0, 0, 0)
}
};
//Ajouter une version précédente du service à SupportedVersions.
host.SupportedVersions.Add(serviceOldVersion);
Vous pouvez valider la structure du flux de travail au moment de la génération, sur la version précédente de la plateforme .NET Framework 4, les erreurs de validation du flux n’étaient pas été comptées comme des erreurs de compilation pendant la génération du projet.
Dans le .NET Framework 4.5 RC, les erreurs de validation provoquent l’échec de la génération.
Un ensemble de nouveautés dédiées au flux de travail de type machine à état telles :
La possibilité de définir des points d’arrêt sur des états, la possibilité de copier et coller des transitions dans le concepteur visuel du flux, la prise en charge du concepteur pour la création de transition de déclencheur partagé et
De nouvelles activités telles NoPersistScope permettant de désactiver la persistance d’un flux de travail lorsque des activités enfants de NoPersistScope sont en cours d’exécution, cela s’avère utile dans les scénarios ou on fait appel à des transactions en base de données.
Améliorations du concepteur visuel de flux de travail, dorénavant on peut supprimer l’élément de menu contextuel dans le concepteur de variable et d’argument
On dispose d’un encadrement automatique avec séquence, certaines activités comme NoPersistScope peut uniquement contenir une seule activité de corps, l’ajout d’une deuxième activité sur la version 4.0 exige que le développeur supprime la première activité, ajoute une activité Sequence, puis ajoute les deux activités à l’activité de séquence.
À partir du .NET Framework 4.5 RC, lors de l’ajout d’une deuxième activité sur l’aire du concepteur, un activité Sequence est créée automatiquement pour encapsuler les deux activités.
Pour faciliter le développement de plus grands workflows, le concepteur prend désormais en charge l’ajout d’annotations pour faciliter le suivi du processus de création. Une annotation peut être ajoutée aux activités, états, nœuds d’organigramme, variables et arguments. La capture d’écran suivante montre le menu contextuel utilisé pour ajouter des annotations au concepteur.
Pour parcourir un flux de travail au sein du concepteur, le mode panoramique peut être activé plutôt que d’utiliser les barres de défilement.