尝试使用C#CSOM获取Sharepoint Online页面上的所有Webpart时,我得到0(而页面上有* are * Webpart)

时间:2018-07-06 12:07:20

标签: sharepoint sharepoint-online csom

因此,我正在使用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添加到新创建的团队网站中,怎么办?我不应该至少有几对吗?我可能做错了什么?

此代码取自:https://docs.microsoft.com/en-us/previous-versions/office/developer/sharepoint-2010/ee539301(v%3Doffice.14)

编辑:我还通过UI向我的主页添加了一个新的webpart,以查看是否获得“ 1”作为值,但是它仍然为0 ...

2 个答案:

答案 0 :(得分:1)

对于“ 现代”网站页面,已引入OfficeDevPnP.Core.Pages namespace而不是Microsoft.SharePoint.Client.WebParts namespace

来管理Web部件

下面的示例演示如何在页面上检索客户端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

参考

Customizing "modern" site pages

答案 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);
   }
}