ItemUpdated wird nicht ausgelöst, wenn ein Dokument zur nicht standardmäßigen Dokumentbibliothek hinzugefügt wird

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/98830

Frage

Ich habe einen Artikelempfänger, der implementiert ItemUpdated() um ein Element zu verarbeiten, nachdem es in eine Dokumentbibliothek hochgeladen wurde.Alles funktioniert einwandfrei, wenn ich Dokumente zur Standardbibliothek "Freigegebene Dokumente" hinzufüge - wenn ein neues Dokument hinzugefügt wird, ItemUpdated() wird normal ausgelöst.Wenn ich jedoch eine erstelle neue Dokumentbibliothek in der gleichen Websitesammlung, ItemUpdated() wird nicht ausgelöst, wenn ich ein neues Dokument hochlade.Aber wenn ich eine andere Version hochlade oder das Dokument umbenenne usw., ItemUpdated() wird normal ausgelöst - es wird nur beim Hochladen von Elementen nicht ausgelöst.Hausbeispiel:

  • Ich lade 'doc1' in die Dokumentbibliothek hoch - ItemUpdated() tut es nicht ausführen (wird jedoch ausgeführt, wenn die Dokumentbibliothek "Freigegebene Dokumente" ist);
  • Ich lade eine andere Version von 'doc1' hoch - ItemUpdated() wird ausgeführt als erwartenden;
  • Ich benenne 'doc1' um - ItemUpdated() wird wie erwartet ausgeführt.

Ich wurde zu der Annahme verleitet, dass die Reihenfolge der Ereignisse beim Hinzufügen eines Dokuments normalerweise ist:

hinzufügen - hinzugefügt - aktualisieren - aktualisiert

Warum ist mein ItemUpdated() wird für andere Bibliotheken als "Freigegebene Dokumente" nicht ausgelöst?Gibt es eine Einstellung, die dies verursachen könnte?

Beachten Sie, dass ich die Verarbeitung aus verschiedenen Gründen nicht im Inneren durchführen kann ItemAdded().

Schlüsselelemente.XML:

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Receivers ListTemplateId="101">
    <Receiver>
      <Name>MyEventReceiverItemUpdated</Name>
      <Type>ItemUpdated</Type>
      <Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
      <Class>MyProject.MyEventReceiver.MyEventReceiver</Class>
      <SequenceNumber>1000</SequenceNumber>
    </Receiver>
  </Receivers>
</Elements>

Codes:

public class MyEventReceiver : SPItemEventReceiver
{
    // On document upload, this method is only entered if I upload to "Shared Documents"
    public override void ItemUpdated(SPItemEventProperties properties)
    {               
        base.ItemUpdated(properties); // doesn't get called either
        MyMethod(properties);
    }
}
War es hilfreich?

Lösung 2

Es scheint, ich habe eine Lösung gefunden.Ich habe implementiert ItemAdded() neben dem Original ItemUpdated() im Ereignisempfänger.Drinnen erzwinge ich einen nachfolgenden Anruf an ItemUpdated() wie das:

public override void ItemAdded(SPItemEventProperties properties)
{            
    base.ItemAdded(properties);
    properties.ListItem.UpdateOverwriteVersion();            
}

Beachten Sie, dass UpdateOverwriteVersion "aktualisiert das Element, ohne eine andere Version des Elements zu erstellen" (MSDN).Dies führt zu einem Aufruf an ItemUpdated() wenn ein neues Element hinzugefügt wird;außerdem wird keine neue Version des Elements erstellt (z.sie erhalten nicht 2 Versionen, wenn Sie zum ersten Mal ein neues Element hinzufügen).Bisher funktioniert dies wie erwartet für alle Dokumentbibliotheken mit und ohne Versionierung.

Andere Tipps

Haben Sie zusätzliche Spalten in der einen oder anderen Bibliothek?Es scheint, dass dies einen Unterschied darin macht, ob ItemUpdating () beim Hochladen ausgelöst wird.Schauen Sie sich an dieser Beitrag.Der Schlüsselsatz dort ist,

"die Ereignisse, die beim Hinzufügen eines Dokuments zu einem Dokument ausgelöst werden Die Dokumentbibliothek KANN ItemUpdating und ItemUpdated enthalten.Aber nur wenn es sind zusätzliche Felder im Prozess enthalten."

Möglicherweise möchten Sie also mit verschiedenen Bibliothekskonfigurationen in Ihrer Umgebung herumspielen, damit Sie besser verstehen, wie sich diese "Funktion" von SharePoint auf Ihr System auswirkt.

Ich kann auch verstehen, dass es Gründe geben kann, ItemAdded zu vermeiden.Wenn ItemUpdated weiterhin ein Problem für Sie darstellt und Sie bereit sind, einige Details darüber mitzuteilen, warum ItemAdded in Ihrer Umgebung unerwünscht ist, sollten Sie hier eine separate Frage stellen, wie ItemAdded in Ihrem System funktioniert.

Toi toi toi!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top