Freigeben über


Binden eines Ereignishandlers mithilfe des SharePoint-Objektmodells

Letzte Änderung: Donnerstag, 8. April 2010

Gilt für: SharePoint Foundation 2010

Sie können einen SharePoint Foundation-Ereignishandler mithilfe von Ereignisempfänger-Basisklassen im SharePoint Foundation-Objektmodell binden. Das Ziel in diesem Codebeispiel ist es, das ItemAdded-Ereignis, das in Erstellen eines Ereignishandlers erstellt wurde, an eine SPSite-Instanz zu binden.

HinweisHinweis

Microsoft Visual Studio 2010 bietet Projekttypen, bei denen viele der folgenden Aufgaben bei der Erstellung von SharePoint-Ereignissen automatisch ausgeführt werden. Trotzdem werden die folgenden Codebeispiele angeführt, um die Mechanismen zum Erstellen und Binden von Ereignissen zu veranschaulichen.

Erstellen des Bindungscodeprojekts

Öffnen Sie Microsoft Visual Studio, und erstellen Sie ein grundlegendes Konsolenanwendungsprojekt mit dem Namen BindItemEvents. Erstellen Sie dann eine einzelne Klasse mit dem Namen Program.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Microsoft.SharePoint;

namespace BindItemEvents
{
    class Program
    {
        static void Main(string[] args)

Als Nächstes müssen Sie Verweise auf Ihre Website und Webobjekte erstellen. Beachten Sie, dass Verweise auf die Website und die Webobjekte mit der using-Anweisung eingerichtet werden. Der Grund dafür ist, dass von dieser automatisch die Dispose()-Methode für die Objekte aufgerufen wird, nachdem der Codeblock ausgeführt wurde. Alternativ können Sie Instanzen der Website und der Webobjekte im Codeblock erstellen. Allerdings müssen Sie in diesem Fall sicherstellen, dass diese Objekt freigegeben werden, sobald sie nicht mehr benötigt werden.

        {
            using (SPSite site = new SPSite("https://localhost")) 
            {
                using (SPWeb web = site.OpenWeb())

Jetzt erstellen wir eine Liste im Web, auf das wir einen Verweis erstellt haben, d. h. die Dokumentbibliothek mit dem Namen "Shared Documents". Anschließend binden Sie die Ereignisempfängerdefinition.

{
                    SPList list = web.Lists["Shared Documents"];

                    SPEventReceiverDefinition def = list.EventReceivers.Add();

Beachten Sie jedoch, dass das Hinzufügen des Ereignisempfängers, EventReceivers, nicht ausreicht. Die Bindungsaktion erfordert auch das Bereitstellen von Eigenschaftswerten, um den Empfänger zu definieren:

    def.Assembly = "ERDefinition, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=704f58d28567dc00";
    def.Class = "ERDefinition.ItemEvents";
    def.Name = "ItemAdded Event";
    def.Type = SPEventReceiverType.ItemAdded;
    def.SequenceNumber = 1000;
    def.Synchronization = SPEventReceiverSynchronization.Synchronous;
    def.Update();

Im obigen Codebeispiel sind die am häufigsten verwendeten Eigenschaftswerte angegeben. Eine vollständige Liste der verfügbaren Eigenschaften (und Dokumentation für alle Eigenschaften) finden Sie unter SPEventReceiverDefinition. Die wichtigste Eigenschaft und eine, die in allen Fällen erforderlich ist, ist jedoch die Type-Eigenschaft – in diesem Fall ItemAdded. Sie müssen auch die Assembly mit der Assembly-Eigenschaft angeben und die Klasse – in diesem Fall ERDefinition.ItemEvents, die Sie bereits erstellt haben sollten (wie unter Erstellen eines Ereignishandlers beschrieben).

Beachten Sie, dass der Name der Assembly mit einem starken Namen angegeben wird. (Sie erhalten den starken Assemblynamen, indem Sie die Assembly im globalen Assemblycache (GAC) suchen und die Eigenschaften der Assembly verfügbar machen.) Beachten Sie außerdem, dass bei dem starken Assemblynamen die Groß-/Kleinschreibung beachtet wird. Verwenden Sie die SequenceNumber-Eigenschaft, um die Reihenfolge anzugeben, in der Ereignisse ausgelöst werden, falls eine Aktion mehrere Ereignisse auslöst. Mit der Synchronization-Eigenschaft können Sie angeben, ob das Ereignis synchron oder asynchron ist. Abschließend führen Sie die Update()-Methode aus.

Codeauflistung

Im Folgenden finden Sie die vollständige Codeauflistung für die oben beschriebene Aktivität.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Microsoft.SharePoint;

namespace BindItemEvents
{
    class Program
    {
        static void Main(string[] args)
        {
            using (SPSite site = new SPSite("https://localhost")) 
            {
                using (SPWeb web = site.OpenWeb())
                {
                    SPList list = web.Lists["Shared Documents"];

                    SPEventReceiverDefinition def = list.EventReceivers.Add();

                    def.Assembly = "ERDefinition, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=704f58d28567dc00";
                    def.Class = "ERDefinition.ItemEvents";
                    def.Name = "ItemAdded Event";
                    def.Type = SPEventReceiverType.ItemAdded;
                    def.SequenceNumber = 1000;
                    def.Synchronization = SPEventReceiverSynchronization.Synchronous;
                    def.Update();
                }
            }
        }
    }
}

Siehe auch

Aufgaben

Gewusst wie: Erstellen eines Ereignishandlerfeatures

Konzepte

Binden eines SharePoint Foundation-Ereignishandlers

Binden von Ereignishandlern mithilfe von Features.xml in SharePoint