Cómo aplicar cambios de flujo de trabajo a los flujos de trabajo
La capacidad para realizar cambios, de manera dinámica, en una instancia de flujo de trabajo en ejecución coincide con los escenarios habituales de flujos de trabajo humanos. Por ejemplo, un flujo de trabajo de entrevista con cuatro entrevistadores podría cambiarse en tiempo de ejecución para agregar un quinto paso, en respuesta a información reciente que requiere una perspectiva adicional sobre un candidato.
Estos cambios de flujo de trabajo pueden aplicarse a una instancia de flujo de trabajo en ejecución tanto desde dentro como desde fuera del subproceso de ejecución del flujo de trabajo. Desde el interior, los cambios se aplican, normalmente, utilizando un controlador de eventos de actividad o, directamente, en la lógica de ejecución de una actividad personalizada. Desde el exterior, puede utilizarse la API de Windows Workflow Foundation en la aplicación host para acceder al flujo de trabajo y realizar las modificaciones necesarias. Para asegurarse de que se aplican correctamente esos cambios del flujo de trabajo, el host sólo debería aplicarlos cuando la instancia de flujo de trabajo se suspende o se garantiza su inactividad.
Nota
Los cambios del flujo de trabajo no son cambios permanentes en un tipo de flujo de trabajo concreto y no se propagarán a futuras instancias de ese tipo.
Creación dentro de un flujo de trabajo
Windows Workflow Foundation proporciona la clase WorkflowChanges para facilitar los cambios del flujo de trabajo desde el interior del flujo de trabajo. Las actividades se agregan a través del método Add de la actividad compuesta que va a ser el elemento primario de la nueva actividad agregada. A la inversa, puede quitarse una actividad a través de su método Remove de actividad compuesta primaria. Estos cambios se realizan por lotes en la clase transitoria.
Cuando se realizan los cambios de flujo de trabajo, se puede llamar al método Validate. El método Validate realiza las comprobaciones semánticas en el gráfico de la actividad para asegurar la exactitud semántica en tiempo de ejecución antes de bloquearlo en la memoria. Después, puede llamar al método ApplyWorkflowChanges desde un objeto WorkflowInstance, pasando un objeto WorkflowChanges como parámetro para cualquier número de instancias del mismo tipo de flujo de trabajo. No obstante, sólo puede llamar al método ApplyWorkflowChanges una vez en una instancia para una clase transitoria concreta.
El siguiente ejemplo de código muestra cómo utilizar la clase WorkflowChanges para agregar cambios a una instancia de flujo de trabajo.
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);
Dado que varias instancias de un flujo de trabajo comparten el mismo árbol de actividad, cuando se produce un cambio dinámico, el árbol de actividad se clona para realizar la modificación, mientras que el resto de instancias continúa compartiendo el árbol de actividad original.
Creación desde el entorno del host
La clase WorkflowInstance expone el método ApplyWorkflowChanges para permitir la creación de cambios dinámicos desde el exterior del flujo de trabajo. En la mayoría de los casos, este método lo utiliza el entorno del host.
Para aplicar un cambio de flujo de trabajo en una instancia de flujo de trabajo en ejecución desde el entorno del host, navegue a la instancia en la que se va a realizar el cambio de flujo de trabajo, y obtenga su WorkflowInstance. El tiempo de ejecución crea una WorkflowInstance para cada creación de instancia de un flujo de trabajo. El host puede obtener la WorkflowInstance de un flujo de trabajo guardando el parámetro de retorno cuando se llama a CreateWorkflow.
Una vez obtenido el objeto WorkflowInstance, cree un objeto WorkflowChanges y utilice los distintos métodos y propiedades de ese objeto para aplicar un cambio de flujo de trabajo. Cuando esto se produce, el host está trabajando con una copia de la WorkflowInstance. Para aplicar el cambio de flujo de trabajo a la WorkflowInstanceactualmente en ejecución, llame al método ApplyWorkflowChanges desde el objeto WorkflowInstance.
Para obtener un ejemplo de actualización dinámica de un flujo de trabajo desde un host, vea Workflow Changes From Host.
Cambios de flujo de trabajo y propiedades de actividad
El establecimiento de propiedades en las actividades de flujo de trabajo transitorio, se realiza del modo siguiente:
Para las propiedades de metadatos, los valores establecidos en un flujo de trabajo transitorio son efectivos en el flujo de trabajo en ejecución, una vez aplicada la actualización.
Para las propiedades de instancia, los valores establecidos en un flujo de trabajo transitorio se pierden una vez aplicada la actualización. Se conservan los valores originales de flujo de trabajo en ejecución.
Consulte también
Referencia
WorkflowChanges
WorkflowInstance
WorkflowRuntime
Conceptos
Uso de cambios de flujo de trabajo en flujos de trabajo
Otros recursos
Desarrollo de aplicaciones con flujo de trabajo habilitado
Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.