Procedura: applicare modifiche del flusso di lavoro ai flussi di lavoro
La possibilità di modificare in modo dinamico un'istanza del flusso di lavoro in esecuzione è coerente con gli scenari tipici dei flussi di lavoro umani. Ad esempio, il flusso di lavoro di un'intervista in cui vi sono quattro intervistatori può essere modificato in fase di esecuzione per aggiungere un quinto passaggio in risposta a nuove informazioni che richiedono ulteriore obiettività su un candidato.
Queste modifiche del flusso di lavoro possono essere applicate a un'istanza del flusso di lavoro in esecuzione sia dall'interno che dall'esterno del thread di esecuzione del flusso di lavoro. Dall'interno, le modifiche vengono tipicamente applicate utilizzando il gestore eventi di un'attività o direttamente nella logica di esecuzione di un'attività personalizzata. Dall'esterno, è possibile utilizzare le API di Windows Workflow Foundation nell'applicazione host per accedere al flusso di lavoro e apportare le modifiche necessarie. Per garantire che le modifiche al flusso di lavoro vengano applicate correttamente, l'host deve applicarle solo quando l'istanza del flusso di lavoro è sospesa o ha garantito che sia inattiva.
Nota
Le modifiche al flusso di lavoro non sono modifiche permanenti per un determinato tipo di flusso di lavoro e non saranno propagate a istanze future di quel tipo.
Creazione all'interno di un flusso di lavoro
Windows Workflow Foundation fornisce la classe WorkflowChanges per facilitare le modifiche al flusso di lavoro dall'interno del flusso di lavoro. Le attività vengono aggiunte tramite il metodo Add dell'attività composta che deve essere il padre della nuova attività aggiunta. Per contro, un'attività può essere rimossa tramite il metodo Remove della relativa attività composta padre. Queste modifiche vengono raggruppate nella classe temporanea.
Quando le modifiche del flusso di lavoro vengono eseguite, è possibile chiamare il metodo Validate. Il metodo Validate esegue controlli semantici sul grafico delle attività per garantire la correttezza semantica in fase di esecuzione prima di bloccarla in memoria. È quindi possibile chiamare il metodo ApplyWorkflowChanges da un oggetto WorkflowInstance, passando un oggetto WorkflowChanges come parametro per qualsiasi numero di istanze dello stesso tipo di flusso di lavoro. Tuttavia, per una determinata classe temporanea è possibile chiamare il metodo ApplyWorkflowChanges solo una volta in un'istanza.
Nell'esempio di codice seguente viene illustrato come è possibile utilizzare la classe WorkflowChanges per aggiungere modifiche all'istanza di un flusso di lavoro.
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);
Poiché più istanze di un flusso di lavoro condividono la stessa struttura di attività, quando si verifica una modifica dinamica, la struttura delle attività viene clonata per apportare la modifica, mentre il resto delle istanze continua a condividere la struttura delle attività originale.
Creazione dall'ambiente host
La classe WorkflowInstance espone il metodo ApplyWorkflowChanges per consentire la creazione di modifiche dinamiche dall'esterno del flusso di lavoro. Per la maggior parte del tempo, questo metodo è utilizzato dall'ambiente host.
Per applicare una modifica del flusso di lavoro dall'ambiente di hosting a un'istanza del flusso di lavoro in esecuzione, spostarsi all'istanza nella quale deve essere eseguita la modifica del flusso di lavoro e ottenere la relativa WorkflowInstance. Il runtime crea una WorkflowInstance per ogni istanza di un flusso di lavoro. L'host può ottenere la WorkflowInstance di un flusso di lavoro salvando il parametro di ritorno quando viene chiamato CreateWorkflow.
Dopo che è stato ottenuto l'oggetto WorkflowInstance, creare un oggetto WorkflowChanges e utilizzare i vari metodi e proprietà di tale oggetto per applicare una modifica del flusso di lavoro. Quando ciò accade, l'host sta utilizzando una copia di WorkflowInstance. Per applicare la modifica del flusso di lavoro alla WorkflowInstance in esecuzione, chiamare il metodo ApplyWorkflowChanges dall'oggetto WorkflowInstance.
Per un esempio di aggiornamento dinamico di un flusso di lavoro da un host, vedere Workflow Changes From Host.
Modifiche del flusso di lavoro e proprietà dell'attività
L'impostazione delle proprietà sulle attività del flusso di lavoro temporaneo avviene come segue:
Per le proprietà di metadati, i valori impostati su un flusso di lavoro temporaneo sono effettivi nel flusso di lavoro in esecuzione, dopo che è stato applicato l'aggiornamento.
Per le proprietà di istanza, i valori impostati su un flusso di lavoro temporaneo vengono perduti, dopo che è stato applicato l'aggiornamento. I valori originali del flusso di lavoro in esecuzione vengono preservati.
Vedere anche
Riferimenti
WorkflowChanges
WorkflowInstance
WorkflowRuntime
Concetti
Utilizzo delle modifiche dei flussi di lavoro
Altre risorse
Sviluppo di applicazioni che supportano il flusso di lavoro
Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.