Partager via


Tâche 3 : héberger le workflow séquentiel

La classe responsable de l'exécution du workflow est la classe WorkflowRuntime. Lorsque vous créez une application hôte, vous devez créer une instance de cette classe et passer dans la spécification du type de votre workflow en utilisant la méthode CreateWorkflow. Vous pouvez appeler ensuite la méthode Start de l'objet WorkflowInstance retourné pour commencer à exécuter votre workflow. Parce qu'un workflow séquentiel ne repose pas sur un événement externe pour s'exécuter, il commence immédiatement.

Dans cette tâche, modifiez l'application Windows Form que vous avez créée dans la tâche 1 pour démarrer le workflow que vous avez créé dans la tâche 2. Toutefois, du fait qu'aucune activité enfant n'a été ajoutée au workflow lui-même, le workflow se termine sans traitement.

NoteRemarque :

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

Hébergement du moteur d'exécution de workflow de Windows

Pour héberger le moteur d'exécution de workflow de Windows

  1. Dans la classe MainForm de votre projet, déclarez un champ private WorkflowRuntime nommé workflowRuntime.

  2. Dans la classe MainForm, déclarez un champ private WorkflowInstance nommé workflowInstance.

    private WorkflowRuntime workflowRuntime = null;
    private WorkflowInstance workflowInstance = null;
    
  3. Dans le constructeur MainForm, suivant la méthode InitializeComponent, créez une nouvelle instance de l'objet workflowRuntime.

  4. Appelez la méthode StartRuntime.

    Cette opération démarre le runtime mais n'exécute aucun workflow jusqu'à ce que l'application le notifie pour démarrer un workflow.

    this.workflowRuntime = new WorkflowRuntime();
    this.workflowRuntime.StartRuntime();
    
  5. Après l'appel à la méthode StartRuntime, créez un EventHandler générique du type WorkflowCompletedEventArgs pour l'événement WorkflowCompleted déclenché par l'objet workflowRuntime.

    Nommez-le workflowRuntime_WorkflowCompleted.

    workflowRuntime.WorkflowCompleted +=
        new EventHandler<WorkflowCompletedEventArgs>
        (workflowRuntime_WorkflowCompleted);
    
  6. Dans la classe MainForm, créez une nouvelle méthode nommée workflowRuntime_WorkflowCompleted qui prend un paramètre System.Object nommé sender et un paramètre WorkflowCompletedEventArgs nommé e.

    void workflowRuntime_WorkflowCompleted(object sender,
        WorkflowCompletedEventArgs e)
    {
    }
    
  7. Dans la méthode submitButton_Click, créez un objet Type local égal au Type du workflow que vous avez créé dans la tâche précédente.

    Type type = typeof(ExpenseReportWorkflow);
    
  8. Appelez la méthode CreateWorkflow définie sur l'objet workflowRuntime, en passant l'objet Type que vous avez créé à l'étape précédente.

    La méthode CreateWorkflow retourne un objet WorkflowInstance. Utilisez cet objet pour définir la variable workflowInstance.

  9. Appelez la méthode Start définie sur l'objet workflowInstance pour démarrer le workflow.

    Toutes les fois que le bouton Envoyer est activé dans l'application Windows Form, le workflow séquentiel s'exécute. Toutefois, pour le moment, il prend fin car aucune activité enfant n'est actuellement présente dans le workflow.

    // Start the workflow
    this.workflowInstance = workflowRuntime.CreateWorkflow(type);
    this.workflowInstance.Start();
    

Compilation du code

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

Dans Exercice 2 : créer le service de note de frais de ce didacticiel, la communication entre Windows Form et le workflow est activée.

Voir aussi

Référence

WorkflowRuntime
WorkflowInstance
CreateWorkflow
Start
WorkflowCompleted
WorkflowCompletedEventArgs

Autres ressources

Exercice 2 : créer le service de note de frais
Hosting
Didacticiel : héberger le moteur d'exécution Windows Workflow Foundation

Footer image

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