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
- ItemAdding
- ItemAdded
Aber wenn ich kopieren/einfügen einer Datei in der Explorer-Ansicht sehe ich die folgenden Ereignisse:
- ItemAdding
- ItemAdded
- ItemAdding
- ItemAdded
- ItemUpdating
- 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);
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich gefunden, dass die Verwendung von Visual Studio-workflow ermöglicht mir die Flexibilität, dies zu tun. Ein SharePoint Designer-Workflow wäre einfacher, wäre aber schwieriger zu implementieren, um verschiedene Websites und Bibliotheken.
Nach der Lektüre einige gute Artikel, wie zum Beispiel diese und diese ich habe mit diesem code scheint zu funktionieren. Es beginnt ein workflow und wartet, bis das Dokument nicht in einem LockState und dann Prozesse, die mit dem Namen.
Workflow sieht wie folgt aus:
Und hier ist der code hinter:
Hoffe, das hilft jemand anderem, wenn Sie das gleiche problem haben.
Gut, ich würde gehen für den workflow Abhilfe... es gibt 2 Möglichkeiten imo:
1) Erstellen Sie ein Boolesches Feld in Ihrem Dokument-Bibliothek, und erstellen Sie anschließend ein SPD-workflow, der feuert, wenn das Element Hinzugefügt und das Feld "Geändert" oder so etwas. In der EventReceiver Sie dann prüfen, ob das Feld gesetzt wurde..
2) alles Tun, was mit der SPD workflow - änderung der Titel, wie in diesem Beispiel sollte das kein problem sein.