Partager via


Comment : appliquer des modifications de workflow à des workflows

La capacité d'apporter dynamiquement des modifications à une instance de workflow en cours d'exécution est cohérente avec les scénarios de workflow utilisateurs typiques. Par exemple, un workflow d'entrevue avec quatre interviewers peut être modifié au moment de l'exécution pour ajouter une cinquième étape en réponse à de nouvelles informations qui requièrent une perspective supplémentaire sur un candidat.

Ces modifications de workflow peuvent être appliquées à la fois à une instance de workflow en cours d'exécution de l'intérieur et de l'extérieur du thread du workflow d'exécution. De l'intérieur, les modifications sont appliquées en général en utilisant le gestionnaire d'événements d'une activité, ou directement dans l'exécution logique d'une activité personnalisée. De l'extérieur, vous pouvez utiliser l'API de Windows Workflow Foundation dans l'application hôte pour accéder au workflow et apporter les modifications nécessaires. Pour s'assurer que les modifications de workflow sont appliquées correctement, l'hôte doit uniquement les appliquer lorsque l'instance de workflow est interrompue ou que son inactivité est garantie.

NoteRemarque :

Les modifications de workflow ne sont pas des modifications permanentes pour un type de workflow donné et ne seront pas propagées aux futures instances de ce type.

Création dans un workflow

Windows Workflow Foundation fournit la classe WorkflowChanges pour faciliter des modifications apportées au workflow. Les activités sont ajoutées grâce à la méthode Add de l'activité composite qui doit être le parent de la nouvelle activité ajoutée. Inversement, une activité peut être supprimée à travers sa méthode Remove d'activité composite parente. Ces modifications sont regroupées par lots dans la classe transitoire.

Lorsque les modifications de workflow sont effectuées, la méthode Validate peut être appelée. La méthode Validate effectue des contrôles sémantiques sur le graphique d'activité pour garantir la cohérence sémantique au moment de l'exécution avant de le verrouiller en mémoire. Vous pouvez appeler ensuite la méthode ApplyWorkflowChanges d'un objet WorkflowInstance, en passant un objet WorkflowChanges comme paramètre pour tout nombre d'instances du même type de workflow. Toutefois, vous pouvez appeler la méthode ApplyWorkflowChanges sur une instance à une seule reprise pour une classe transitoire donnée.

L'exemple de code suivant affiche comment vous pouvez utiliser la classe WorkflowChanges pour ajouter des modifications à une instance de workflow.

InvokeWorkflowActivity invokeNewWorkflow = new InvokeWorkflowActivity();
WorkflowChanges changes = new WorkflowChanges(this);
 //
 // NewWorkflow type
 //
 Type type = typeof(Workflow1);
 invokeNewWorkflow.Name = "NewWorkflow";
 invokeNewWorkflow.TargetWorkflow = type;
 //
 // Add NewWorkflow after delay.
 //
 DelayActivity delay = changes.TransientWorkflow.Activities["delay1"] as DelayActivity;
 delay.Parent.Activities.Add(invokeNewWorkflow);
 //
 // Apply transient changes to instance.
 //
 this.ApplyWorkflowChanges(changes);

Du fait que plusieurs instances d'un workflow partagent la même arborescence d'activités, lorsqu'une modification dynamique est apportée, l'arborescence d'activités est dupliquée pour effectuer la modification, tandis que le reste des instances continue à partager l'arborescence d'activités d'origine.

Création à partir de l'environnement hôte

La classe WorkflowInstance expose la méthode ApplyWorkflowChanges pour activer la création de modifications dynamiques de l'extérieur du workflow. La plupart du temps, cette méthode est utilisée par l'environnement d'hébergement.

Pour appliquer une modification de workflow à partir de l'environnement d'hébergement à une instance de workflow en cours d'exécution, naviguez jusqu'à l'instance dans laquelle la modification de workflow sera apportée et obtenez son WorkflowInstance. Le runtime crée une WorkflowInstance pour chaque instanciation d'un workflow. L'hôte peut obtenir la WorkflowInstance d'un workflow en enregistrant le paramètre de retour lorsque CreateWorkflow est appelé.

Après que l'objet WorkflowInstance ait été obtenu, créez un objet WorkflowChanges et utilisez les diverses méthodes et propriétés de cet objet pour appliquer une modification au workflow. Lorsque cela se produit, l'hôte fonctionne avec une copie de la WorkflowInstance. Pour appliquer la modification de workflow à la WorkflowInstance en cours d'exécution, appelez la méthode ApplyWorkflowChanges de l'objet WorkflowInstance.

Pour obtenir un exemple de la mise à jour dynamique d'un workflow à partir d'un hôte, consultez le Workflow Changes From Host.

Modifications de workflow et propriétés d'activité

La définition des propriétés des activités du workflow transitoires fonctionne comme suit :

  • Pour les propriétés de métadonnées, les valeurs définies sur un workflow transitoire sont effectives sur le workflow en cours d'exécution, après que la mise à jour ait été appliquée.

  • Pour les propriétés d'instances, les valeurs définies sur un workflow transitoire sont perdues, une fois la mise à jour appliquée. Les valeurs d'origine du workflow en cours d'exécution sont conservées.

Voir aussi

Référence

WorkflowChanges
WorkflowInstance
WorkflowRuntime

Concepts

Utilisation des modifications de workflow dans des workflows

Autres ressources

Développement d'applications prenant en charge les workflows

Footer image

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