Tâche 1 : créer un workflow et passer des paramètres

Lorsque vous exécutez des workflows, vous avez la possibilité de passer des données utilisées pour l'initialisation via l'utilisation de paramètres. Vous pouvez effectuer cette opération en créant une collection basée sur le dictionnaire qui contient des paires clé/valeur qui sont directement mappées à des propriétés définies sur workflow et à leurs valeurs associées.

Dans cet exercice, vous modifiez le workflow que vous avez créé dans Exercice 1 : générer un hôte de console Windows pour accepter trois paramètres. Deux des paramètres correspondent aux deux opérandes utilisées pour une opération d'addition et le paramètre restant est utilisé pour stocker le résultat de cette opération.

Après avoir créé les propriétés dans le workflow et modifié une activité CodeActivity pour effectuer l'opération d'addition, vous modifiez le code d'application hôte pour passer ces paramètres et renvoyer le résultat du workflow.

NoteRemarque :

Bien qu'il soit conseillé de suivre les exercices de façon linéaire, ce n'est pas obligatoire. Vous pouvez démarrer cet exercice en ouvrant l'exemple de projet et en continuant avec les étapes de la section suivante.

Pour définir des propriétés de workflow pour les paramètres

  1. Créez trois champs Int32 privés dans la classe HostingWorkflows.

    private int op1;
    private int op2;
    private int opResult;
    
  2. Dans la classe HostingWorkflows, créez une propriété Int32 nommée Operand1.

    En outre, créez une méthode d'accesseur dans la propriété pour assigner la variable op1.

    public int Operand1
    {
        set
        {
            this.op1 = value;
        }
    }
    
  3. Dans la classe HostingWorkflows, créez une propriété Int32 nommée Operand2.

    En outre, créez une méthode d'accesseur dans la propriété pour assigner la variable op2.

    public int Operand2
    {
        set
        {
            this.op2 = value;
        }
    }
    
  4. Dans la classe HostingWorkflows, créez une propriété Int32 nommée Result.

    En outre, créez une méthode d'accesseur dans la propriété pour retourner la valeur de la variable opResult.

    public int Result
    {
        get
        {
            return this.opResult;
        }
    }
    
  5. Modifiez la méthode codeActivity1_ExecuteCode que vous avez définie dans la classe HostingWorkflows pour ajouter les champs op1 et op2, puis placez le résultat dans le champ opResult.

    private void codeActivity1_ExecuteCode(object sender, EventArgs e)
    {
        Console.WriteLine("In codeActivity1_ExecuteCode. Adding operands");
        this.opResult = this.op1 + this.op2;
    }
    

Pour passer des paramètres depuis l'application hôte

  1. Définissez une nouvelle collection Dictionary statique qui utilise String en tant que clés et Object en tant que valeurs, puis créez une instance de cette collection dans la classe Program.

    static Dictionary<string, object> parameters = new Dictionary<string, object>();
    
  2. Dans la méthode Main, après l'appel de la méthode StartRuntime, utilisez ReadLine pour interroger l'utilisateur pour deux opérandes, puis placez ces valeurs dans la collection Dictionary que vous avez créée à l'étape 1.

    Note Remarque :

    Assurez-vous que les clés que vous utilisez pour la collection Dictionary correspondent directement au nom des propriétés que vous avez définies dans la procédure précédente. Pour cet exemple, ces clés doivent être nommées Operand1 et Operand2. En outre, ce code utilise la gestion des erreurs pour garantir qu'un utilisateur n'entre pas de valeur trop importante.

    // retrieve workflow parameters
    do
    {
        try
        {
            Console.Write("Enter a value for operand1: ");
            parameters["Operand1"] = Int32.Parse(Console.ReadLine());
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message + Environment.NewLine);
        }
    } while (parameters.ContainsKey("Operand1") == false);
    
    do
    {
        try
        {
            Console.Write("Enter a value for operand2: ");
            parameters["Operand2"] = Int32.Parse(Console.ReadLine());
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message + Environment.NewLine);
        }
    } while (parameters.ContainsKey("Operand2") == false);
    
  3. Modifiez l'appel de méthode à CreateWorkflow en passant la collection de dictionnaire parameters en tant que deuxième paramètre.

    WorkflowInstance workflowInstance = workflowRuntime.CreateWorkflow(type, parameters);
    
  4. Modifiez la méthode workflowRuntime_WorkflowCompleted pour envoyer le résultat de l'addition effectuée dans le workflow en utilisant la méthode WriteLine.

    Le résultat de l'addition est stocké dans la collection OutputParameters définie dans le paramètre WorkflowCompletedEventArgs.

    static void workflowRuntime_WorkflowCompleted(object sender,
        WorkflowCompletedEventArgs e)
    {
        Console.WriteLine("Result: {0}", e.OutputParameters["Result"]);
        waitHandle.Set();
    }
    

Compilation du code

Pour plus d'informations sur la compilation du code, consultez Compilation du code.

Dans Exercice 3 : utiliser des événements du runtime, vous allez apprendre comment s'abonner aux événements déclenchés par le moteur d'exécution Windows Workflow Foundation.

Voir aussi

Référence

OutputParameters
WorkflowCompletedEventArgs
CreateWorkflow

Autres ressources

Exercice 3 : utiliser des événements du runtime
Sequential Workflow With Parameters

Footer image

Copyright ©2007 par Microsoft Corporation. Tous droits réservés.