Procedura dettagliata: creare un'attività personalizzata per un flusso di lavoro del sito

In questa procedura dettagliata viene illustrato come creare un'attività personalizzata per un flusso di lavoro a livello di sito utilizzando Visual Studio. I flussi di lavoro a livello di sito si applicano a tutto il sito, non solo a un relativo elenco. L'attività personalizzata consente di creare un elenco Annunci di backup e successivamente di copiarvi il contenuto dell'elenco originale.

In questa procedura dettagliata vengono illustrate le attività seguenti:

  • Creazione di un flusso di lavoro a livello di sito.

  • Creazione di un'attività di flusso di lavoro personalizzata.

  • Creazione ed eliminazione di un elenco di SharePoint.

  • Copia di elementi da un elenco a un altro.

  • Visualizzazione di un elenco nella barra Avvio veloce.

Nota

Nel computer in uso è possibile che vengano visualizzati nomi o percorsi diversi per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti. La versione di Visual Studio in uso e le impostazioni configurate determinano questi elementi. Per ulteriori informazioni vedere Impostazioni di Visual Studio.

Prerequisiti

Per completare la procedura dettagliata, è necessario disporre dei componenti seguenti:

Creazione di un progetto di attività personalizzata per un flusso di lavoro del sito

Creare un progetto per gestire e testare l'attività personalizzata per un flusso di lavoro.

Per creare un progetto di attività personalizzata per un flusso di lavoro del sito

  1. Visualizzare la finestra di dialogo Nuovo progetto selezionando Nuovo nel menu File, quindi fare clic su Nuovo progetto.

  2. Espandere il nodo SharePoint sotto Visual C# o Visual Basic, quindi fare clic su 2010.

  3. Nel riquadro Modelli selezionare Flusso di lavoro sequenziale.

  4. Nella casella di testo Nome digitare AnnouncementBackup e fare clic su OK.

    Viene visualizzata la Personalizzazione guidata SharePoint.

  5. Nella pagina Selezionare il sito locale da utilizzare per il debug fare clic su Avanti per accettare il sito predefinito.

    Questo passaggio consente anche di impostare il livello di attendibilità per la soluzione come soluzione della farm, ovvero l'unica opzione disponibile per i progetti flusso di lavoro.

  6. Nella pagina Specificare il nome del flusso di lavoro per il debug accettare il nome predefinito (AnnouncementBackup - Workflow1). Modificare il tipo di modello di flusso di lavoro in Flusso di lavoro sito, quindi fare clic su Avanti.

  7. Scegliere Fine per accettare le impostazioni predefinite rimanenti.

Aggiunta di una classe di attività personalizzata per un flusso di lavoro

Aggiungere al progetto una classe in cui sarà contenuto il codice per l'attività personalizzata del flusso di lavoro.

Per aggiungere una classe di attività personalizzata per un flusso di lavoro

  1. Fare clic su Aggiungi nuovo elemento nel menu Progetto per visualizzare la finestra di dialogo Aggiungi nuovo elemento.

  2. Nella visualizzazione struttura ad albero Modelli installati fare clic sul nodo Codice, quindi selezionare Classe nell'elenco di modelli di elementi di progetto. Utilizzare il nome predefinito Class1.

  3. Sostituire tutto il codice in Class1 con quanto riportato di seguito:

    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. Salvare il progetto, quindi scegliere Compila soluzione dal menu Compilazione.

    La classe Class1 viene visualizzata come un'azione personalizzata nella Casella degli strumenti sotto la scheda Flusso di lavoro di SharePoint.

Aggiunta dell'attività personalizzata al flusso di lavoro del sito

Aggiungere al flusso di lavoro un'attività in cui sarà contenuto il codice personalizzato.

Per aggiungere un'attività personalizzata al flusso di lavoro del sito

  1. Aprire Workflow1 in Progettazione flussi di lavoro nella visualizzazione Progettazione.

  2. Selezionare e trascinare Class1 dalla casella degli strumenti all'attività onWorkflowActivated1.

  3. Salvare il progetto.

Test dell'attività personalizzata per un flusso di lavoro del sito

Eseguire il progetto e avviare il flusso di lavoro del sito. L'attività personalizzata consente di creare un elenco Annunci di backup e di copiarvi il contenuto dell'elenco originale. Il codice permette inoltre di controllare se è già presente un elenco di backup prima di creare uno; in tal caso l'elenco viene eliminato. Il codice consente anche di aggiungere un collegamento al nuovo elenco nella barra Avvio veloce del sito di SharePoint.

Per testare l'attività personalizzata per un flusso di lavoro del sito

  1. Premere F5 per eseguire e distribuire il progetto in SharePoint.

  2. Nella barra Avvio veloce fare clic su Elenchi per visualizzare tutti gli elenchi disponibili nel sito di SharePoint. Notare che è presente un solo elenco per gli annunci denominato Annunci.

  3. Nella parte superiore della pagina Web di SharePoint fare clic sul pulsante Azioni sito, quindi scegliere Flussi di lavoro sito.

  4. Nella sezione Avvio di un nuovo flusso di lavoro fare clic sul collegamento per AnnouncementBackup - Workflow1. Questa operazione comporta l'avvio del flusso di lavoro del sito e l'esecuzione del codice nell'azione personalizzata.

  5. Fare clic sul collegamento denominato Backup annunci presente sulla barra Avvio veloce. Notare che tutti gli annunci contenuti nell'elenco Annunci sono stati copiati in questo nuovo elenco.

Vedere anche

Attività

Procedura: creare un ricevitore di eventi

Altre risorse

Sviluppo di soluzioni SharePoint