Tutorial: Crear un flujo de trabajo con formularios de asociación y de iniciación
En este tutorial se muestra cómo crear un flujo de trabajo secuencial básico que incorpora el uso de formularios de asociación e iniciación. Éstos son formularios ASPX que permiten agregar parámetros a un flujo de trabajo cuando el administrador de SharePoint lo asocia por primera vez (formulario de asociación) y cuando el usuario inicia el flujo de trabajo (formulario de iniciación).
En este tutorial se describe un escenario donde un usuario desea crear un flujo de trabajo de aprobación para los informes de gastos con los requisitos siguientes:
Cuando el flujo de trabajo está asociado a una lista, el administrador recibe un formulario de asociación donde escribe un límite en dólares para los informes de gastos.
Los empleados cargan sus informes de gastos en la lista Documentos compartidos, inician el flujo de trabajo y, a continuación, escriben el total de gastos en el formulario de iniciación del flujo de trabajo.
Si el total de un informe de gastos supera el límite predefinido por el administrador, se crea una tarea para el jefe del empleado que le permita aprobar el informe de gastos. Sin embargo, si el total del informe de gastos de un empleado es menor o igual que el límite establecido, se escribe un mensaje de aceptación automática en la lista de historial del flujo de trabajo.
En este tutorial se muestran las tareas siguientes:
Crear un proyecto de flujo de trabajo secuencial de definición de lista de SharePoint en Visual Studio.
Crear una programación del flujo de trabajo.
Controlar eventos de actividad de flujo de trabajo.
Crear formularios de asociación e iniciación de flujo de trabajo.
Asociar el flujo de trabajo.
Iniciar el flujo de trabajo manualmente.
Nota
Aunque en el tutorial se utiliza un proyecto de flujo de trabajo secuencial, el proceso es el mismo para los flujos de trabajo de máquinas de estados.
También es posible que su equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio en las siguientes instrucciones. La edición de Visual Studio y la configuración que esté usando determinan estos elementos. Para obtener más información, vea Trabajar con valores de configuración.
Requisitos previos
Necesita los componentes siguientes para completar este tutorial:
Ediciones compatibles de Microsoft Windows y SharePoint. Para obtener más información, vea Requisitos para desarrollar soluciones de SharePoint.
Visual Studio 2010.
Crear un proyecto de flujo de trabajo secuencial de SharePoint
Primero, cree un proyecto de flujo de trabajo secuencial en Visual Studio. Un flujo de trabajo secuencial es una sucesión de pasos que se ejecutan en orden hasta que finaliza la última actividad. En este procedimiento, creará un flujo de trabajo secuencial que se aplica a la lista Documentos compartidos en SharePoint. El asistente del flujo de trabajo permite asociar el flujo de trabajo con el sitio o la definición de lista y le permite determinar cuándo se iniciará el flujo de trabajo.
Para crear un proyecto de flujo de trabajo secuencial de SharePoint
Muestre el cuadro de diálogo Nuevo proyecto señalando Nuevo en el menú Archivo y haciendo clic en Nuevo proyecto.
Expanda el nodo SharePoint bajo Visual C# o bajo Visual Basic y, a continuación, haga clic en 2010.
En el recuadro Plantillas, seleccione Flujo de trabajo secuencial.
En el cuadro Nombre, escriba ExpenseReport y, a continuación, haga clic en Aceptar.
Aparece el Asistente para la personalización de SharePoint.
En la página ¿Qué sitio local desea usar para la depuración?, haga clic en Siguiente para aceptar el sitio predeterminado.
Este paso también establece el nivel de confianza para la solución como solución de granja, la única opción disponible para los proyectos de flujo de trabajo.
En la página Especifique el nombre del flujo de trabajo de depuración, acepte el nombre predeterminado (ExpenseReport - Workflow1). Mantenga el valor del tipo de la plantilla de flujo de trabajo predeterminado (List Workflow). Haga clic en Siguiente.
En la página ¿Desea que Visual Studio asocie automáticamente el flujo de trabajo en una sesión de depuración?, desactive el cuadro que asocia automáticamente la plantilla de flujo de trabajo si está activado.
Este paso le permite asociar manualmente el flujo de trabajo a la lista Documentos compartidos más adelante, que muestra el formulario de asociación.
Haga clic en Finalizar.
Agregar un formulario de asociación al flujo de trabajo
A continuación, cree un formulario de asociación .ASPX que aparecerá cuando el administrador de SharePoint asocie por primera vez el flujo de trabajo a un documento de informe de gastos.
Para agregar un formulario de asociación al flujo de trabajo
En el Explorador de soluciones, haga clic en el nodo Workflow1.
Haga clic en Agregar nuevo elemento en el menú Proyecto para mostrar el cuadro de diálogo Agregar nuevo elemento.
En la vista de árbol del cuadro de diálogo, expanda Visual C# o Visual Basic (dependiendo del lenguaje del proyecto), expanda el nodo SharePoint y, a continuación, haga clic en 2010.
En la lista de plantillas, seleccione Formulario de asociación de flujo de trabajo.
En el cuadro de texto Nombre, escriba ExpenseReportAssocForm.aspx.
Haga clic en el botón Agregar para agregar el formulario al proyecto.
Diseñar y codificar el formulario de asociación
En este procedimiento, se introduce la funcionalidad en el formulario de asociación agregando controles y código.
Para diseñar y codificar el formulario de asociación
En el formulario de asociación (ExpenseReportAssocForm.aspx), busque el elemento asp:Content que tenga ID="Main".
Justo después de la primera línea de este elemento de contenido, agregue el código siguiente para crear una etiqueta y cuadro de texto que solicite el límite de aprobación de gasto (AutoApproveLimit):
<asp:Label ID="lblAutoApproveLimit" Text="Auto Approval Limit:" runat="server" /> <asp:TextBox ID="AutoApproveLimit" runat="server" /> <br /><br />
Expanda el archivo ExpenseReportAssocForm.aspx en el Explorador de soluciones para mostrar sus archivos dependientes.
Nota
Si su proyecto es de Visual Basic, debe hacer clic en el botón Ver todos los archivos para seguir este paso.
Haga clic en el archivo ExpenseReportAssocForm.aspx con el botón secundario y seleccione Ver código.
Reemplace el método GetAssociationData por lo siguiente:
Private Function GetAssociationData() As String ' TODO: Return a string that contains the association data that ' will be passed to the workflow. Typically, this is in XML ' format. Return Me.AutoApproveLimit.Text End Function
private string GetAssociationData() { // TODO: Return a string that contains the association data that // will be passed to the workflow. Typically, this is in XML // format. return this.AutoApproveLimit.Text; }
Agregar un formulario de iniciación al flujo de trabajo
A continuación cree el formulario de iniciación que aparece cuando los usuarios ejecutan el flujo de trabajo en los informes de gastos.
Para crear un formulario de iniciación
En el Explorador de soluciones, haga clic en el nodo Workflow1.
Haga clic en Agregar nuevo elemento en el menú Proyecto para mostrar el cuadro de diálogo Agregar nuevo elemento.
En la vista de árbol del cuadro de diálogo, expanda Visual C# o Visual Basic (dependiendo del lenguaje del proyecto), expanda el nodo SharePoint y, a continuación, haga clic en 2010.
En la lista de plantillas, seleccione Formulario de iniciación de flujo de trabajo.
En el cuadro de texto Nombre, escriba ExpenseReportInitForm.aspx.
Haga clic en el botón Agregar para agregar el formulario al proyecto.
Diseñar y codificar el formulario de iniciación
A continuación, incluya la funcionalidad en el formulario de iniciación agregando los controles y código.
Para codificar el formulario de iniciación
En el formulario de iniciación (ExpenseReportInitForm.aspx), busque el elemento asp:Content que tenga ID="Main".
Justo después de la primera línea de este elemento de contenido, agregue el código siguiente para crear una etiqueta y cuadro de texto donde se muestre el límite de aprobación de gastos (AutoApproveLimit) que se escribió en el formulario de asociación, y otra etiqueta y cuadro de texto para el indicador del total de gastos (ExpenseTotal):
<asp:Label ID="lblAutoApproveLimit" Text="Auto Approval Limit:" runat="server" /> <asp:TextBox ID="AutoApproveLimit" ReadOnly="true" runat="server" /> <br /><br /> <asp:Label ID="lblExpenseTotal" Text="Expense Total:" runat="server" /> <asp:TextBox ID="ExpenseTotal" runat="server" /> <br /><br />
Expanda el archivo ExpenseReportInitForm.aspx en el Explorador de soluciones para mostrar sus archivos dependientes.
Haga clic en el archivo ExpenseReportInitForm.aspx con el botón secundario y elija Ver código.
Reemplace el método Page_Load por el siguiente ejemplo:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load InitializeParams() Me.AutoApproveLimit.Text = workflowList.WorkflowAssociations(New Guid(associationGuid)).AssociationData ' Optionally, add code here to pre-populate your form fields. End Sub
protected void Page_Load(object sender, EventArgs e) { InitializeParams(); this.AutoApproveLimit.Text = workflowList.WorkflowAssociations[new Guid(associationGuid)].AssociationData; }
Reemplace el método GetInitiationData por el siguiente ejemplo:
' This method is called when the user clicks the button to start the workflow. Private Function GetInitiationData() As String Return Me.ExpenseTotal.Text ' TODO: Return a string that contains the initiation data that ' will be passed to the workflow. Typically, this is in XML ' format. Return String.Empty End Function
// This method is called when the user clicks the button to start the workflow. private string GetInitiationData() { // TODO: Return a string that contains the initiation data that // will be passed to the workflow. Typically, this is in XML // format. return this.ExpenseTotal.Text; }
Personalizar el flujo de trabajo
A continuación, personalice el flujo de trabajo. Después, asociará dos formularios al flujo de trabajo.
Para personalizar el flujo de trabajo
Muestre el flujo de trabajo en el diseñador de flujo de trabajo haciendo doble clic en Workflow1 en el proyecto.
En el Cuadro de herramientas, expanda el nodo Windows Workflow v3.0 y busque la actividad IfElse.
Agregue esta actividad al flujo de trabajo arrastrándolo al diseñador y colocándolo justo debajo de la actividad onWorkflowActivated1 en el flujo de trabajo. Esto crea una actividad llamada IfElseActivity1 en el diseñador.
En el Cuadro de herramientas, expanda el nodo Flujo de trabajo de SharePoint y busque la actividad CreateTask.
Agregue esta actividad al flujo de trabajo arrastrando y colocándola en una de las dos áreas Colocar aquí las actividades dentro de IfElseActivity1.
En la ventana Propiedades, especifique un valor de taskToken para la propiedad CorrelationToken.
Expanda la propiedad CorrelationToken haciendo clic en el signo más () situado al lado.
Haga clic en la flecha de lista desplegable de la subpropiedad OwnerActivityName y seleccione Workflow1.
Haga clic en la propiedad TaskId y, a continuación, haga clic en el botón de puntos suspensivos () para mostrar el cuadro de diálogo Enlazar propiedad.
Haga clic en la pestaña Enlazar a un nuevo miembro, seleccione Crear campo y, a continuación, haga clic en Aceptar.
Haga clic en la propiedad TaskProperties y, a continuación, haga clic en el botón de puntos suspensivos () para mostrar el cuadro de diálogo Enlazar propiedad.
Haga clic en la pestaña Enlazar a un nuevo miembro, seleccione Crear campo y, a continuación, haga clic en Aceptar.
En el Cuadro de herramientas, expanda el nodo Flujo de trabajo de SharePoint y busque la actividad LogToHistoryListActivity.
Agregue esta actividad al flujo de trabajo arrastrándola y colocándola en la otra área Colocar aquí las actividades dentro de IfElseActivity1.
Agregar código al flujo de trabajo
A continuación agregue el código al flujo de trabajo para darle funcionalidad.
Para agregar código al flujo de trabajo
Haga doble clic en la actividad createTask1 en el diseñador de flujo de trabajo para generar un método vacío para el evento MethodInvoking.
Reemplace el método MethodInvoking por lo siguiente:
Private Sub createTask1_MethodInvoking(ByVal sender As System.Object, ByVal e As System.EventArgs) createTask1_TaskId1 = Guid.NewGuid createTask1_TaskProperties1.AssignedTo = "somedomain\\someuser" createTask1_TaskProperties1.Description = "Please approve the expense report" createTask1_TaskProperties1.Title = "Expense Report Approval Needed" End Sub
private void createTask1_MethodInvoking(object sender, EventArgs e) { createTask1_TaskId1 = Guid.NewGuid(); createTask1_TaskProperties1.AssignedTo = "somedomain\\someuser"; createTask1_TaskProperties1.Description = "Please approve the expense report"; createTask1_TaskProperties1.Title = "Expense Report Approval Needed"; }
Nota
En el código, reemplace somedomain\\someuser por un dominio y un nombre de usuario para los que se creará una tarea; por ejemplo, "Office\\JoeSch". Para probarlo es más fácil es utilizar la cuenta con la que está desarrollando.
Agregue el ejemplo siguiente bajo el método MethodInvoking:
Private Sub checkApprovalNeeded(ByVal sender As Object, ByVal e As ConditionalEventArgs) Dim approval As Boolean = False If (Convert.ToInt32(workflowProperties.InitiationData) > Convert.ToInt32(workflowProperties.AssociationData)) Then approval = True End If e.Result = approval End Sub
private void checkApprovalNeeded(object sender, ConditionalEventArgs e) { bool approval = false; if (Convert.ToInt32(workflowProperties.InitiationData) > Convert.ToInt32(workflowProperties.AssociationData)) { approval = true; } e.Result = approval; }
En el diseñador de flujo de trabajo, haga clic en la actividad ifElseBranchActivity1.
En la ventana Propiedades, haga clic en la lista desplegable de la propiedad Condition y seleccione Code Condition.
Expanda la propiedad Condition haciendo clic en el signo más () situado al lado y establezca su valor en checkApprovalNeeded.
En el diseñador de flujo de trabajo, haga clic con el botón secundario en la actividad logToHistoryListActivity1 y seleccione Generar controladores para generar un método vacío para el evento MethodInvoking.
Reemplace el código MethodInvoking por el siguiente:
Private Sub logToHistoryListActivity1_MethodInvoking(ByVal sender As System.Object, ByVal e As System.EventArgs) Me.logToHistoryListActivity1.HistoryOutcome = ("Expense was auto approved for " + workflowProperties.InitiationData) End Sub
private void logToHistoryListActivity1_MethodInvoking(object sender, EventArgs e) { this.logToHistoryListActivity1.HistoryOutcome = "Expense was auto approved for " + workflowProperties.InitiationData; }
Presione F5 para depurar el programa.
Esto compila la aplicación, la empaqueta, la implementa, activa sus características, recicla el grupo de aplicaciones de IIS y, a continuación, inicia el explorador en la ubicación especificada en la propiedad Site Url.
Asociar el flujo de trabajo a la lista Documentos
A continuación muestre el formulario de asociación de flujo de trabajo asociando el flujo de trabajo a la lista Documentos compartidos en el sitio de SharePoint.
Para asociar el flujo de trabajo
Haga clic en Documentos compartidos en la barra de inicio rápido.
Haga clic en Biblioteca en la ficha de cinta Herramientas de biblioteca y, a continuación, haga clic en el botón de la cinta Configuración de biblioteca.
En la sección Permisos y administración, haga clic en el vínculo Configuración del flujo de trabajo y, a continuación, haga clic en el vínculo Agregar un flujo de trabajo en la página Flujos de trabajo.
En la lista superior de la página de configuración del flujo de trabajo, seleccione la plantilla ExpenseReport - Workflow1.
En el campo siguiente, escriba ExpenseReportWorkflow y, a continuación, haga clic en el botón Siguiente.
Esto asocia el flujo de trabajo con la lista Documentos compartidos y muestra el formulario de asociación de flujo de trabajo.
En el cuadro de texto Límite de aprobación automática, escriba 1200 y, a continuación, haga clic en el botón Asociar flujo de trabajo.
Iniciar el flujo de trabajo
A continuación asocie el flujo de trabajo a uno de los documentos en la lista Documentos compartidos para mostrar el formulario de iniciación del flujo de trabajo.
Para iniciar el flujo de trabajo
En la página SharePoint, haga clic en el botón Inicio y, a continuación, muestre la lista Documentos compartidos del sitio de SharePoint haciendo clic en el vínculo Documentos compartidos en la barra de inicio rápido.
Cargue un nuevo documento en la lista Documentos compartidos haciendo clic en el vínculo Documentos de la pestaña Herramientas de biblioteca en la parte superior de la página y haciendo clic a continuación en el botón Cargar documento de la cinta de opciones.
Señale el documento cargado para mostrar una flecha de lista desplegable. Haga clic en la lista desplegable y seleccione Flujos de trabajo.
Haga clic en la imagen junto a ExpenseReportWorkflow.
Esto muestra el formulario de iniciación del flujo de trabajo. (Observe que el valor mostrado en el cuadro Límite de aprobación automática es de solo lectura porque se escribió en el formulario de asociación).
En el cuadro de texto Total gastos escriba 1600 y, a continuación, haga clic en Iniciar flujo de trabajo.
Esto muestra la lista Documentos compartidos de nuevo. Una nueva columna denominada ExpenseReportWorkflow con el valor Completado se agrega al elemento que el flujo de trabajo acaba de iniciar.
Haga clic en la flecha de lista desplegable situada junto al documento cargado y, a continuación, haga clic en Flujos de trabajo para mostrar la página de estado del flujo de trabajo. Haga clic en el valor Completado en Flujos de trabajo completados. La tarea aparece bajo la sección Tareas.
Haga clic en el título de la tarea para mostrar sus detalles.
Regrese a la lista Documentos compartidos y reinicie el flujo de trabajo utilizando el mismo documento u otro diferente.
Escriba una cantidad en la página de iniciación que sea menor o igual que la cantidad escrita en la página de asociación (1200).
Cuando esto se produce, se crea una entrada en la lista de historial en lugar de una tarea. La entrada muestra en la sección Historial del flujo de trabajo de la página de estado del flujo de trabajo. Observe el mensaje de la columna Resultado del evento de historial. Contiene el texto escrito en el evento logToHistoryListActivity1.MethodInvoking que incluye la cantidad aprobada automáticamente.
Pasos siguientes
Puede aprender más acerca de la creación de plantillas de flujo de trabajo en estos temas:
- Para obtener más información sobre los flujos de trabajo de SharePoint, vea Flujos de trabajo en Windows SharePoint Services.
Vea también
Tareas
Tutorial: Agregar una página de aplicación a un flujo de trabajo