Technology Experience
.NET World

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

Ho scritto il metodo seguente, che dato un nome di una lista di Sharepoint ed un nome di file pubblicato, restituisce il suo ID univoco. Questo ID può essere utile durante la chiamata ai web-services di Sharepoint. Vediamo insieme come funziona.

1 public void ReadFileID(string listName, string fileName) 2 { 3 string name; 4 Lists l = new Lists(); 5 l.Credentials = new NetworkCredential(this.Username, this.Password, this.Domain); 6 7 XmlDocument doc = new XmlDocument(); 8 doc.LoadXml("<Document><Query /><ViewFields /><QueryOptions /></Document>"); 9 XmlNode listQuery = doc.SelectSingleNode("//Query"); 10 XmlNode listViewFields = doc.SelectSingleNode("//ViewFields"); 11 XmlNode listQueryOptions = doc.SelectSingleNode("//QueryOptions"); 12 XmlNode node = l.GetListItems(listName, string.Empty, listQuery, 13 listViewFields, 14 "100", listQueryOptions, null).FirstChild.NextSibling.FirstChild.NextSibling; 15 16 do 17 { 18 if (node.NodeType != XmlNodeType.Whitespace) 19 { 20 if (node.Name.Contains("row")) 21 { 22 name = node.Attributes["ows_FileRef"].Value.Split(';')[1].Replace("#", ""); 23 if (name.Equals(fileName)) 24 { 25 this.CacheFilesID.Add(fileName, node.Attributes["ows_ID"].Value); 26 break; 27 } 28 } 29 } 30 31 node = node.NextSibling; 32 } while (node != null); 33 }

Riga (4) e (5): creo un’istanza della classe wrapper per chiamare il web-services e ne imposto le credenziali per avere l’accesso.

Alla riga (12) avviene la chiamata vera e propria al metodo GetListItems. Esso restituisce un XML che contiene tutti gli elementi pubblicati nella document library, per cui dopo dovremo parsare l’XML per recuperare il file voluto. I parametri nella chiamata non sono pochi. Essi sono rispettivamente: il nome della lista, un eventuali nome della view, l’eventuale query, l’elenco dei campi da vedere, il row limit (messo a 100 in questo caso), eventuali query options ed il Web ID (opzionale).

Questa chiamata restituisce un XmlNode piuttosto lungo e complesso. Il codice non fa altro che saltare tutti i nodi di tipo Whitespace, recupera solo quelli il cui tag è “row”. Quando ne trova uno (riga 22), prendo l’attributo “ows_FileRef” e lo parserizza in modo brutale, splittando sul carattere ‘;’ ed eliminando la presenza del carattere ‘#’. Quando finalmente viene trovato il file voluto, lo inserisce in una cache (Dictionary<string, string>), in modo tale che se viene chiesto in un secondo momento l’ID dello stesso file, posso recuperarlo più velocemente dalla cache.

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.