Exemplarische Vorgehensweise: Erstellen einer benutzerdefinierten Websiteworkflowaktivität

In dieser exemplarischen Vorgehensweise wird veranschaulicht, wie mit Visual Studio eine benutzerdefinierte Aktivität für einen Workflow auf Websiteebene erstellt wird. (Workflows auf Websiteebene gelten für die gesamte Website und nicht nur für eine Liste der Website.) Die benutzerdefinierte Aktivität erstellt eine Sicherungskopie der Ankündigungsliste, in die dann der Inhalt der Ankündigungsliste kopiert wird.

Diese exemplarische Vorgehensweise enthält die folgenden Aufgaben:

  • Erstellen eines Workflows auf Websiteebene.

  • Erstellen einer benutzerdefinierten Workflowaktivität.

  • Erstellen und Löschen einer SharePoint-Liste.

  • Kopieren von Elementen aus einer Liste in eine andere.

  • Anzeigen einer Liste auf der Schnellstartleiste.

Tipp

Ihr Computer zeigt möglicherweise für einige der Elemente der Visual Studio-Benutzeroberfläche in der folgenden Anleitung andere Namen oder Standorte an. Diese Elemente sind von der jeweiligen Visual Studio-Version und den verwendeten Einstellungen abhängig. Weitere Informationen finden Sie unter Visual Studio-Einstellungen.

Vorbereitungsmaßnahmen

Zum Durchführen dieser exemplarischen Vorgehensweise benötigen Sie die folgenden Komponenten:

Erstellen eines benutzerdefinierten Websiteworkflow-Aktivitätsprojekts

Erstellen Sie zunächst ein Projekt, um die benutzerdefinierte Workflowaktivität zu speichern und zu testen.

So erstellen Sie ein benutzerdefiniertes Websiteworkflow-Aktivitätsprojekt

  1. Zeigen Sie das Dialogfeld Neues Projekt an, indem Sie im Menü Datei auf Neu zeigen und dann auf Neues Projekt klicken.

  2. Erweitern Sie unter Visual C# oder Visual Basic den Knoten SharePoint, und klicken Sie dann auf 2010.

  3. Wählen Sie im Bereich Vorlagen die Vorlage Sequenzieller Workflow aus.

  4. Geben Sie im Feld Name den Namen "AnnouncementBackup" ein, und klicken Sie dann auf OK.

    Der Assistent zum Anpassen von SharePoint wird angezeigt.

  5. Klicken Sie auf der Seite Welche lokale Website soll zum Debuggen verwendet werden? auf Weiter, um die Standardsite zu übernehmen.

    In diesem Schritt wird auch die Vertrauensebene für die Lösung als Farmlösung festgelegt, wobei es sich um die einzige verfügbare Option für Workflowprojekte handelt.

  6. Akzeptieren Sie auf der Seite Workflownamen für das Debugging angeben den Standardnamen (AnnouncementBackup - Workflow1). Ändern Sie den Workflowvorlagentyp in Websiteworkflow, und klicken Sie dann auf Weiter.

  7. Klicken Sie auf Fertig stellen, um die verbleibenden Standardeinstellungen zu akzeptieren.

Hinzufügen einer benutzerdefinierten Workflowaktivitätsklasse

Fügen Sie dem Projekt danach eine Klasse hinzu, die den Code für die benutzerdefinierte Workflowaktivität enthalten soll.

So fügen Sie eine benutzerdefinierte Workflowaktivitätsklasse hinzu

  1. Klicken Sie im Menü Projekt auf Neues Element hinzufügen, um das Dialogfeld Neues Element hinzufügen anzuzeigen.

  2. Klicken Sie in der Strukturansicht Installierte Vorlagen auf den Knoten Code, und klicken Sie dann in der Liste der Projektelementvorlagen auf Klasse. Verwenden Sie den Standardnamen Class1.

  3. Ersetzen Sie den gesamten Code in Class1 durch den folgenden Code:

    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. Speichern Sie das Projekt, und klicken Sie dann im Menü Erstellen auf Projektmappe erstellen.

    Class1 wird in der Toolbox unter der Registerkarte SharePoint-Workflow als benutzerdefinierte Aktion angezeigt.

Hinzufügen der benutzerdefinierten Aktivität zum Websiteworkflow

Fügen Sie dem Workflow danach eine Aktivität hinzu, die den benutzerdefinierten Code enthalten soll.

So fügen Sie dem Websiteworkflow eine benutzerdefinierte Aktivität hinzu

  1. Öffnen Sie Workflow1 im Workflow-Designer in der Entwurfsansicht.

  2. Klicken Sie in der Toolbox auf Class1, ziehen Sie Class1, und legen Sie Class1 unter der onWorkflowActivated1-Aktivität ab.

  3. Speichern Sie das Projekt.

Testen der benutzerdefinierten Websiteworkflowaktivität

Führen Sie danach das Projekt aus, und starten Sie den Websiteworkflow. Die benutzerdefinierte Aktivität erstellt eine Sicherungskopie der Ankündigungsliste, in die dann der Inhalt der aktuellen Ankündigungsliste kopiert wird. Der Code überprüft vor dem Erstellen einer Sicherungsliste auch, ob bereits eine vorhanden ist. Wenn bereits eine Sicherungsliste vorhanden ist, wird diese gelöscht. Im Code wird außerdem auf der Schnellstartleiste der SharePoint-Website ein Link zur neuen Liste hinzugefügt.

So testen Sie die benutzerdefinierte Websiteworkflowaktivität

  1. Drücken Sie F5, um das Projekt auszuführen und in SharePoint bereitzustellen.

  2. Klicken Sie auf der Schnellstartleiste auf Listen, um alle in der SharePoint-Website verfügbaren Listen anzuzeigen. Beachten Sie, dass für Ankündigungen nur eine Liste mit dem Namen Ankündigungen vorhanden ist.

  3. Klicken Sie am oberen Rand der SharePoint-Webseite auf die Schaltfläche Websiteaktionen und dann auf Websiteworkflows.

  4. Klicken Sie unter dem Abschnitt Neuen Workflow starten auf den Link für AnnouncementBackup - Workflow1. Hiermit wird der Websiteworkflow gestartet und der Code in der benutzerdefinierten Aktion ausgeführt.

  5. Klicken Sie auf den Link mit dem Namen AnnouncementBackup, der auf der Schnellstartleiste angezeigt wird. Beachten Sie, dass alle in der Liste Ankündigungen enthaltenen Ankündigungen in diese neue Liste kopiert wurden.

Siehe auch

Aufgaben

Gewusst wie: Erstellen eines Ereignisempfängers

Weitere Ressourcen

Entwickeln von SharePoint-Lösungen