UPDATE: Dies funktioniert aber es gibt erhebliche Einschränkungen, die in den Kommentaren beschrieben werden. Dies kann noch in einigen Umständen nützlich sein.
UPDATE 2: In meinem aktuellen Projekt, Benutzer hochladen immer Dokumente. Als Folge, Ich stoßen nicht auf ein Problem, wo MS Word ausgeführt wird und meint, dass die Datei, darauf umbenannt wurde. Ich auf ein Problem stoßen., "die Datei wurde von einem anderen Benutzer geändert" und dies über einen einfachen Semaphore-Typ-Flag gelöst. Benutzer müssen ein Meta-Datenfeld vom Standardwert auf etwas anderes ändern. Das ItemUpdated-Ereignis() Receiver sucht es einen gültigen Wert vor dem Ausführen der Umbenennung und seitdem, Ich habe keine Probleme gehabt.. Ihre Erfahrungen können variieren.
Ich habe eine Client-Anforderung, die in einer bestimmten Dokumentbibliothek mit einer bestimmten Namenskonvention entspricht hochgeladenen Dateien umbenennen. Die API bietet keine "umbenennen()" Methode. Stattdessen, Wir verwenden "MoveTo(…)". Hier ist ein minimaler Code dazu:
öffentliche Überschreiben privatevoid ItemAdded(SPItemEventProperties Eigenschaften) { SPFile f = Properties.ListItem.File; f.MoveTo(Eigenschaften.ListItem.ParentList.RootFolder.Url + "/xyzzy.doc"); f.Update(); } |
Das nur schwierige Bit ist die "Eigenschaften. ListItem.ParentList.RootFolder.Url". Die MoveTo() Methode erfordert eine URL. Das Püree Zeichenfolge Punkte mich ins Stammverzeichnis des aktuellen Dokument Bibliothek. Dies ermöglicht es mir, zu vermeiden, keine harte Codierung in meinem Ereignisempfänger.
Dies ist ein nützlicher Version, die die gleiche Sache tut, aber weist den Namen der Datei auf "Titel":
öffentliche Überschreiben privatevoid ItemAdded(SPItemEventProperties Eigenschaften) { DisableEventFiring(); // Der Name der Datei selbst den Titel dieses Elements zuweisen. // HINWEIS: Diese Zuordnung muss stattfinden bevor wir die Datei selbst ändern. // Aufruf von update() auf die SPFile scheint ungültig, die Eigenschaften in // gewissermaßen. Aktuelles zu "Titel" konnte bis zu ändern (und update() Aufruf) // wurden vor der Änderung in den Dateinamen verschoben. Eigenschaften.ListItem["Titel"] = Properties.ListItem.File.Name; Eigenschaften.ListItem.Update(); SPFile f = Properties.ListItem.File; // Die Erweiterung der Datei zu erhalten. Wir brauchen, die später. Zeichenfolge SpfileExt = Neu FileInfo(f.Name).Erweiterung; // Benennen Sie die Datei in der Listenelement-ID und verwenden die Datei-Endung zu // der Teil der es intakt. f.MoveTo(Eigenschaften.ListItem.ParentList.RootFolder.Url + "/" + Eigenschaften.ListItem["ID"] + spfileExt); // Begehen Sie den Umzug. f.Update(); EnableEventFiring(); } |