Domanda

Sono alla fine del mio ingegno su questo. Ho un'interfaccia utente che crea e modifica documenti archiviati in una libreria di documenti SharePoint. La parte del trucco è che devo consentire all'utente di aggiornare il documento senza problemi SPFile.SaveBinary() Giusto?

Ciò aggiorna sicuramente il contenuto del file, ma in qualche modo persistono il vecchio nome e la vecchia estensione, questo è un problema. L'eliminazione e la riassegnazione dell'elemento dell'elenco non è una soluzione perché l'ID dell'elemento viene fatto riferimento nell'URL.

La mia domanda è: come posso aggiornare i metadati di estensione e nome file dell'elemento SPFILE?

Finora tutti i miei tentativi di usare la libreria di oggetti sono falliti, ho provato ad aggiornare i campi sotto nessuno ha avuto successo. Sembra che ci debba essere un modo più semplice per farlo.

SPFile file = item.File;
file.Item[SPBuiltInFieldId.FileLeafRef] = resolvedFileName;
file.Item[SPBuiltInFieldId.FileRef] = "/File/" + resolvedFileName;
file.Item[SPBuiltInFieldId.BaseName] = System.IO.Path.GetFileNameWithoutExtension(resolvedFileName);
file.Item["Name"] = System.IO.Path.GetFileNameWithoutExtension(resolvedFileName);
file.SaveBinary(conduitFile);
file.Update();

MODIFICARE - Ecco la mia soluzione di lavoro.

SPFile file = item.File;
string resolvedFileName = item.ID.ToString() + "-" + conduitFileName;
item["Title"] = resolvedFileName;
file.SaveBinary(conduitFile);
file.MoveTo(item.ParentList.RootFolder.Url + "/" + resolvedFileName, true);
file.Item["Name"] = resolvedFileName;
file.Update();
È stato utile?

Soluzione

Dopo che il file è stato salvato nella libreria, utilizzare il MoveTo metodo e passare il nome del file modificato in newUrl parametro.

Metodo spfile.moveto (stringa)
Facile e facile: rinominare il file caricato utilizzando il modello di oggetti SharePoint tramite un ricevitore evento

Altri suggerimenti

Un altro modo più semplice rispetto all'utilizzo di Moveto è usare il Basename Proprietà di SplistItem. Lo imposteresti correndo

item["BaseName"] = resolvedFileName; //Whatever you want the new file name to be 
item.Update();

Questo è più facile di Moveto perché non devi preoccuparti della gerarchia delle cartelle e non devi preoccuparti dell'estensione del file.

Per qualche motivo la proprietà non è elencata su Documentazione MSDN, ma sembra funzionare bene senza problemi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top