Création d'une activité en cours d'exécution avec DynamicActivity
Cette rubrique s'applique à Windows Workflow Foundation 4.
DynamicActivity est une classe concrète et scellée avec un constructeur public. La classe DynamicActivity peut servir à assembler les fonctionnalités d'activité au moment de l'exécution à l'aide d'un DOM d'activité.
Fonctionnalités DynamicActivity
L'objet DynamicActivity a accès aux propriétés d'exécution et aux arguments et variables, mais pas aux services d'exécution comme la planification d'activités enfants ou le suivi.
Les propriétés de niveau supérieur peuvent être définies à l'aide des objets Argument du flux de travail. En code impératif, ces arguments sont créés à l'aide de propriétés CLR sur un nouveau type. En XAML, ils sont déclarés à l'aide de balises x:Class
et x:Member
.
Les activités sont générées à l'aide de l'interface DynamicActivity avec le concepteur utilisant l'objet ICustomTypeDescriptor. Les activités créées dans le concepteur peuvent être chargées dynamiquement à l'aide de la méthode Load, comme le montre la procédure suivante.
Pour créer une activité au moment de l'exécution à l'aide du code impératif
Ouvrez Visual Studio 2010.
Sélectionnez Fichier, Nouveau, puis Projet. Dans la fenêtre Types de projets, sous Visual C#, sélectionnez Workflow 4.0, puis le nœud v2010. Dans la fenêtre Modèles, sélectionnez Application console de workflow séquentiel. Nommez le nouveau projet « DynamicActivitySample ».
Dans le projet HelloActivity, cliquez avec le bouton droit sur Workflow1.xaml et sélectionnez Supprimer.
Ouvrez Program.cs. Ajoutez la directive suivante en début de fichier :
using System.Collections.Generic;
Remplacez le contenu de la méthode
Main
par le code ci-dessous. Ce dernier crée une activité Sequence qui contient une activité WriteLine unique et l'affecte à la propriété Implementation d'une nouvelle activité dynamique.//Define the input argument for the activity var textOut = new InArgument<string>(); //Create the activity, property, and implementation Activity dynamicWorkflow = new DynamicActivity() { Properties = { new DynamicActivityProperty { Name = "Text", Type = typeof(InArgument<String>), Value = textOut } }, Implementation = () => new Sequence() { Activities = { new WriteLine() { Text = new InArgument<string>(env => textOut.Get(env)) } } } }; //Execute the activity with a parameter dictionary WorkflowInvoker.Invoke(dynamicWorkflow, new Dictionary<string, object> { { "Text", "Hello World!" } }); Console.ReadLine();
Exécutez l'application. Une fenêtre de console contenant le texte « Hello World ! » s'affiche.
Pour créer une activité au moment de l'exécution à l'aide de XAML
Ouvrez Visual Studio 2010.
Sélectionnez Fichier, Nouveau, puis Projet. Dans la fenêtre Types de projets, sous Visual C#, sélectionnez Workflow 4.0, puis le nœud v2010. Dans la fenêtre Modèles, sélectionnez Application console de workflow. Nommez le nouveau projet « DynamicActivitySample ».
Dans le projet HelloActivity, ouvrez Workflow1.xaml. En bas du concepteur, cliquez sur l'option Arguments. Créez un argument In appelé
TextToWrite
de type String.Faites glisser une activité WriteLine de la section Primitives de la boîte à outils à l'aire du concepteur. Affectez la valeur TextToWrite à la propriété Text de l'activité.
Ouvrez Program.cs. Ajoutez la directive suivante en début de fichier.
using System.Activities.XamlIntegration;
Remplacez le contenu de la méthode
Main
par le code suivant :Activity act2 = ActivityXamlServices.Load(@"Workflow1.xaml"); results = WorkflowInvoker.Invoke(act2, new Dictionary<string, object> { { "TextToWrite", "HelloWorld!" } }); Console.ReadLine();
Exécutez l'application. Une fenêtre de console contenant le texte « Hello World ! » apparaît.
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le fichier Workflow1.xaml et sélectionnez Afficher le code. Notez que la classe d'activité est créée avec
x:Class
et que la propriété est créée avecx:Property
.