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: SharePoint .NET Framework document library