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

  1. Abra Visual Studio y elija Nuevo>Proyecto en el menú Archivo.

  2. 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.

  3. Seleccione la plantilla de proyecto Biblioteca de actividades. Escriba NumberGuessWorkflowActivities en el cuadro Nombre y, a continuación, haga clic en Aceptar.

  4. 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

  1. Elija Agregar nuevo elemento en el menú Proyecto.

  2. En el nodo Instalado>Elementos comunes, seleccione Flujo de trabajo. Seleccione Actividad de código en la lista Flujo de trabajo.

  3. Escriba ReadInt en el cuadro Nombre y, a continuación, haga clic en Agregar.

  4. 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 ArgumentException("BookmarkName cannot be an Empty string.",
                    "BookmarkName")
            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

  1. 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.

  2. Elija Agregar nuevo elemento en el menú Proyecto.

  3. En el nodo Instalado>Elementos comunes, seleccione Flujo de trabajo. Seleccione Actividad en la lista Flujo de trabajo.

  4. Escriba Prompt en el cuadro Nombre y, a continuación, haga clic en Agregar.

  5. Haga doble clic en Prompt.xaml en el Explorador de soluciones para que se muestre en el diseñador, si aún no aparece.

  6. Haga clic en Argumentos en el lado inferior izquierdo del Diseñador de actividad para mostrar el panel Argumentos.

  7. Haga clic en Crear argumento.

  8. 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.

  9. Haga clic en Crear argumento.

  10. Escriba Result en el cuadro Nombre que se encuentra debajo del argumento BookmarkName recién agregado, seleccione Salida en la lista desplegable Dirección, seleccione Int32 en la lista desplegable Tipo de argumento y, luego, presione ENTRAR.

  11. Haga clic en Crear argumento.

  12. 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 actividad Prompt en los siguientes pasos.

  13. Haga clic en Argumentos en el lado inferior izquierdo del Diseñador de actividad para cerrar el panel Argumentos.

  14. 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.

  15. 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.

  16. 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 escribiendo Text 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.

  17. 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.

  18. 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.

  19. 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.

  20. 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.

Consulte también