Creación de flujos de trabajo de máquina de estados de SharePoint 2010 en Visual Studio 2010

Ayuda visual de SharePoint

Resumen:  aprenda a usar la plantilla Flujo de trabajo de máquina de estados en Microsoft Visual Studio 2010 para crear un flujo de trabajo de máquina de estados de Microsoft SharePoint 2010.

Última modificación: miércoles, 12 de septiembre de 2012

Hace referencia a: SharePoint Foundation 2010 | SharePoint Server 2010 | Visual Studio | Visual Studio 2008 | Visual Studio 2010

Se aplica a:  Microsoft SharePoint Foundation 2010 | Microsoft SharePoint Server 2010 | Microsoft Visual Studio 2010

Proporcionado por:  Ben Hedges, Point8020

Introducción

Microsoft Visual Studio 2010 proporciona una plantilla Flujo de trabajo de máquina de estados que permite crear soluciones de flujo de trabajo para Microsoft SharePoint 2010 mediante una superficie de diseño gráfica. A diferencia de los flujos de trabajo secuenciales, que realizan una transición de una actividad a otra, los flujos de trabajo de máquina de estados realizan una transición de un estado a otro.

Codifíquelo

La ayuda visual de SharePoint describe los siguientes pasos para crear e implementar un flujo de trabajo de máquina de estados en un sitio de SharePoint 2010:

  1. Creación de una biblioteca de documentos de requisitos previos denominada Projects.

  2. Adición de actividades de estado para stateInProgress, stateReview y stateFinished.

  3. Configuración de inicialización y eventos de estado para cada estado.

  4. Configuración de código que determina transiciones de estado.

Requisitos previos

Este flujo de trabajo requiere una biblioteca de documentos específica denominada Projects.

Para crear la biblioteca de documentos Projects

  1. En el menú Acciones del sitio, haga clic en Más opciones.

  2. En la lista de elementos instalados, haga clic en Biblioteca de documentos.

  3. En el lado derecho de la pantalla, en el cuadro Nombre, escriba Projects y, a continuación, haga clic en Crear.

Creación de un flujo de trabajo

Comience con la creación de un proyecto de Flujo de trabajo de máquina de estados de SharePoint en Visual Studio 2010.

Para crear un proyecto de Flujo de trabajo de máquina de estados de SharePoint en Visual Studio 2010

  1. Inicie Visual Studio. En el menú Archivo, haga clic en Nuevo y, a continuación, haga clic en Proyecto.

  2. En la sección Plantillas instaladas, expanda Visual Basic o C#, expanda SharePoint y, a continuación, haga clic en 2010.

  3. En el panel de plantillas, haga clic en Flujo de trabajo de máquina de estados.

  4. En el cuadro Nombre, escriba stateWorkflow. Conserve los valores predeterminados en los demás campos y haga clic en Aceptar.

  5. En el Asistente para la personalización de SharePoint, en la lista ¿Qué sitio local desea usar para la depuración?, seleccione su sitio y, a continuación, haga clic en Siguiente.

  6. En la página Especifique el nombre del flujo de trabajo de depuración, deje el nombre predeterminado, y asegúrese de que Flujo de trabajo de lista esté seleccionado. Haga clic en Siguiente.

  7. En la página Seleccione las listas que desea usar para la depuración, en la lista etiquetada como La biblioteca o lista a la que va a asociar el flujo de trabajo, seleccione Projects. Deje las demás opciones con su configuración predeterminada y haga clic en Siguiente.

  8. En la página Especifique las condiciones de inicio del flujo de trabajo, haga clic en Finalizar.

Aparace la superficie de diseño con la actividad Workflow1IntitalState.

Para agregar estados al flujo de trabajo

  1. En el grupo Windows Workflow 3 en el Cuadro de herramientas, arrastre tres actividades State a la superficie de diseño.

  2. Haga clic en la actividad WorkFlow1InitialState. A continuación, en el panel Propiedades, en la propiedad Name, cambie el nombre de este estado por InitialState.

  3. Haga clic en la actividad stateActivity1. A continuación, en el panel Propiedades, en la propiedad Name, cambie el nombre de este estado por stateInProgress.

  4. Haga clic en la actividad stateActivity2. A continuación, en el panel Propiedades, en la propiedad Name, cambie el nombre de este estado por stateReview.

  5. Haga clic en la actividad stateActivity3. A continuación, en el panel Propiedades, en la propiedad Name, cambie el nombre de este estado por stateFinished.

    En la figura 1 se muestran los tres estados que se agregaron a la superficie de diseño.

    Figura 1. Adición de estados a la superficie de diseño


    Agregar estados a la superficie de diseño

Para establecer un estado completado e inicial

  1. Haga clic con el botón secundario etiquetado como InitialState y, a continuación, haga clic en Establecer como estado inicial.

  2. Haga clic con el botón secundario etiquetado como stateFinished y, a continuación, haga clic en Establecer como estado completado.

Para configurar la actividad InitialState

  1. En la actividad InitialState, haga doble clic en eventDrivenActivity1. Aparecerá una nueva vista.

    Figura 2. Actividad InitialState


    Flujo de trabajo de estado inicial

  2. Arrastre una actividad SetState desde el Cuadro de herramientas y colóquela bajo la actividad onWorkflowActivated1.

  3. En el panel Propiedades, en la propiedad TargetStateName, haga clic en la lista desplegable y seleccione stateInProgress.

  4. Haga clic en Workflow1 en la superficie de diseño para volver a la vista de flujo de trabajo completo.

Para configurar la actividad stateInProgress

  1. Haga clic con el botón secundario en la actividad stateInProgress y, a continuación, haga clic en AddStateInitialization.

  2. En el panel Propiedades, cambie el nombre de stateInitializationActivity1 por stateInProgressInitialization.

  3. En las opciones de Flujo de trabajo de SharePoint del Cuadro de herramientas, arrastre una actividad CreateTask y agréguela al área de colocación de stateInProgressInitialization.

  4. En el panel Propiedades, en la propiedad CorrelationToken, escriba InProgressToken y presione Entrar.

  5. En el panel Propiedades, expanda la propiedad CorrelationToken y, en la lista OwnerActivityName, seleccione stateInProgress.

  6. En el panel Propiedades, en la propiedad TaskID, haga clic en el valor. A continuación, haga clic en el botón de puntos suspensivos (...).

  7. En el cuadro de diálogo Enlazar 'TaskID' a una propiedad de Activity, haga clic en la pestaña Enlazar a un nuevo miembro.

  8. En la lista de opciones Seleccionar el tipo de miembro que se va a crear, haga clic en Crear campo. Haga clic en Aceptar.

  9. En el panel Propiedades, haga clic en la propiedad TaskProperties y, a continuación, haga clic en el botón de puntos suspensivos (...).

  10. En el cuadro de diálogo Enlazar 'TaskProperties' a una propiedad de Activity, haga clic en la pestaña Enlazar a un nuevo miembro.

  11. En la lista de opciones Seleccionar el tipo de miembro que se va a crear, haga clic en Crear campo y, a continuación, haga clic en Aceptar.

  12. En el panel Propiedades, en la propiedad MethodInvoking, escriba createTask1_MethodInvoking y presione Entrar.

  13. Agregue el código siguiente.

    createTask1_TaskId1 = Guid.NewGuid()
    createTask1_TaskProperties1.Title = "Finish Document"
    createTask1_TaskProperties1.AssignedTo = "CONTOSO\sanjays"
    createTask1_TaskProperties1.DueDate = Date.Now.AddDays(1.0)
    createTask1_TaskId1 = Guid.NewGuid();
    createTask1_TaskProperties1.Title = "Finish Document";
    createTask1_TaskProperties1.AssignedTo = @"CONTOSO\sanjays";
    createTask1_TaskProperties1.DueDate = DateTime.Now.AddDays(1.0);
  14. Haga clic en la pestaña Diseño y, a continuación, haga clic en Workflow1 para volver a la vista de flujo de trabajo completo.

  15. Haga clic con el botón secundario en la actividad stateInProgress y, a continuación, haga clic en AddEventDriven.

  16. En las opciones de Flujo de trabajo de SharePoint del Cuadro de herramientas, arrastre un elemento onTaskChanged y agréguelo al área de colocación de stateInProgress.

  17. En el panel Propiedades, haga clic en la propiedad TaskID y, a continuación, haga clic en el botón de puntos suspensivos (...).

  18. En el cuadro de diálogo Enlazar 'TaskID' a una propiedad de Activity, en la ficha Enlazar a un nuevo miembro, haga clic en createTask1_TaskId1. Haga clic en Aceptar.

  19. En el panel Propiedades, haga clic en el campo AfterProperties y, a continuación, haga clic en el botón de puntos suspensivos (...).

  20. En el cuadro de diálogo Enlazar 'AfterProperties' a una propiedad de Activity, haga clic en la pestaña Enlazar a un nuevo miembro.

  21. En la lista de opciones Seleccionar el tipo de miembro que se va a crear, haga clic en Crear campo y, a continuación, haga clic en Aceptar.

  22. En el panel Propiedades, haga clic en el campo BeforeProperties y, a continuación, haga clic en el botón de puntos suspensivos (...).

  23. En el cuadro de diálogo Enlazar 'BeforeProperties' a una propiedad de Activity, haga clic en la pestaña Enlazar a un nuevo miembro.

  24. En la lista de opciones Seleccionar el tipo de miembro que se va a crear, haga clic en Crear campo. Haga clic en Aceptar.

  25. En el panel Propiedades, en la propiedad CorrelationToken, seleccione InProgressToken.

  26. En el panel Propiedades, en la propiedad Invoked, escriba onTaskChanged1_Invoked y presione Entrar.

  27. Agregue el código siguiente:

    onTaskChanged1_AfterProperties1 = onTaskChanged1.AfterProperties
    onTaskChanged1_BeforeProperties1 = onTaskChanged1.BeforeProperties
    onTaskChanged1_AfterProperties1 = onTaskChanged1.AfterProperties;
    onTaskChanged1_BeforeProperties1 = onTaskChanged1.BeforeProperties;
  28. Haga clic en la pestaña Diseño. En el Cuadro de herramientas, en el grupo Windows Workflow 3, arrastre una actividad IfElse debajo de la actividad OnTaskedChange1.

  29. En la vista Código de Workflow1, agregue el siguiente código.

    Private Sub ReadyForReview(ByVal sender As Object, _
                           ByVal e As ConditionalEventArgs)
        If onTaskChanged1_AfterProperties1.PercentComplete = 1.0 Then
            e.Result = True
        Else
            e.Result = False
        End If
    End Sub
    private void ReadyForReview(object sender, ConditionalEventArgs e)
      {
          if (onTaskChanged1_AfterProperties1.PercentComplete == 1.0)
          {
              e.Result = true;
          }
          else
          {
              e.Result = false;
          }
      }
  30. Haga clic en la pestaña Diseño y, a continuación, haga clic en ifElseBranchActivity1. En el panel Propiedades, haga clic en la propiedad Condition y, a continuación, seleccione Condición de código en la lista desplegable.

  31. En el panel Propiedades, expanda la propiedad Condition. En la lista desplegable, seleccione ReadyForReview.

  32. En el grupo Windows Workflow 3 del Cuadro de herramientas, arrastre una actividad SetState al área de colocación de IfElseBranchActivity1.

  33. En el panel Propiedades, haga clic en TargetStateName y, a continuación, haga clic en stateReview en la lista desplegable.

    Figura 3. Actividad StateInProgress


    Actividad StateInProgress

  34. En la superficie de diseño, haga clic en Workflow1 para volver a la vista de flujo de trabajo completo.

Para configurar la actividad stateReview

  1. Haga clic con el botón secundario en la actividad stateReview y, a continuación, haga clic en AddStateInitialization.

  2. En las opciones de Flujo de trabajo de SharePoint del Cuadro de herramientas, arrastre una actividad CreateTask al área de colocación de stateInitializationActivity1.

  3. En el panel Propiedades, haga clic en la propiedad (Name) y cámbiele el nombre por createReviewTask.

  4. En el panel Propiedades, en la propiedad CorrelationToken, escriba ReviewStateToken y presione Entrar.

  5. En el panel Propiedades, expanda la propiedad CorrelationToken y, en la lista OwnerActivityName, seleccione stateReview.

  6. En el panel Propiedades, haga clic en TaskID y, a continuación, haga clic en el botón de puntos suspensivos (...).

  7. En el cuadro de diálogo Enlazar 'TaskID' a una propiedad de Activity, haga clic en la pestaña Enlazar a un nuevo miembro.

  8. En la lista de opciones Seleccionar el tipo de miembro que se va a crear, haga clic en Crear campo y, a continuación, haga clic en Aceptar.

  9. En el panel Propiedades, haga clic en la propiedad TaskProperties y, a continuación, haga clic en el botón de puntos suspensivos (...).

  10. En el cuadro de diálogo Enlazar 'TaskProperties' a una propiedad de Activity, haga clic en la pestaña Enlazar a un nuevo miembro.

  11. En la lista de opciones Seleccionar el tipo de miembro que se va a crear, haga clic en Crear campo y, a continuación, haga clic en Aceptar.

  12. En el panel Propiedades, en el controlador MethodInvoking, escriba createReviewTask_MethodInvoking y presione Entrar.

  13. Agregue el código siguiente.

    createReviewTask_TaskId1 = Guid.NewGuid()
    createReviewTask_TaskProperties1.Title = "Review Document"
    createReviewTask_TaskProperties1.AssignedTo = "CONTOSO\andyj"
    createReviewTask_TaskProperties1.DueDate = Date.Now.AddDays(1.0)
    createReviewTask_TaskId1 = Guid.NewGuid();
    createReviewTask_TaskProperties1.Title = "Review Document";
    createReviewTask_TaskProperties1.AssignedTo = @"CONTOSO\andyj";
    createReviewTask_TaskProperties1.DueDate = DateTime.Now.AddDays(1.0);
  14. Haga clic en la superficie de diseño y, a continuación, haga clic en Workflow1 para volver a la vista de flujo de trabajo completo.

  15. Haga clic con el botón secundario en la actividad stateReview y, a continuación, haga clic en AddEventDriven.

  16. En las opciones de Flujo de trabajo de SharePoint del Cuadro de herramientas, arrastre un elemento onTaskChanged al área de colocación de stateReview.

  17. En el panel Propiedades, establezca el token de correlación en ReviewStateToken.

  18. En el panel Propiedades, haga clic en la propiedad TaskID y, a continuación, haga clic en el botón de puntos suspensivos (...).

  19. En el cuadro de diálogo Enlazar 'TaskID' a una propiedad de Activity, en la ficha Enlazar a un nuevo miembro, haga clic en createReviewTask_TaskId1 y, a continuación, haga clic en Aceptar.

  20. En el panel Propiedades, haga clic en el campo AfterProperties y, a continuación, haga clic en el botón de puntos suspensivos (...).

  21. En el cuadro de diálogo Enlazar 'AfterProperties' a una propiedad de Activity, haga clic en la pestaña Enlazar a un nuevo miembro.

  22. En la lista de opciones Seleccionar el tipo de miembro que se va a crear, haga clic en Crear campo y, a continuación, haga clic en Aceptar.

  23. En el panel Propiedades, haga clic en el campo BeforeProperties y, a continuación, haga clic en el botón de puntos suspensivos (...).

  24. En el cuadro de diálogo Enlazar 'BeforeProperties' a una propiedad de Activity, haga clic en la pestaña Enlazar a un nuevo miembro.

  25. En la lista de opciones Seleccionar el tipo de miembro que se va a crear, haga clic en Crear campo y, a continuación, haga clic en Aceptar.

  26. En el panel Propiedades, en el controlador Invoked, escriba onTaskChanged2_Invoked y presione Entrar.

  27. Agregue el código siguiente.

    onTaskChanged2_AfterProperties1 = onTaskChanged2.AfterProperties
    onTaskChanged2_BeforeProperties1 = onTaskChanged2.BeforeProperties
    onTaskChanged2_AfterProperties1 = onTaskChanged2.AfterProperties;
    onTaskChanged2_BeforeProperties1 = onTaskChanged2.BeforeProperties;
  28. Haga clic en la pestaña Diseño. En el Cuadro de herramientas, en el grupo Windows Workflow 3, arrastre una actividad IfElse debajo de la actividad OnTaskedChange2.

  29. Abra la vista Código de Workflow1 y agregue el siguiente código.

    Private Sub ReviewFinished(ByVal sender As Object, _
                               ByVal e As ConditionalEventArgs)
         If onTaskChanged2_AfterProperties1.PercentComplete = 1.0 Then
               e.Result = True
          Else
               e.Result = False
          End If
    End Sub
    private void ReviewFinished(object sender, ConditionalEventArgs e)
            {
                if (onTaskChanged2_AfterProperties1.PercentComplete == 1.0)
                {
                    e.Result = true;
                }
                else
                {
                    e.Result = false;
                }
            }
  30. Haga clic en la pestaña Diseño y, a continuación, haga clic en ifElseBranchActivity3. En el panel Propiedades, haga clic en la propiedad Condition y seleccione Condición de código en la lista desplegable.

  31. En el panel Propiedades, expanda la propiedad Condition.

  32. En el campo de condición expandido, seleccione ReviewFinished en la lista desplegable.

  33. En el grupo Windows Workflow 3 del Cuadro de herramientas, arrastre la actividad IfElse y agréguela debajo de la actividad ifElseActivity3, en el área Coloque actividades aquí.

    Se creará una instrucción If/Else anidada.

  34. Agregue el siguiente código en la vista Código de Workflow1.

    Private Sub DocApproved(ByVal sender As Object, _
                            ByVal e As ConditionalEventArgs)
            If onTaskChanged2_AfterProperties1.Description = "<DIV>Approved</DIV>" Then
                e.Result = True
            Else
                e.Result = False
            End If
        End Sub
    private void DocApproved(object sender, ConditionalEventArgs e)
      {
          if (onTaskChanged2_AfterProperties1.Description == "<DIV>Approved</DIV>")
          {
              e.Result = true;
          }
          else
          {
              e.Result = false;
          }
      }
  35. Haga clic en la pestaña Diseño y, a continuación, haga clic en ifElseBranchActivity5. En el panel Propiedades, haga clic en la propiedad Condition y seleccione Condición de código en la lista desplegable.

  36. En el panel Propiedades, expanda la propiedad Condition. En el campo de condición expandido, seleccione DocApproved en la lista desplegable.

  37. En el Cuadro de herramientas, arrastre una actividad SetState debajo de la actividad ifElseBranchActivity5.

  38. En el panel Propiedades, haga clic en la propiedad TargetStateName y, a continuación, seleccione stateFinished.

  39. En el Cuadro de herramientas, arrastre una actividad SetState debajo de la actividad ifElseBranchActivity6.

  40. En el panel Propiedades, haga clic en la propiedad TargetStateName y, a continuación, seleccione stateInProgress.

    En la figura 4 se muestra el flujo de trabajo de máquina de estados completado.

    Figura 4. Flujo de trabajo de máquina de estados completado


    Flujo de trabajo de la máquina de estados completado

Implementación del proyecto

Finalmente, implemente el proyecto y pruebe el flujo de trabajo.

Para implementar el proyecto

  1. En el Explorador de soluciones, haga clic con el botón secundario en el proyecto y, a continuación, haga clic en Implementar.

  2. Abra la página principal de SharePoint.

  3. En el menú Inicio rápido, haga clic en Projects y, a continuación, en Agregar documento.

  4. En el cuadro de diálogo Cargar documento, haga clic en Examinar, seleccione un documento y, a continuación, haga clic en Abrir. Haga clic en Aceptar en el cuadro de diálogo Cargar.

  5. Abra la biblioteca Tareas y revise la tarea Finish Document.

  6. Edite la tarea Finish Document y, en el cuadro % completado, escriba 100. Haga clic en Guardar.

    Tenga en cuenta la tarea Review Document.

  7. Edite la tarea Review Document, establezca el estado en Completado y establezca % completado en 100. En Descripción, escriba Approved y, a continuación, haga clic en Guardar.

  8. Abra la biblioteca de documentos Projects y observe que el flujo de trabajo del documento está completo.

    Léalo

El proyecto Flujo de trabajo de máquina de estados en Visual Studio 2010 proporciona una superficie de diseño gráfica en la que se puede crear el flujo de trabajo.

  • Initial State tiene una actividad SetState que lleva el flujo de trabajo directamente al estado stateInProgress.

  • El estado stateInProgress tiene una actividad de tarea que genera una nueva tarea denominada "Finish Document" y asigna la tarea a un usuario especificado.

  • El estado stateInProgress tiene una actividad onTaskChanged que se invoca cuando la tarea cambia. La actividad inTaskChanged tiene una instrucción IfElse que compara el "porcentaje completado" de la tarea con 1,0 (100%).

  • Si la condición es true, el flujo de trabajo realiza una transición al siguiente estado (stateReview). Si es false, el flujo de trabajo permanece en este estado.

  • En el estado stateReview, se genera una tarea con el título "Review Document" como parte de la inicialización del estado. Nuevamente, esta tarea se asigna a un usuario especificado.

  • El estado stateReview se invoca cuando la tarea cambia. Una instrucción IfElse compara el "porcentaje completado" de esta tarea con 100%. Al igual que antes, cuando la tarea está 100% completada, el flujo de trabajo continúa.

  • Cuando la tarea está 100% completada, una instrucción IfElse anidada se alcanza dentro del estado stateReview. El código compara el texto que aparece en la descripción de la tarea con la cadena "<DIV>Approved</DIV>".

  • Si la cadena coincide, la fase se considera completa y el flujo de trabajo continúa hacia StateFinished. Si la cadena no coincide, el estado vuelve a stateInProgress.

Consultar

Ver el vídeo

Vea el vídeo (00:15:37)

Hacer clic para obtener el código

Obtenga el código

Explórelo

Acerca del autor

Ben Hedges es vicepresidente superior de investigación y desarrollo de Point8020. Los intereses de Ben se centran en el modelado de soluciones de administración de talento, cumplimiento, y aprendizaje y desarrollo en SharePoint. Ben cuenta con una amplia experiencia en satisfacer los requisitos del cliente mediante el uso de tecnologías Microsoft.