SharePoint 2010-Umbenennen-Dokument auf Hochladen Fehl in der Explorer-Ansicht

Ich versuche zu implementieren ist eine Anpassung in SharePoint 2010 so, dass beim hochladen eines Dokuments in eine Bibliothek ist der name der Datei abgeändert, um die Dokument-ID in den Namen. (Ich weiß, dass die Menschen sollten sich keine sorgen machen-Datei-Namen so viel mehr, aber wir haben eine Menge von legacy-Dateien, die bereits benannt und Nutzer, die gerne lokale Kopien).

War ich in der Lage, implementieren Sie ein benutzerdefiniertes Ereignis-Empfänger auf der ItemAdded-Ereignis, das benennt die Datei durch hinzufügen der Dokument-ID vor den Namen der Datei. Das funktioniert richtig aus dem web-Upload.

Ist das problem mit der Explorer-Ansicht. Wenn ich versuche, fügen Sie die Datei über WebDAV in der Explorer-Ansicht, bekomme ich zwei Kopien der Datei. Es scheint, dass beim hochladen einer Datei über das Web die Ereignisse, die Feuer sind

  1. ItemAdding
  2. ItemAdded

Aber wenn ich kopieren/einfügen einer Datei in der Explorer-Ansicht sehe ich die folgenden Ereignisse:

  1. ItemAdding
  2. ItemAdded
  3. ItemAdding
  4. ItemAdded
  5. ItemUpdating
  6. ItemUpdated

Das Ergebnis ist, ich habe zwei Dateien mit unterschiedlichen Namen (da die Dokument-IDs sind unterschiedlich).

Ich gefunden habe, eine Menge Leute sprechen über das Problem online (diese ist der beste Artikel, den ich gefunden habe). Hat jemand noch andere Ideen? Würde es mehr Sinn machen, dies in einem workflow statt ein Ereignis-Empfänger? Ich könnte mit einem geplanten job statt, aber das könnte verwirrend sein, um die user wenn der name des Dokuments geändert, ein paar Minuten später.

Dies ist mein code, der funktioniert Super, wenn Sie die Web-upload, aber nicht bei der Verwendung der Explorer-Ansicht:

public override void ItemAdded(SPItemEventProperties properties)
{
   try
   {
       SPListItem currentItem = properties.ListItem;

       if (currentItem["_dlc_DocId"] != null)
       {
       string docId = currentItem["_dlc_DocId"].ToString();
       if (!currentItem["BaseName"].ToString().StartsWith(docId))
       {
           EventFiringEnabled = false;
           currentItem["BaseName"] = docId + currentItem["BaseName"];
           currentItem.SystemUpdate();
           EventFiringEnabled = true;
       }
       }
   }
   catch (Exception ex)
   {
       //Probably should log an error here
   }            
   base.ItemAdded(properties);
}
InformationsquelleAutor Peter Jacoby | 2011-10-19
Schreibe einen Kommentar