我正在尝试使用 SharePoint CSOM/REST 来设置通信网站,然后将 Web 部件添加到主页。第一部分(配置)运行良好。但是,当我使用SharePointPnPCoreOnline
NuGet 包添加 Web 部件时,主页上的所有现有 Web 部件都将被删除。
这是我的配置代码(为简洁起见进行了简化):
var homePage = clientContext.Web.LoadClientSidePage("Home.aspx");
var clientSideComponent = homePage.AvailableClientSideComponents()
.SingleOrDefault(csc => csc.Id.Equals("{<web part ID here>}", StringComparison.OrdinalIgnoreCase));
ClientSideWebPart webPart = new ClientSideWebPart(clientSideComponent);
CanvasSection section = new CanvasSection(homePage, CanvasSectionTemplate.OneColumn, 0);
homePage.Sections.Add(section);
homePage.Save();
homePage.AddControl(webPart, section.Columns[0]);
homePage.Save();
homePage.Publish();
当站点刚刚配置好并且主页尚未修改时:
- 该页面显示一组默认 Web 部件。例如,如果我选择了“主题”设计,我可以看到
- 全角部分,包含一个“英雄”Web 部件,带有五个磁贴,以及一些欢迎消息和链接
- “一栏”部分,包含多个 Web 部件:新闻、事件、文档、快速链接和人员配置文件。
- 从“SitePages”库下载的页面内容不包含
<mso:CanvasContent1 />
元素,因此它没有明确定义的 Web 部件。 - 这些 Web 部件的内容来自
https://spoprod-a.akamaihd.net/files/sp-client-prod_2019-09-20.008/sp-pages-assembly_en-us_36e69c06b20e347fb4426bfdff916a8e.js
文件 - Web 部件内容以当前用户的语言翻译。
在我使用前面的代码配置我的 Web 部件后,该 Web 部件出现在页面上,但所有初始 Web 部件都已被删除。
如果不是自动设置 Web 部件,而是手动设置:
- 保留默认 Web 部件。
- 在存储在“SitePages”中的页面中,我可以在 element 中看到原始 Web 部件和我的 Web 部件
<mso:CanvasContent1 />
。 - 它不再翻译初始内容,但仅以首次编辑页面的用户的语言提供。
所以我的问题是:有没有办法以编程方式将 Web 部件添加到新配置的现代网站(团队或通信)的主页,而不删除默认的 Web 部件?