AGGIORNAMENTO: Questo funziona, ma non ci sono limitazioni significative che sono descritti nei commenti. Questo può ancora essere utile in alcuni cirumstances.
AGGIORNAMENTO 2: Nel mio progetto attuale, Gli utenti sempre caricare documenti. Di conseguenza, Io non incorrere in un problema dove MS Word è in esecuzione e pensa che il file è stato rinominato su di esso. Ho incontrato un problema, "il file è stato modificato da qualcun altro" e risolto il problema tramite un flag di tipo semplice semaforo. Gli utenti devono modificare un campo dati meta dal valore predefinito a qualcos'altro. Il itemupdated() ricevitore in cerca di un valore valido lì prima di eseguire effettivamente la rinomina e da allora, Non ho avuto alcun problema. Il chilometraggio può variare.
Ho un requisito di cliente di cambiare il nome del file caricato in una raccolta di documenti specifici per la conformità con una convenzione di denominazione particolare. L'API fornisce una "Rinomina()" Metodo.. Invece, usiamo "MoveTo(…)". Qui è un po' minimal di codice per eseguire questa operazione:
pubblica eseguire l'override void ItemAdded(SPItemEventProperties Proprietà) { SPFile f = proprietα.ListItem.File; f.MoveTo(Proprietà.ListItem.ParentList.RootFolder.Url + "/xyzzy.doc"); f.Update(); } |
Solo la parte difficile è la "proprietà. ListItem.ParentList.RootFolder.Url". Il MoveTo() Metodo richiede un URL. Che purè punti stringa me nella cartella principale della mia libreria del documento corrente. Questo mi permette di evitare qualsiasi hard coded in mio ricevitore di eventi.
Questa è una versione più utile che fa la stessa cosa, ma assegna il nome del file per il "Titolo":
pubblica eseguire l'override void ItemAdded(SPItemEventProperties Proprietà) { DisableEventFiring(); // Assegnare il titolo di quest'elemento sul nome del file stesso. // NOTA: Questa assegnazione deve avvenire prima che vogliamo modificare il file stesso. // La chiamata di aggiornamento() la SPFile sembra invalidare le proprietà in // certo senso. Aggiornamenti "Title" non è riuscito fino a che cambia (e l'aggiornamento() chiamare) // sono state spostate di fronte la modifica il nome del file. Proprietà.ListItem["Title"] = proprietα.ListItem.File.Name; Proprietà.ListItem.Update(); SPFile f = proprietα.ListItem.File; // Ottenere l'estensione del file. Abbiamo bisogno che più tardi. stringa spfileExt = Nuovo FileInfo(f. Name).Estensione; // Rinominare il file ID dell'elemento di elenco e utilizzare l'estensione del file per mantenere // quella parte di esso intatto. f.MoveTo(Proprietà.ListItem.ParentList.RootFolder.Url + "/" + Proprietà.ListItem["ID"] + spfileExt); // La mossa di commettere. f.Update(); EnableEventFiring(); } |