Procedimiento para crear una actividad
Las actividades son la unidad básica de comportamiento en WF. La lógica de ejecución de una actividad se puede implementar en un código administrado o mediante otras actividades. Este tema muestra cómo crear dos actividades. La primera actividad es una actividad simple que usa código para implementar la lógica de ejecución. La implementación de la segunda actividad se define mediante otras actividades. Estas actividades se usan en los siguientes pasos del tutorial.
Creación del proyecto de biblioteca de actividades
Abra Visual Studio y elija Nuevo>Proyecto en el menú Archivo.
En el cuadro de diálogo Nuevo proyecto, en la categoría Instalado, seleccione Visual C#>Flujo de trabajo (o Visual Basic>Flujo de trabajo).
Nota:
Si no ve la categoría de plantilla Flujo de trabajo, es posible que tenga que instalar el componente Windows Workflow Foundation de Visual Studio. Elija el vínculo Abrir el Instalador de Visual Studio en el lado izquierdo del cuadro de diálogo Nuevo proyecto. En el Instalador de Visual Studio, seleccione la pestaña Componentes individuales. Luego, en la categoría Actividades de desarrollo, seleccione el componente Windows Workflow Foundation. Elija Modificar para instalar el componente.
Seleccione la plantilla de proyecto Biblioteca de actividades. Escriba
NumberGuessWorkflowActivities
en el cuadro Nombre y, a continuación, haga clic en Aceptar.Haga clic con el botón secundario en Activity1.xaml en el Explorador de soluciones y elija Eliminar. Haga clic en ACEPTAR para continuar.
Creación de la actividad ReadInt
Elija Agregar nuevo elemento en el menú Proyecto.
En el nodo Instalado>Elementos comunes, seleccione Flujo de trabajo. Seleccione Actividad de código en la lista Flujo de trabajo.
Escriba
ReadInt
en el cuadro Nombre y, a continuación, haga clic en Agregar.Reemplace la definición de
ReadInt
existente con la siguiente.public sealed class ReadInt : NativeActivity<int> { [RequiredArgument] public InArgument<string> BookmarkName { get; set; } protected override void Execute(NativeActivityContext context) { string name = BookmarkName.Get(context); if (string.IsNullOrEmpty(name)) { throw new ArgumentException("BookmarkName cannot be an Empty string.", "context"); } context.CreateBookmark(name, new BookmarkCallback(OnReadComplete)); } // NativeActivity derived activities that do asynchronous operations by calling // one of the CreateBookmark overloads defined on System.Activities.NativeActivityContext // must override the CanInduceIdle property and return true. protected override bool CanInduceIdle { get { return true; } } void OnReadComplete(NativeActivityContext context, Bookmark bookmark, object state) { this.Result.Set(context, Convert.ToInt32(state)); } }
Public NotInheritable Class ReadInt Inherits NativeActivity(Of Integer) <RequiredArgument()> Property BookmarkName() As InArgument(Of String) Protected Overrides Sub Execute(ByVal context As NativeActivityContext) Dim name As String name = BookmarkName.Get(context) If name = String.Empty Then Throw New Exception("BookmarkName cannot be an Empty string.") End If context.CreateBookmark(name, New BookmarkCallback(AddressOf OnReadComplete)) End Sub ' NativeActivity derived activities that do asynchronous operations by calling ' one of the CreateBookmark overloads defined on System.Activities.NativeActivityContext ' must override the CanInduceIdle property and return True. Protected Overrides ReadOnly Property CanInduceIdle As Boolean Get Return True End Get End Property Sub OnReadComplete(ByVal context As NativeActivityContext, ByVal bookmark As Bookmark, ByVal state As Object) Result.Set(context, Convert.ToInt32(state)) End Sub End Class
Nota
La actividad
ReadInt
se deriva de NativeActivity<TResult> en lugar de CodeActivity, que es el valor predeterminado para la plantilla de actividades de código. CodeActivity<TResult> puede usarse si la actividad proporciona un único resultado, que se expone a través del argumento Result, pero CodeActivity<TResult> no admite el uso de marcadores, por lo que se usa NativeActivity<TResult>.
Creación de la actividad Prompt
Presione Ctrl+Mayús+B para compilar el proyecto. La compilación del proyecto permite que la actividad
ReadInt
de este proyecto se use para compilar la actividad personalizada de este paso.Elija Agregar nuevo elemento en el menú Proyecto.
En el nodo Instalado>Elementos comunes, seleccione Flujo de trabajo. Seleccione Actividad en la lista Flujo de trabajo.
Escriba
Prompt
en el cuadro Nombre y, a continuación, haga clic en Agregar.Haga doble clic en Prompt.xaml en el Explorador de soluciones para que se muestre en el diseñador, si aún no aparece.
Haga clic en Argumentos en el lado inferior izquierdo del Diseñador de actividad para mostrar el panel Argumentos.
Haga clic en Crear argumento.
Escriba
BookmarkName
en el cuadro Nombre, seleccione Entrada en la lista desplegable Dirección, seleccione Cadena en la lista desplegable Tipo de argumento y, luego, presione ENTRAR para guardar el argumento.Haga clic en Crear argumento.
Escriba
Result
en el cuadro Nombre que se encuentra debajo del argumentoBookmarkName
recién agregado, seleccione Salida en la lista desplegable Dirección, seleccione Int32 en la lista desplegable Tipo de argumento y, luego, presione ENTRAR.Haga clic en Crear argumento.
Escriba
Text
en el cuadro Nombre, seleccione Entrada en la lista desplegable Dirección, seleccione Cadena en la lista desplegable Tipo de argumento y, luego, presione ENTRAR para guardar el argumento.Estos tres argumentos se enlazan a los argumentos correspondientes de las actividades WriteLine y
ReadInt
que se agregan a la actividadPrompt
en los siguientes pasos.Haga clic en Argumentos en el lado inferior izquierdo del Diseñador de actividad para cerrar el panel Argumentos.
Arrastre una actividad Sequence desde la sección Flujo de control del Cuadro de herramientas y colóquela sobre la etiqueta Coloque la actividad aquí del diseñador de la actividad Prompt.
Sugerencia
Si no está visible la ventana Cuadro de herramientas, seleccione Cuadro de herramientas en el menú Ver.
Arrastre una actividad WriteLine de la sección Elementos primitivos del Cuadro de herramientas y colóquela sobre la etiqueta Coloque la actividad aquí de la actividad Sequence.
Enlace el argumento Text de la actividad WriteLine al argumento Text de la actividad Prompt; para ello, escriba
Text
en el cuadro Escriba una expresión de C# o Escriba una expresión de VB de la ventana Propiedades y, a continuación, presione la tecla TAB dos veces. Esto descarta la ventana de miembros de la lista de IntelliSense y guarda el valor de propiedad moviendo la selección fuera de la propiedad. Esta propiedad también se puede establecer escribiendoText
en el cuadro Escriba una expresión de C# o Escriba una expresión de VB en la actividad misma.Sugerencia
Si no está visible la ventana Propiedades, seleccione Ventana Propiedades en el menú Ver.
Arrastre una actividad ReadInt de la sección NumberGuessWorkflowActivities del Cuadro de herramientas y colóquela en la actividad Sequence para que siga a la actividad WriteLine.
Enlace el argumento BookmarkName de la actividad ReadInt al argumento BookmarkName de la actividad Prompt escribiendo
BookmarkName
en el cuadro Escriba una expresión de VB a la derecha del argumento BookmarkName en la Ventana Propiedades y, a continuación, presione dos veces la tecla TAB para cerrar la ventana de lista de miembros de IntelliSense y guarde la propiedad.Enlace el argumento Result de la actividad ReadInt al argumento Result de la actividad Prompt escribiendo
Result
en el cuadro Escriba una expresión de VB a la derecha del argumento Result en la Ventana Propiedades y, a continuación, presione la tecla TAB dos veces.Presione Ctrl+Mayús+B para compilar la solución.
Pasos siguientes
Para instrucciones sobre cómo crear un flujo de trabajo usando estas actividades, consulte el paso siguiente del tutorial, Cómo crear un flujo de trabajo.