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:

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;
    }
  }
}
Tags:
C#236 SharePoint498 SharePoint 2013137
Potrebbe interessarti anche: