Technology Experience (Reborn 3)

Contenuti gestiti da Igor Damiani
posts - 895, comments - 1334, trackbacks - 81

My Links

News














  • Questo blog nasce dalle ceneri del mio blog tecnico su UGIdotNET. In questo blog voglio raccontare la mia vita, ovvero quello che non mi sento più di raccontare da nessun'altra parte. Non sono solo un programmatore, dannazione: sono una persona che ha una terribile passione per il proprio lavoro. Ma anche passione per la vita, per le donne, per la birra, per la mia Fiat 500, per il sole ed il mare, per la scrittura, per qualche risata con gli amici, per i sentimenti. Qua troverete tutto questo: buona lettura!.

    23/04/2007,
    Sant'Angelo Lodigiano

Tag Cloud

Archives

Post Categories

Amici

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:   

Print | posted on lunedì 2 giugno 2008 16.34 | Filed Under [ .NET World ]

Feedback

Gravatar

# re: Ottenere l'ID univoco di un file in una document library di Sharepoint

Francamente non capisco tutta questa complessità.
Perchè non ti sei fatto restituire direttamente l'item voluto con una bella query CAML?

Dato che comunque il metodo che hai utilizzato poteva funzionare con una Query il più era fatto...ed eviti un sacco di traffico HTTP inutile, dato che quello che ti interessa è l'Id di un solo elemento...

...
03/06/2008 10.27 | Omar Damiani

Post Comment

Title  
Name  
Email
Url
Comment   
Please add 5 and 4 and type the answer here:

Powered by:
Powered By Subtext Powered By ASP.NET