因此,我正在使用C#CSOM代码尝试获取所有Web部件,以便删除其中的一个。我的Sharepoint Online页面只是一个标准的现代团队网站页面,没有任何更改。我要获取所有Webpart,然后使用csom删除快速链接标准Webpart。这是我的代码:
Microsoft.SharePoint.Client.File oFile =
Context.Web.GetFileByServerRelativeUrl("/sites/CR-WST-GYM-20130306/SitePages/Home.aspx");
LimitedWebPartManager wpManager = oFile.GetLimitedWebPartManager(PersonalizationScope.Shared);
/*Context.Load(wpManager.WebParts,
wps => wps.Include(
wp => wp.WebPart.Title));*/
Context.Load(wpManager);
Context.ExecuteQueryRetry();
WebPartDefinitionCollection wpDefinitionCollection = wpManager.WebParts;
Context.Load(wpDefinitionCollection);
Context.ExecuteQueryRetry();
它已加载,但是wpManager.WebParts包含0个值且计数为0 ...如果已经将标准WebPart添加到新创建的团队网站中,怎么办?我不应该至少有几对吗?我可能做错了什么?
编辑:我还通过UI向我的主页添加了一个新的webpart,以查看是否获得“ 1”作为值,但是它仍然为0 ...
答案 0 :(得分:1)
对于“ 现代”网站页面,已引入OfficeDevPnP.Core.Pages
namespace而不是Microsoft.SharePoint.Client.WebParts
namespace
下面的示例演示如何在页面上检索客户端Web部件的列表
using (var ctx = new ClientContext(webUrl))
{
ctx.Credentials = GetCredentials(userName, password);
var page = OfficeDevPnP.Core.Pages.ClientSidePage.Load(ctx, "Home.aspx");
var webParts = page.Controls.Where(c => c.Type.Name == "ClientSideWebPart").ToList();
}
先决条件
SharePointPnPCoreOnline
package
参考
答案 1 :(得分:0)
不需要即插即用。这对我有用。
CamlQuery allPagesQuery = new CamlQuery();
ListItemCollection pageItems = list.GetItems(allPagesQuery);
ctx.Load(pageItems, pi => pi.Include(i => i.Id, i => i.DisplayName));
ctx.ExecuteQuery();
foreach (var item in pageItems)
{
ctx.Load(item, i => i.File, i => i.File.ServerRelativeUrl);
ctx.ExecuteQuery();
LimitedWebPartManager wpManager =
item.File.GetLimitedWebPartManager(PersonalizationScope.Shared);
ctx.Load(wpManager, wpm => wpm.WebParts.Include(wp => wp.WebPart.Title, wp => wp.Id));
ctx.ExecuteQuery();
foreach (WebPartDefinition wp in wpManager.WebParts)
{
log4.DebugFormat("Webpart in {0}: {1} [{2}]",
item.File.ServerRelativeUrl, wp.WebPart.Title, wp.Id);
}
}