Schnell & Einfach: Benennen Sie hochgeladene Datei mit SharePoint-Objektmodell über einen Ereignisempfänger

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();
        }

4 Gedanken zu „Schnell & Einfach: Benennen Sie hochgeladene Datei mit SharePoint-Objektmodell über einen Ereignisempfänger

  1. Kein name
    Auch, Wenn Sie aus Word dazu, Es wird ein Fehler zurückgegeben und sagen, dass die Datei nicht vorhanden ist. Es ist nicht gesagt, über die neue URL. Ich habe noch keine Weise um dieses.
    Antwort
  2. Paul Galvin
    Vielen Dank für diesen Hinweis. Ich weiß nicht, eine Antwort auf, die man entweder … wird interessant sein zu sehen, wie man es schaffen.
    RÜCK: Async & Umleitung
    Ich frage mich, ob auf ein ItemAdding verschoben, es lösen. Das ist ein großes Loch.
    Vielen Dank!
    –Paul
    Antwort
  3. Nadeem Mitha
    Da die Datei asynchron verschoben wird, Es besteht die Möglichkeit der EditForm.aspx umgeleitet, bevor die Bewegung einsetzt (und das ist schlecht). Sie werden sehen, dass dies passiert, wenn Sie den Code vor der Zeile MoveTo schlafen zu machen. Ich habe noch nicht herausgefunden, was kann, über dieses Problem getan werden neben der Nutzung eine benutzerdefinierte Bearbeitungsformular.
    Antwort

Hinterlasse eine Antwort

Deine Email-Adresse wird nicht veröffentlicht. erforderliche Felder sind markiert *