2012-07-24 120 views
1

我想创建一个Windows应用程序获取SharePoint服务器的所有Infromation是使用客户端对象模型

显示:

  • 所有的Web应用程序,

  • 站点的每个Web应用程序收集,

  • 各网站集合的网站,

  • 每个站点的子站点,

  • 全部列出,图书馆树视图中的每个站点和子站点

这里,我并不想给任何静态的URL,在应用程序启动时,如果在该计算机上安装了SharePoint,则会在树视图中自动填充所有信息。

这是可能的吗?如果是,那么如何?

回答

2

.NET托管客户端对象模型:获取所有站点,库,项目

在SharePoint 2010中,我们有3个客户端对象模型。

  1. .NET托管客户端对象模型
  2. 的Silverlight
  3. ECMA脚本/ JavaScript的

今天,我提出.NET托管客户端对象模型检索从SharePoint网所有,库项目。

参考的先决条件为您的桌面应用程序:

1. Microsoft.SharePoint.Client.dll
2. Microsoft.SharePoint.Client.Runtime。dll的

我的自定义类,觉得我们是在SharePoint服务器对象模型工作:

public class SPWeb 
{ 
    public string WebGUID { get; set; } 
    public string Title { get; set; } 
    public string ServerRelativeUrl { get; set; } 
    public string ParentType { get; set; } 
    public SPBase Parent { get; set; } 
} 
public class SPList 
{ 
    public string ListGUID { get; set; } 
    public string Title { get; set; } 
    public string ParentWebUrl { get; set; } 
    public string RootFolderServerRelativeUrl { get; set; } 
} 

public class SPFolder 
{ 
    public string ID { get; set; } 
    public string UniqueID { get; set; } 
    public string Name { get; set; } 
    public string Title { get; set; } 
    public string ParentWebUrl { get; set; } 
    public string ListName { get; set; } 
    public string ServerRelativeUrl { get; set; } 
    public string ParentFolderServerRelativeUrl { get; set; } 
} 

public class SPListItem 
{ 
    public string ID { get; set; } 
    public string Name { get; set; } 
    public string Title { get; set; } 
    public string ServerRelativeUrl { get; set; } 
    public string Modified { get; set; } 
    public string ModifiedBy { get; set; } 
    public string CreatedBy { get; set; } 
    public string Size { get; set; } 
    public string Created { get; set; } 
    public string UniqueId { get; set; } 
    public string ListName { get; set; } 
} 

方法是用来获取站点/库/项目

public List<SPWeb> GetAllWebs(string webURL) 
{ 
    var webColl = new List<SPWeb>(); 
    try 
    { 
    var currentWeb = _ctx.Site.OpenWeb(webURL); 
    var allWebs = currentWeb.Webs; 
    var webCollection = _ctx.LoadQuery(allWebs.Include(web => web.Title, 
    web => web.Id, web => web.ServerRelativeUrl)); 
    _ctx.ExecuteQuery(); 
    webColl.AddRange(webCollection.Select(web => new SPWeb 
           { 
            Title = web.Title, 
            WebGUID = web.Id.ToString(), 
            ServerRelativeUrl = web.ServerRelativeUrl 
           })); 
    } 
    catch (Exception ex) 
    { 
     // error log 
    } 
return webColl; 
} 

public List<SPList> GetAllLibraries(string webURL) 
{ 
    var listColl = new List<SPList>(); 
    try 
    { 
    var currentWeb = _ctx.Site.OpenWeb(webURL); 
    var query = from list in currentWeb.Lists 
       where list.BaseType == BaseType.DocumentLibrary 
       select list; 
    var AllLists = currentWeb.Lists; 
    var listCollection = _ctx.LoadQuery(query.Include(myList => myList.Title, 
            myList => myList.Id, 
            myList => myList.RootFolder.ServerRelativeUrl, 
            myList => myList.ParentWebUrl, 
            myList => myList.Hidden, 
            myList => myList.IsApplicationList)); 
    _ctx.ExecuteQuery(); 

    listColl.AddRange(from list in listCollection 
        where !list.Hidden 
        select new SPList 
        { 
         Title = list.Title, 
         ListGUID = list.Id.ToString(), 
         RootFolderServerRelativeUrl = list.RootFolder.ServerRelativeUrl, 
         ParentWebUrl = list.ParentWebUrl 
        }); 
    } 
    catch (Exception ex) 
    { 
     // error log 
    } 
    return listColl; 
} 

public List<SPFolder> GetAllFolder(string webURL, string listName, string folderName) 
{ 
    var itemColl = new List<SPFolder>(); 
    try 
    { 
     var currentWeb = _ctx.Site.OpenWeb(webURL); 
     var currentList = currentWeb.Lists.GetByTitle(listName); 

     var query = new CamlQuery(); 

     if (folderName.Length > 0) 
     query.FolderServerRelativeUrl = folderName; 

     query.ViewXml = @"<View><Query><Where> 
         <Or> 
          <Eq> 
          <FieldRef Name='ContentType' /> 
          <Value Type='Text'>Document Set</Value> 
          </Eq> 
          <Eq> 
          <FieldRef Name='ContentType' /> 
          <Value Type='Text'>Folder</Value> 
          </Eq> 
         </Or> 
         </Where></Query></View>"; 

     var listitems = currentList.GetItems(query); 
    _ctx.Load(listitems); 
    _ctx.ExecuteQuery(); 

    itemColl.AddRange(listitems.ToList().Select(item => new SPFolder() 
        { 
         ID = Convert.ToString(item["ID"]), 
         UniqueID = Convert.ToString(item["GUID"]), 
         ListName = listName, 
         ParentWebUrl = webURL, 
         Title = Convert.ToString(item["FileLeafRef"]), 
         Name = "folder", 
         ServerRelativeUrl = Convert.ToString(item["FileRef"]) 
        }).AsEnumerable()); 
    } 
    catch (Exception ex) 
    { 
    // error log 
    } 
    return itemColl; 
} 
public List<SPListItem> GetAllItems(string webURL, string listName, string folderName) 
{ 
    var itemColl = new List<SPListItem>(); 
    try 
    { 
     var currentWeb = _ctx.Site.OpenWeb(webURL); 
     var currentList = currentWeb.Lists.GetByTitle(listName); 
     var query = new CamlQuery(); 

     if (folderName.Length > 0) 
      query.FolderServerRelativeUrl = folderName; 

     var myquery = from myitems in currentList.GetItems(query) 
         select myitems; 

     var listitems = _ctx.LoadQuery(myquery.Include(myitem => myitem["ID"], 
             myitem => myitem["FileLeafRef"], 
             myitem => myitem["Modified"], 
             myitem => myitem["File_x0020_Size"], 
             myitem => myitem["Modified_x0020_By"], 
             myitem => myitem["Created_x0020_By"], 
             myitem => myitem["FileRef"], 
             myitem => myitem["UniqueId"], 
            )); 

     _ctx.ExecuteQuery(); 

     foreach (var nitem in listitems.Select(item => new SPListItem 
     { 
       ID = Convert.ToString(item["ID"]), 
       ParentWebUrl = webURL, 
       Title = Convert.ToString(item["FileLeafRef"]), 
       Modified = item["Modified"] != null ?   Convert.ToString(item["Modified"]) : string.Empty, Size = item["File_x0020_Size"] != null ? Convert.ToString(item["File_x0020_Size"]) : string.Empty, 
      CreatedBy = item["Created_x0020_By"] != null ? Convert.ToString(item["Created_x0020_By"]) : string.Empty, 
      ModifiedBy = item["Modified_x0020_By"] != null ? Convert.ToString(item["Modified_x0020_By"]) : string.Empty, 
      UniqueId = item["UniqueId"].ToString(), 
      ServerRelativeUrl = Convert.ToString(item["FileRef"]), 
      ListName = listName 
    })) 

    itemColl.Add(nitem); 
} 
catch (Exception ex) 
{ 
    // error log 
} 
return itemColl; 
} 

对于这个我用下面的参考,

http://shahjinesh11.wordpress.com/2012/06/14/net-managed-client-object-model-fetch-all-webs-libraries-items/

它可以帮助你祝你好运:-)

0

我的代码:

protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!IsPostBack) 
      { 
       var service = SPFarm.Local.Services.GetValue<SPWebService>(string.Empty); 
       foreach (SPWebApplication webApplication in service.WebApplications) 
       { 
        ShowSiteCollection(webApplication.Sites); 
       } 
      } 
     } 

private void ShowSiteCollection(IEnumerable<SPSite> sites) 
     { 
      foreach (SPSite site in sites) 
      { 
       using (site) 
       { 
        var rootWeb = site.RootWeb; 
        var node = new TreeNode(rootWeb.Title, rootWeb.Url); 
        if (rootWeb.Webs.Count > 0) 
        { 
         ShowWebCollection(rootWeb.Webs, (title, url) => node.ChildNodes.Add(new TreeNode(title, url))); 
        } 

        siteCollectionTree.Nodes.Add(node); 
       } 
      } 
     } 

private static void ShowWebCollection(SPWebCollection collection, Action<string, string> func) 
     { 
      for (var i = 0; i < collection.Count; i++) 
      { 
       var info = collection.WebsInfo[i]; 

       func.Invoke(info.Title, info.ServerRelativeUrl); 

       if (collection[i].Webs.Count > 0) 
       { 
        ShowWebCollection(collection[i].Webs, func); 
       } 
      } 
     } 

和方法获取列表:

private static IEnumerable<List> GetSiteLists(string siteUrl) 
     { 
      using (var context = new ClientContext(siteUrl)) 
      { 
       var query = from lists in context.Web.Lists 
          where !lists.Hidden 
          select lists; 
       var siteLists = context.LoadQuery(query); 
       context.ExecuteQuery(); 

       return siteLists; 
      } 
     } 

我不主张,该解决方案是最好的,但它的作品。祝你好运!

相关问题