Problembehandlung bei Ereignissen

Letzte Änderung: Freitag, 9. April 2010

Gilt für: SharePoint Foundation 2010

Inhalt dieses Artikels
Dokumentbibliotheken und Inhaltstypen
Listen und Inhaltstypen
Dokumentbibliotheken
Webs

Das Programmieren von Ereignissen kann abhängig vom Kontext, in dem Sie die Ereignishandler implementieren, zu außergewöhnlichem Verhalten führen. Im Folgenden wird das Verhalten von Ereignissen in bestimmten Kontexten beschrieben, die beim Schreiben von Code auftreten können.

Die Ereignisverhalten werden in vier Kategorien unterteilt:

  • Dokumentbibliotheken und Inhaltstypen

  • Listen und Inhaltstypen

  • Dokumentbibliotheken

  • Webs

Dokumentbibliotheken und Inhaltstypen

PROBLEM

BESCHREIBUNG

PROBLEM 1

In einer Dokumentbibliothek wird eine ASPX-Seite eines bestimmten Inhaltstyps erstellt. Der Seite werden ItemAdding- und ItemAdded-Ereignisse zugeordnet. Diese Ereignisse werden jedoch nicht ausgelöst.

Lösung: Beim Hochladen einer Datei in eine Dokumentbibliothek wird der Datei ein Standardinhaltstyp zugewiesen. Wenn Sie eine Datei hochladen und ihr dann einen Inhaltstyp zuweisen, z. B. Inhaltstyp "A", ändern Sie tatsächlich den Inhaltstyp der Datei vom Standard in den Inhaltstyp "A", nachdem sie der Dokumentbibliothek hinzugefügt wurde.

Wenn in diesem Szenario der Inhaltstyp "A" Ereignisbindungen zu ItemAdding/ItemAdded und ItemUpdating/ItemUpdated aufweist, werden die ItemAdding/ItemAdded-Ereignisse nicht ausgelöst, wenn Sie der Datei den neuen Inhaltstyp "A" zuweisen. Stattdessen werden in diesem Szenario die ItemUpdating/ItemUpdated-Ereignisse ausgelöst.

Wird die Datei dagegen direkt aus dem Inhaltstyp mithilfe des Features Neues Dokument statt durch Hochladen des Dokuments erstellt, werden die ItemAdding/ItemAdded-Ereignisse und auch das ItemUpdating-Ereignis erfolgreich ausgelöst.

PROBLEM 2

Ein ItemAdding-Ereignis, das an einen Inhaltstyp gebunden ist, wird auch beim Upload von Dokumenten eines anderen Inhaltstyps ausgelöst. Beachten Sie, dass jedem Dokument beim Upload in eine Dokumentbibliothek zunächst der Standardinhaltstyp zugewiesen wird. Daher werden jedes Mal, wenn Sie einer Dokumentbibliothek ein Dokument hinzufügen, die ItemAdding\ItemAdded-Ereignisse ausgelöst, falls diese Ereignisse an den Standardinhaltstyp gebunden sind.

Lösung: Der Inhaltstyp des Dokuments kann in der Updatephase geändert werden. Der Inhaltstypbezeichner (ID) wird entsprechend angepasst.

PROBLEM 3

In einer Anforderung zum Löschen eines Elements über ein Listenformular wird keine zugeordnete Inhaltstyp-ID angegeben. Daher werden die Ereignisse ItemDeleting und ItemDeleted für alle Listenelemente ausgelöst, nicht nur für Elemente eines bestimmten Inhaltstyps. Dies kann vorkommen, obwohl das Ereignis nur für den angegebenen Inhaltstyp registriert wurde.

Lösung: In SharePoint Foundation werden entwurfsbedingt Ereignisse für alle Listenelemente ausgelöst, wenn die Anforderung nicht an einen Inhaltstyp gebunden ist. So kann ein Ereignis für alle Elemente ausgelöst werden, wenn der Ereignisempfänger für alle Elemente in der Liste registriert ist.

Dieses Verhalten hat Auswirkungen auf Richtlinien, die Delete-Ereignisse betreffen. Wenn Sie eine Richtlinie bezüglich der Löschung implementieren, die Richtlinie auf einen Inhaltstyp anwenden und dann den Inhaltstyp an eine Liste binden, gilt die Richtlinie für alle Elemente in der Liste, nicht nur für die Elemente von dem Inhaltstyp, auf den die Richtlinie angewendet wurde.

Listen und Inhaltstypen

PROBLEM

BESCHREIBUNG

PROBLEM 1

Wenn Sie das ItemUpdating-Ereignis für einen Inhaltstyp registrieren, der an eine Liste gebunden ist, tritt das Ereignis auch auf, wenn Elemente von einem anderen Inhaltstyp über das Objektmodell aktualisiert werden. Beachten Sie, dass SharePoint Foundation 0 (Null) als Inhaltstyp-ID zurückgibt und nicht die Inhaltstyp-ID des Elements.

Lösung: Keine.

PROBLEM 2

Listenereignisse werden für den UserInformation-Listentyp nicht ausgelöst.

Lösung: Keine.

Dokumentbibliotheken

PROBLEM

BESCHREIBUNG

PROBLEM 1

Beim Hinzufügen eines neuen Inhaltstyps zu einer Liste, an die Ereignisse gebunden sind, werden möglicherweise einige dieser Ereignisse ausgelöst, da am Binden eines Inhaltstyps an eine Liste weitere Faktoren beteiligt sein können, beispielsweise das Hinzufügen von Dateien (wie Template.doc), das Aktualisieren von Dokumenten oder das Hinzufügen neuer Felder.

Lösung: Dieses Verhalten tritt nur für die Bibliothek Freigegebene Dokumente auf und nicht für benutzerdefinierten Dokumentbibliotheken. Für Freigegebene Dokumente wird beim Hinzufügen eines Inhaltstyps ein Ordner Forms/<Content Type> erstellt und eine Datei Template.doc in diesen Ordner kopiert. Dadurch werden die Ereignisse ausgelöst.

PROBLEM 2

Beim Hinzufügen eines Dokuments zu einer Dokumentbibliothek in der Exploreransicht mit WebDAV werden die Methoden ItemAdding(SPItemEventProperties) und ItemAdded(SPItemEventProperties) ein Mal aufgerufen, die Methoden ItemUpdating(SPItemEventProperties) und ItemUpdated(SPItemEventProperties) jedoch zwei Mal.

Lösung: Keine. Dieses Verhalten ist entwurfsbedingt, da interne Prozesse, die am Hinzufügen einer Datei in der Explorer-Ordneransicht beteiligt sind, den zweimaligen Aufruf dieser Methoden erforderlich machen.

PROBLEM 3

Beim Umbenennen einer Datei in einer Dokumentbibliothek mit WebDAV in der Exploreransicht löst das Umbenennungsereignis nicht die Ereignisse ItemUpdating(SPItemEventProperties) und ItemUpdated(SPItemEventProperties) aus, sofern Sie beim Umbenennen der Datei nicht auch die Dateierweiterung ändern.

Lösung: Keine.

Webs

PROBLEM

BESCHREIBUNG

PROBLEM 1

Für die Methoden WebAdding(SPWebEventProperties) und WebProvisioned(SPWebEventProperties) ist die ServerRelativeUrl-Eigenschaft leer, wenn es sich bei der übergeordneten Website um die Stammwebsite handelt.

Lösung: Der richtige Wert für die ServerRelativeUrl-Eigenschaft eines WebAdding-Ereignisses ist die URL der übergeordneten Website. Für ein WebProvisioned-Ereignis ist der richtige Wert die URL der neu erstellten Unterwebsite.

PROBLEM 2

Nach dem Festlegen des Ereignisempfängerstatus in einem Ereignis WebDeleting(SPWebEventProperties) oder SiteDeleting(SPWebEventProperties) auf CancelNoError erfolgt eine Umleitung auf eine Fehlerseite mit dem Hinweis, dass die Website gelöscht wurde.

Lösung: Keine. Das Steuerelement gibt einfach den Aufrufer zurück, nachdem das Ereignis ausgelöst wurde. Die Website wurde nicht gelöscht.

PROBLEM 3

Nach dem Festlegen des Ereignisempfängerstatus in einem FieldAdding(SPWebEventProperties)-Ereignis auf CancelNoError erfolgt beim Hinzufügen eines Felds zu einer Liste eine Umleitung auf eine Fehlerseite mit dem Hinweis, dass die Spalte nicht vorhanden ist.

Lösung: Keine. Das Steuerelement gibt einfach den Aufrufer zurück, nachdem das Ereignis ausgelöst wurde. Die Spalte wurde nicht gelöscht.

PROBLEM 4

Nach dem Festlegen des Ereignisempfängerstatus in einem ItemAttachmentDeleting(SPWebEventProperties)-Ereignis auf CancelNoError erfolgt eine Umleitung auf eine Fehlerseite mit dem Fehler "Ausnahme von HRESULT", wenn Sie versuchen, eine Anlage von einem Element zu entfernen.

Lösung: Keine. Das Steuerelement gibt einfach den Aufrufer zurück, nachdem das Ereignis ausgelöst wurde.