【问题标题】:Get the All Infromation of SharePoint Server using Client Object Model使用客户端对象模型获取 SharePoint Server 的所有信息
【发布时间】:2012-11-19 12:57:36
【问题描述】:

我想创建一个 Windows 应用程序

显示:

  • 所有 Web 应用程序,

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

  • 每个网站集的网站,

  • 各个站点的子站点,

  • 所有列表-树视图中每个站点和子站点的库

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

这可能吗?如果是,那怎么办?

【问题讨论】:

    标签: sharepoint sharepoint-2010


    【解决方案1】:

    .Net 托管客户端对象模型:获取所有网站、库、项目

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

    1. .Net 托管客户端对象模型
    2. 银光
    3. ECMA 脚本/JavaScript

    今天,我将介绍 .NET 托管客户端对象模型,以从 SharePoint 检索所有网站、库和项目。

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

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

    我的自定义类让我们感觉我们正在处理 SharePoint Server 对象模型:

    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; }
     }
    

    用于获取 Webs/library/Items 的方法

    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/

    它可能会帮助你祝你好运:-)

    【讨论】:

      【解决方案2】:

      我的代码:

      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;
                  }
              }
      

      我没有声称该解决方案是最好的,但它确实有效。祝你好运!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-17
        • 1970-01-01
        • 2012-12-01
        • 1970-01-01
        • 2013-10-23
        • 2013-03-02
        • 2011-03-23
        • 1970-01-01
        相关资源
        最近更新 更多