Partager via


Création d’une activité au moment de l’exécution avec DynamicActivity

DynamicActivity est une classe concrète et scellée avec un constructeur public. DynamicActivity peut être utilisé pour assembler des fonctionnalités d’activité au moment de l’exécution à l’aide d’un DOM d’activité.

Fonctionnalités DynamicActivity

DynamicActivity a accès aux propriétés d’exécution, aux arguments et aux variables, mais aucun accès aux services d’exécution tels que la planification des activités enfants ou le suivi.

Les propriétés de niveau supérieur peuvent être définies à l’aide d’objets de flux de travail Argument . Dans le 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 des balises x:Class et x:Member.

Activités construites à l’aide de DynamicActivity, interfacées avec le concepteur à l’aide de ICustomTypeDescriptor. Les activités créées dans le concepteur peuvent être chargées dynamiquement à l’aide de Load, comme démontré dans la procédure suivante.

Pour créer une activité au moment de l’exécution à l’aide du code impératif

  1. OpenVisual 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 flux de travail séquentielle dans la fenêtre Modèles . Nommez le nouveau projet DynamicActivitySample.

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

  4. Ouvrez le fichier Program.cs. Ajoutez la directive suivante en haut du fichier.

    using System.Collections.Generic;
    
  5. Remplacez le contenu de la méthode Main par le code suivant, qui crée une activité Sequence contenant une seule activité WriteLine et l'assigne à 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 avec le texte « Hello World ! » s’affiche.

Pour créer une activité au moment de l’exécution à l’aide de 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 flux de travail dans la fenêtre Modèles . Nommez le nouveau projet DynamicActivitySample.

  3. Ouvrez Workflow1.xaml dans le projet HelloActivity. Cliquez sur l’option Arguments en bas du concepteur. Créez un In argument 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. Affectez la valeur TextToWrite à la propriété Text de l’activité.

  5. Ouvrez le fichier Program.cs. Ajoutez la directive suivante en haut du 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 avec le texte « Hello World ! » s’affiche.

  8. Cliquez avec le bouton droit sur le fichier Workflow1.xaml dans l’Explorateur de solutions , puis 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 avec x:Property.

Voir aussi