Technology Experience
.NET World

Sharepoint: Ottenere l’ID di un file pubblicato in una document library

Attraverso CAML possiamo fare tutta una serie di query che vanno ad interrogare il contenuto di una document library. Per esempio, se volessimo aggiornare i metadati di un file pubblicato in una document library dobbiamo prima averne l’ID univoco. Questo lo abbiamo visto precedentemente, quando abbiamo ottenuto l’ID dell’ultimo file uploadato.

Quale CAML dobbiamo scrivere per sapere l’ID di un qualsiasi file?
E’ molto semplice:

<Where> <Eq> <FieldRef Name="FileLeafRef" /> <Value Type="Text">{0}</Value> </Eq> </Where>

Se usiamo questo CAML in un metodo GetIDFromFilename, il risultato è servito:

1 public int GetIDFromFilename(string listName, string folder, string fileName) 2 { 3 Lists l = new Lists(); 4 l.Credentials = new NetworkCredential(this.Username, this.Password, this.Domain); 5 6 XmlDocument doc = new XmlDocument(); 7 XmlNode query = doc.CreateNode(XmlNodeType.Element, "Query", string.Empty); 8 XmlNode options = doc.CreateNode(XmlNodeType.Element, "QueryOptions", string.Empty); 9 10 if(!string.IsNullOrEmpty(folder)) 11 options.InnerXml = string.Format("<Folder>{0}</Folder>", folder); 12 13 string xml = ResourceHelper.GetResourceContent("UploaderMOSS.XML.GetIDFromFilenameQuery.xml"); 14 query.InnerXml = string.Format(xml, fileName); 15 16 XmlNode node = l.GetListItems(listName, null, query, null, "1", options, null); 17 18 node = node.FirstChild.NextSibling.FirstChild.NextSibling; 19 20 if (node != null) 21 { 22 int idFile = Int32.Parse(node.Attributes["ows_ID"].Value); 23 this.CacheFilesID.Add(fileName, idFile); 24 return idFile; 25 } 26 else 27 return 0; 28 }

I parametri richiesti in input dal metodo sono, nell’ordine: il nome della lista, il path ed il nome del file. Il risultato è un banale int, che può valere 0 (zero) nel caso in cui chiediamo l’ID di un file che non esiste. Se il file è alla root della document library, il parametro folder può essere string.Empty. La query CAML che abbiamo visto prima viene utilizzata alle righe 13 e 14.

Se il file si trova annidato in diversi subfolders della document library, dobbiamo utilizzare – come già ho detto prima – il parametro folder. Internamente, il metodo costruisce un blocco <QueryOptions><Folder>{0}</Folder></QueryOptions>, dove viene iniettato il path (es: “Folder1/Folder2/Folder”, escludendo il nome del file). Questo blocco <QueryOptions> viene passato al metodo GetListItems del web-service di cui vi ho parlato nei post precedenti.

Conclusione

Detto questo, possiamo scrivere un metodo Main come questo:

static void Main(string[] args) { ConnectorWSS wss = new ConnectorWSS(); wss.UploadDocument("D:\Documenti\test_uploading.txt", "igordamiani/Documenti/test_uploading.txt"); int idFile = wss.GetIDFromFilename("Documenti", string.Empty, "test_uploading.txt"); Dictionary<string, string> values = new Dictionary<string, string>(); values.Add("Note", "Upload di test!"); wss.UpdateDocumentMetadata("Documenti", idFile, values); }

Con poche righe di codice, pubblico un file sulla document library di Sharepoint, ne ottengo l’ID e salvo i metadati costruendo prima un Dictionary<string, string> appositamente.

Technorati Tags:     

Send to Kindle

Igor Damiani

La sua passione per l'informatica nasce nella prima metà degli anni '80, quando suo padre acquistò un Texas Instruments TI-99. Da allora ha continuato a seguire l'evoluzione sia hardware che software avvenuta nel corso degli anni. E' un utente, un videogiocatore ed uno sviluppatore software a tempo pieno. Igor ha lavorato e lavora anche oggi con le più moderne tecnologie Microsoft per lo sviluppo di applicazioni: .NET Framework, XAML, Universal Windows Platform, su diverse piattaforme, tra cui spiccano Windows 10 piattaforme mobile. Numerose sono le app che Igor ha creato e pubblicato sul marketplace sotto il nome VivendoByte, suo personale marchio di fabbrica. Adora mantenere i contatti attraverso Twitter e soprattutto attraverso gli eventi delle community .NET.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.