Rapido & Facile: Rinominare il File caricato utilizzando il modello a oggetti di SharePoint tramite un ricevente di eventi

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

4 pensieri su "Rapido & Facile: Rinominare il File caricato utilizzando il modello a oggetti di SharePoint tramite un ricevente di eventi

  1. Senza nome
    Anche, Se questo da fare all'interno di Word, verrà restituito un errore e dire che il file non esiste. Non si è detto circa il nuovo URL. Non ho ancora trovato un modo per aggirare questo.
    Risposta
  2. Paul Galvin
    Grazie per la segnalazione. Non so neanche una risposta a quella … sarà interessante vedere come gestirlo.
    RE: Async & Redirezione
    Mi chiedo se spostandolo verso un ItemAdding risolverà. Che è un grande buco.
    Grazie!
    –Paul
    Risposta
  3. Nadeem Mitha
    Perché il file viene spostato in modo asincrono, c'è la possibilità di essere rediretti al EditForm prima che la mossa è impegnata (e questo è male). Vedrete che questo succede se fai il codice dormire prima della riga MoveTo. Ancora non ho capito cosa si può fare su quel problema a parte utilizzando un modulo di modifica su misura.
    Risposta

Lasciare una risposta

L'indirizzo email non verrà pubblicato. i campi richiesti sono contrassegnati *