Compartir a través de


Tutorial: Crear una actividad de flujo de trabajo personalizada

En este tutorial se muestra cómo crear una actividad personalizada para un flujo de trabajo de nivel de sitio con Visual Studio. (Los flujos de trabajo de nivel de sitio se aplican al sitio entero, no solo a una lista del sitio.) La actividad personalizada crea una lista Anuncios auxiliar y copia el contenido de la lista Anuncios en ella.

En este tutorial se muestran las siguientes tareas:

  • Crear un flujo de trabajo de nivel de sitio.

  • Crear una actividad de flujo de trabajo personalizada.

  • Crear y eliminar una lista de SharePoint.

  • Copiar los elementos de una lista en otra.

  • Mostrar una lista en la barra de inicio rápido.

Nota

Es posible que su equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio incluidos en las instrucciones siguientes. La edición de Visual Studio que se tenga y la configuración que se utilice determinan estos elementos. Para obtener más información, vea Valores de configuración de Visual Studio.

Requisitos previos

Necesita los componentes siguientes para completar este tutorial:

Crear un proyecto de actividad personalizada de flujo de trabajo del sitio

Primero, cree un proyecto para hospedar y probar la actividad de flujo de trabajo personalizada.

Para crear un proyecto de actividad personalizada de flujo de trabajo del sitio

  1. Muestre el cuadro de diálogo Nuevo proyecto señalando Nuevo en el menú Archivo y haciendo clic en Nuevo proyecto.

  2. Expanda el nodo SharePoint bajo Visual C# o bajo Visual Basic y, a continuación, haga clic en 2010.

  3. En el recuadro Plantillas, seleccione Flujo de trabajo secuencial.

  4. En el cuadro Nombre, escriba AnnouncementBackup y, a continuación, haga clic en Aceptar.

    Aparece el Asistente para la personalización de SharePoint.

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

  6. En la página Especifique el nombre del flujo de trabajo de depuración, acepte el nombre predeterminado (AnnouncementBackup - Workflow1). Cambie el tipo de plantilla de flujo de trabajo por Flujo de trabajo de sitio y, a continuación, haga clic en Siguiente.

  7. Haga clic en Finalizar para aceptar los valores predeterminados restantes.

Agregar una clase de actividad de flujo de trabajo personalizada

A continuación, agregue una clase al proyecto para el código de la actividad de flujo de trabajo personalizada.

Para agregar una clase de actividad de flujo de trabajo personalizada

  1. Haga clic en Agregar nuevo elemento en el menú Proyecto para mostrar el cuadro de diálogo Agregar nuevo elemento.

  2. En la vista de árbol Plantillas instaladas, haga clic en el nodo Código y, a continuación, haga clic en Clase en la lista de plantillas de elementos de proyecto. Utilice el nombre predeterminado Class1.

  3. Reemplace el código de Class1 por el código siguiente:

    Imports System
    Imports System.Collections.Generic
    Imports System.Linq
    Imports System.Text
    Imports Microsoft.SharePoint
    
    Namespace AnnouncementBackup
        ' This custom activity will back up all of the announcements 
        ' in the Announcements list on the SharePoint site.
        Public Class Class1
            Inherits System.Workflow.ComponentModel.Activity
            Public Sub New()
                MyBase.New()
            End Sub
    
            ' Triggers when the activity is executed.
            Protected Overrides Function Execute(ByVal executionContext As System.Workflow.ComponentModel.ActivityExecutionContext) As System.Workflow.ComponentModel.ActivityExecutionStatus
                Try
                    ' Get a reference to the SharePoint site.
                    Dim site As SPSite = New SPSite(("http://" + System.Environment.MachineName))
                    Dim web As SPWeb = site.OpenWeb("/")
                    ' Reference the original Announcements list.
                    Dim aList As SPList = web.GetList("/Lists/Announcements")
                    ' If the Announcements Backup list already exists, delete it.
                    Try
                        Dim bList As SPList = web.GetList("/Lists/Announcements Backup")
                        bList.Delete()
                    Catch
                    End Try
                    ' Create a new backup Announcements list and reference it.
                    Dim newAnnID As Guid = web.Lists.Add("Announcements Backup", "A backup Announcements list.", SPListTemplateType.Announcements)
                    Dim bakList As SPList = web.Lists(newAnnID)
                    ' Copy announcements from original to backup Announcements list.
                    For Each item As SPListItem In aList.Items
                        Dim newAnnItem As SPListItem = bakList.Items.Add
                        For Each field As SPField In aList.Fields
                            If Not field.ReadOnlyField Then
                                newAnnItem(field.Id) = item(field.Id)
                            End If
                        Next
                        newAnnItem.Update()
                    Next
                    ' Put the Backup Announcements list on the QuickLaunch bar.
                    bakList.OnQuickLaunch = True
                    bakList.Update()
                Catch errx As Exception
                    System.Diagnostics.Debug.WriteLine(("Error: " + errx.ToString))
                End Try
                Return MyBase.Execute(executionContext)
            End Function
        End Class
    End Namespace
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.SharePoint;
    
    namespace AnnouncementBackup
    {
        // This custom activity will back up all of the announcements in 
        // the Announcements list on the SharePoint site.
        public class Class1 : System.Workflow.ComponentModel.Activity
            {
            public Class1()
            { }
    
            // Triggers when the activity is executed.
            protected override System.Workflow.ComponentModel.ActivityExecutionStatus Execute(System.Workflow.ComponentModel.ActivityExecutionContext executionContext)
            {
                try
                {
                    // Get a reference to the SharePoint site.
                    SPSite site = new SPSite("http://" + System.Environment.MachineName);
                    SPWeb web = site.OpenWeb("/");
    
                    // Reference the original Announcements list.
                    SPList aList = web.GetList("/Lists/Announcements");
    
                    // If the Announcements Backup list already exists, delete it.
                    try
                    {
                        SPList bList = web.GetList("/Lists/Announcements Backup");
                        bList.Delete();
                    }
                    catch
                    { }
    
                    // Create a new backup Announcements list and reference it.
                    Guid newAnnID = web.Lists.Add("Announcements Backup", "A backup Announcements list.", SPListTemplateType.Announcements);
                    SPList bakList = web.Lists[newAnnID];
    
                    // Copy announcements from original to backup Announcements list.
                    foreach (SPListItem item in aList.Items)
                    {
                        SPListItem newAnnItem = bakList.Items.Add();
                        foreach (SPField field in aList.Fields)
                        {
                            if (!field.ReadOnlyField)
                                newAnnItem[field.Id] = item[field.Id];
                        }
                        newAnnItem.Update();
                    }
    
                    // Put the Backup Announcements list on the QuickLaunch bar.
                    bakList.OnQuickLaunch = true;
                    bakList.Update();
    
                }
    
                catch (Exception errx)
                {
                    System.Diagnostics.Debug.WriteLine("Error: " + errx.ToString());
                }
    
                return base.Execute(executionContext);
            }
    
    
        }
    }
    
  4. Guarde el proyecto y haga clic en Generar solución en el menú Generar.

    Class1 aparece como una acción personalizada en el Cuadro de herramientas de la pestaña Flujo de trabajo de SharePoint en el Cuadro de herramientas.

Agregar la actividad personalizada al flujo de trabajo del sitio

A continuación agregue una actividad al flujo de trabajo para que contenga el código personalizado.

Para agregar la actividad personalizada al flujo de trabajo de sitio

  1. Abra el Workflow1 en el diseñador de flujos de trabajo en la Vista de diseño.

  2. Haga clic y arrastre Class1 del Cuadro de herramientas y colóquelo en la actividad onWorkflowActivated1.

  3. Guarde el proyecto.

Probar la actividad personalizada de flujo de trabajo de sitio

A continuación, ejecute el proyecto e inicie el flujo de trabajo del sitio. La actividad personalizada crea una lista Anuncios auxiliar y copia el contenido de la lista Anuncios en ella. El código también comprueba si ya existe una lista auxiliar antes de crear otra. Si existe una, se elimina. El código también agrega un vínculo a la nueva lista en la barra de inicio rápido del sitio de SharePoint.

Para probar la actividad personalizada de flujo de trabajo del sitio

  1. Presione F5 para ejecutar el proyecto e implementarlo en SharePoint.

  2. En la barra de inicio rápido, haga clic en Listas para mostrar todas las listas disponible en el sitio de SharePoint. Observe que hay una única lista para los anuncios denominada Anuncios.

  3. En la parte superior de la página web de SharePoint, haga clic en el botón Acciones del sitio y, a continuación, haga clic en Flujos de trabajo del sitio.

  4. Bajo la sección Iniciar un nuevo flujo de trabajo, haga clic en el vínculo de AnnouncementBackup - Workflow1. Esto inicia el flujo de trabajo del sitio y ejecuta el código de la acción personalizada.

  5. Haga clic en el vínculo llamado Announcements Backup que aparece en la barra de inicio rápido. Observe que todos los anuncios que contiene la lista Anuncios se han copiado en esta nueva lista.

Vea también

Tareas

Cómo: Crear un receptor de eventos

Otros recursos

Desarrollar soluciones de SharePoint