我想创建一个
的Windows应用程序显示:
所有Web应用程序,
每个网络应用程序的网站集,
每个网站集的网站
每个网站的子网站
所有列表 - 树视图中每个站点和子站点的库
这里我不想在应用程序启动时提供任何静态URL,如果在该计算机上安装了SharePoint,则在树视图中自动填充所有信息。
这可能吗?如果是,那怎么样?
答案 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;
}
}
我没有声称,解决方案是最好的,但它确实有效。祝你好运!