Freigeben über


Gewusst wie: Anwenden von Workflowänderungen für Workflows

Die Fähigkeit zum dynamischen Vornehmen von Änderungen an einer ausgeführten Workflowinstanz entspricht typischen menschlichen Workflowszenarien. Ein Interviewworkflow mit vier Interviewern wird beispielsweise zur Laufzeit geändert, um einen fünften Schritt als Reaktion auf neue Informationen hinzuzufügen, für die eine zusätzliche Perspektive auf einen Kandidaten erforderlich ist.

Diese Workflowänderungen können von innerhalb und von außerhalb des Ausführungsthreads des Workflows auf eine ausgeführte Workflowinstanz angewendet werden. Änderungen von innerhalb werden in der Regel mithilfe eines Ereignishandlers einer Aktivität oder direkt in die Ausführungslogik einer benutzerdefnierten Aktivität übernommen. Bei Änderungen von außerhalb kann die Windows Workflow Foundation-API in der Hostanwendung verwendet werden, um auf den Workflow zuzugreifen und die erforderlichen Änderungen vorzunehmen. Die Änderungen sollten nur vom Host angewendet werden, wenn die Workflowinstanz entweder angehalten wurde oder sich garantiert im Leerlauf befindet, um ein ordnungsgemäßes Anwenden der Änderungen zu gewährleisten.

Hinweis

Bei Workflowänderungen handelt es sich nicht um permanente Änderungen an einem bestimmten Workflowtyp. Sie werden nicht an künftige Instanzen dieses Typs weitergegeben.

Erstellen von Objekten innerhalb eines Workflows

Von Windows Workflow Foundation wird die WorkflowChanges-Klasse bereitgestellt, um Workflowänderungen im Workflow zu erleichtern. Aktivitäten werden anhand der Add-Methode der zusammengesetzten Aktivität hinzugefügt, die der neu hinzugefügten Aktivität übergeordnet sein muss. Umgekehrt kann eine Aktivität durch die Remove-Methode der übergeordneten zusammengesetzten Aktivität entfernt werden. Diese Änderungen werden in der flüchtigen Klasse zusammengefasst.

Werden Workflowänderungen ausgeführt, kann die Validate-Methode aufgerufen werden. Von der Validate-Methode werden Semantikprüfungen für das Aktivitätsdiagramm durchgeführt, um die semantische Richtigkeit bei Laufzeit zu gewährleisten, bevor es im Arbeitsspeicher gesperrt wird. Anschließend können Sie über ein WorkflowInstance-Objekt eine ApplyWorkflowChanges-Methode aufrufen, indem Sie ein WorkflowChanges-Objekt als Parameter für eine beliebige Zahl Instanzen desselben Workflowtyps übergeben. Sie können eine ApplyWorkflowChanges-Methode auf einer Instanz jedoch nur einmal für eine bestimmte flüchtige Klasse aufrufen.

Im folgenden Codebeispiel wird die Verwendung der WorkflowChanges-Klasse zum Hinzufügen von Änderungen zu einer Workflowinstanz veranschaulicht.

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);

Da beim Auftreten einer dynamischen Änderung dieselbe Aktivitätsstruktur von mehreren Instanzen eines Workflows verwendet wird, wird die Aktivitätsstruktur zum Vornehmen der Änderung geklont, während vom Rest der Instanzen weiterhin die ursprüngliche Aktivitätsstruktur verwendet wird.

Erstellen von Objekten über die Hostumgebung

Durch die WorkflowInstance-Klasse werden die ApplyWorkflowChanges-Methode verfügbar gemacht und das Erstellen dynamischer Änderungen von außerhalb des Workflows ermöglicht. Meistens wird diese Methode von der Hostumgebung verwendet.

Navigieren Sie zu der Instanz, in der die Workflowänderung vorgenommen werden soll, und rufen Sie seine WorkflowInstance ab, um eine Workflowänderung über eine Hostumgebung für eine ausgeführte Workflowinstanz zu übernehmen. Von der Laufzeit wird zu jeder Instanziierung eines Workflows eine WorkflowInstance erstellt. Vom Host kann die WorkflowInstance eines Workflows abgerufen werden, indem der Rückgabeparameter nach dem Aufrufen von CreateWorkflow gespeichert wird.

Erstellen Sie nach dem Abrufen des WorkflowInstance-Objekts ein WorkflowChanges-Objekt, und verwenden Sie die verschiedenen Methoden und Eigenschaften dieses Objekts, um eine Workflowänderung anzuwenden. In diesem Fall funktioniert der Host mit einer Kopie von WorkflowInstance. Rufen Sie die ApplyWorkflowChanges-Methode über das WorkflowInstance-Objekt auf, um die Workflowänderung auf die derzeit ausgeführte WorkflowInstance anzuwenden.

Ein Beispiel für eine dynamische Workflowaktualisierung über einen Host finden Sie unter Workflow Changes From Host.

Workflowänderungen und Aktivitätseigenschaften

Das Festlegen von Eigenschaften auf flüchtigen Workflowaktivitäten funktioniert folgendermaßen:

  • Die auf einem flüchtigen Workflow festgelegten Werte für Metadateneigenschaften gelten nach dem Anwenden der Aktualisierung für den ausgeführten Workflow.

  • Die auf einem flüchtigen Workflow festgelegten Werte für Instanzeigenschaften gehen nach dem Anwenden der Aktualisierung verloren. Die ursprünglichen ausgeführten Workflowwerte werden beibehalten.

Siehe auch

Referenz

WorkflowChanges
WorkflowInstance
WorkflowRuntime

Konzepte

Verwenden von Workflowänderungen in Workflows

Weitere Ressourcen

Entwickeln von workflowaktivierten Anwendungen

Footer image

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.