Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Este tema es aplicable a Windows Workflow Foundation 4.
DynamicActivity es una clase sellada y concreta con un constructor público. DynamicActivity se puede usar para ensamblar la funcionalidad de actividad en el tiempo de ejecución usando un DOM de actividad.
Características de DynamicActivity
DynamicActivity tiene acceso a las propiedades, argumentos y variables de ejecución pero no a los servicios en tiempo de ejecución como la programación de actividades secundarias o el seguimiento.
Las propiedades de nivel superior se pueden establecer con los objetos Argument de flujo de trabajo. En código imperativo, estos argumentos se crean usando las propiedades CLR en un nuevo tipo. En XAML, se declaran con las etiquetas x:Class
y x:Member
.
Las actividades se construyeron mediante la interfaz DynamicActivity con el diseñador usando ICustomTypeDescriptor. Las actividades creadas en el diseñador se pueden cargar dinámicamente mediante Load, tal y como se muestra en el siguiente procedimiento.
Para crear una actividad en el tiempo de ejecución usando el código imperativo
Abra Visual Studio 2010.
Seleccione Archivo, Nuevo y Proyecto. Seleccione Workflow 4.0 debajo de Visual C# en la ventana Tipos de proyecto y seleccione el nodo v2010. En la ventana Plantillas, seleccione Aplicación de consola de flujos de trabajo secuenciales. Proporcione el nombre siguiente al nuevo proyecto: DynamicActivitySample.
Haga clic con el botón secundario en Workflow1.xaml en el proyecto HelloActivity y seleccione Eliminar.
Abra Program.cs. Agregue la siguiente directiva a la parte superior del archivo.
using System.Collections.Generic;
Sustituya el contenido del método
Main
con el siguiente código, que crea una actividad Sequence que contiene una actividad WriteLine única y la asigna a la propiedad Implementation de una nueva actividad dinámica.//Define the input argument for the activity var textOut = new InArgument<string>(); //Create the activity, property, and implementation Activity dynamicWorkflow = new DynamicActivity() { Properties = { new DynamicActivityProperty { Name = "Text", Type = typeof(InArgument<String>), Value = textOut } }, Implementation = () => new Sequence() { Activities = { new WriteLine() { Text = new InArgument<string>(env => textOut.Get(env)) } } } }; //Execute the activity with a parameter dictionary WorkflowInvoker.Invoke(dynamicWorkflow, new Dictionary<string, object> { { "Text", "Hello World!" } }); Console.ReadLine();
Ejecute la aplicación. Aparece la ventana de la consola con el texto "Hello World!".
Para crear una actividad en el tiempo de ejecución usando XAML
Abra Visual Studio 2010.
Seleccione Archivo, Nuevo y Proyecto. Seleccione Workflow 4.0 debajo de Visual C# en la ventana Tipos de proyecto y seleccione el nodo v2010. En la ventana Plantillas, seleccione Aplicación de consola de flujos de trabajo. Proporcione el nombre siguiente al nuevo proyecto: DynamicActivitySample.
Abra Workflow1.xaml en el proyecto HelloActivity. Haga clic en la opción Argumentos en la parte inferior del diseñador. Cree un nuevo argumento In llamado
TextToWrite
de tipo String.Arrastre una actividad WriteLine de la sección Primitivas del cuadro de herramientas a la superficie del diseñador. Asigne el valor TextToWrite a la propiedad Text de la actividad.
Abra Program.cs. Agregue la siguiente directiva a la parte superior del archivo.
using System.Activities.XamlIntegration;
Reemplace el contenido del método
Main
con el código siguiente.Activity act2 = ActivityXamlServices.Load(@"Workflow1.xaml"); results = WorkflowInvoker.Invoke(act2, new Dictionary<string, object> { { "TextToWrite", "HelloWorld!" } }); Console.ReadLine();
Ejecute la aplicación. Aparece la ventana de la consola con el texto "Hello World!".
Haga clic con el botón secundario en el archivo Workflow1.xaml en el Explorador de soluciones y seleccione Ver código. Tenga en cuenta que la clase de actividad se crea con
x:Class
y la propiedad se crea conx:Property
.