使用客户端对象模型获取有关SharePoint Server的所有信息

时间:2012-07-24 09:53:12

标签: sharepoint sharepoint-2010

我想创建一个

的Windows应用程序

显示:

  • 所有Web应用程序,

  • 每个网络应用程序的网站集,

  • 每个网站集的网站

  • 每个网站的子网站

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

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

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

1 个答案:

答案 0 :(得分: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;
            }
        }

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