Partager via


Création d'une activité en cours d'exécution avec DynamicActivity

DynamicActivity est une classe concrète et scellée avec un constructeur public. DynamicActivity peut servir à assembler des fonctionnalités d’activité au moment de l’exécution en utilisant 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 d’étiquettes 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 en utilisant du code impératif

  1. Ouvrez Visual Studio 2010.

  2. Sélectionnez Fichier, Nouveau, Projet. Sélectionnez Workflow 4.0 sous Visual C# dans la fenêtre Types de projets, puis sélectionnez le nœud v2010. Sélectionnez Application console de workflow séquentiel dans la fenêtre Modèles. Nommez le nouveau projet « DynamicActivitySample ».

  3. Cliquez avec le bouton droit sur Workflow1.xaml dans le projet HelloActivity et sélectionnez Supprimer.

  4. Ouvrez le fichier Program.cs. Ajoutez la directive suivante en début de fichier.

    using System.Collections.Generic;  
    
  5. 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();  
    
  6. 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 en utilisant XAML

  1. Ouvrez Visual Studio 2010.

  2. Sélectionnez Fichier, Nouveau, Projet. Sélectionnez Workflow 4.0 sous Visual C# dans la fenêtre Types de projets, puis sélectionnez le nœud v2010. Sélectionnez Application console de workflow dans la fenêtre Modèles. Nommez le nouveau projet « DynamicActivitySample ».

  3. 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.

  4. Faites glisser une activité WriteLine de la section Primitives de la boîte à outils vers l’aire du concepteur. Attribuez la valeur TextToWrite à la propriété Text de l’activité.

  5. Ouvrez le fichier Program.cs. Ajoutez la directive suivante en début de fichier.

    using System.Activities.XamlIntegration;  
    
  6. 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();  
    
  7. Exécutez l'application. Une fenêtre de console contenant le texte « Hello World! » s’affiche.

  8. Cliquez avec le bouton droit sur le fichier Workflow1.xaml dans l’Explorateur de solutions et sélectionnez Voir le code. Notez que la classe d'activité est créée avec x:Class et que la propriété est créée avec x:Property.

Voir aussi