Come recuperare un file tramite UniqueId in SharePoint
Per recuperare un file tramite il suo UniqueId in SharePoint 2013 ho due possibilità:
1) se conosco la url del sito dove c'è il file:
2) se non conosco il sito e devo cercare in tutta la site collection:
1) se conosco la url del sito dove c'è il file:
C#
/// http://www.sgart.it
/// urlWeb: la url del sito dove si trova la doc lib con il file
/// uniqueId: il guid del file
public static SPFile GetFileByUniqueId(string urlWeb, Guid uniqueId)
{
using (SPSite site = new SPSite(urlWeb))
{
using (SPWeb web = site.OpenWeb())
{
return web.GetFile(uniqueId);
}
}
}
2) se non conosco il sito e devo cercare in tutta la site collection:
C#
/// http://www.sgart.it
/// urlRoot: la url del sito root della site collection (indipendenetemente da dove si trova il file)
/// uniqueId: il guid del file
public static SPFile GetListItemByUniqueId(string urlRoot, Guid uniqueId)
{
using (SPSite site = new SPSite(urlRoot))
{
using (SPWeb web = site.RootWeb)
{
SPSiteDataQuery query = new SPSiteDataQuery();
query.Query = string.Format(
@"<Where><Eq><FieldRef Name='UniqueId' /><Value Type='Lookup'>{0}</Value></Eq></Where>"
,uniqueId);
query.Webs = "<Webs Scope='SiteCollection' />";
query.Lists = "<Lists BaseType='1' />";
query.ViewFields = @"<FieldRef Name='UniqueId' />";
query.RowLimit = 1;
System.Data.DataTable results = web.GetSiteData(query);
if (results == null || results.Rows.Count == 0)
{
return null;
}
var listId = new Guid(results.Rows[0]["ListId"].ToString());
var list = web.Lists[listId];
return list.GetItemByUniqueId(uniqueId).File;
}
}
}