sharepoint - OfficeDev PNP:AddClientSitePage 无法与子站点一起使用
问题描述
在 LINQPad 中使用以下代码,使用用于 SharePoint Online 的最新 (3.24.2008) OfficeDev SharePoint PnP 核心库
void Main()
{
var baseSite = "https://contoso.sharepoint.com";
var sharepointSite = "/ussdallas";
var siteUrl = $"{baseSite}{sharepointSite}";
var userEmailAddress = "nhodge@contoso.onmicrosoft.com";
var pageName = "ContosoMarketResearch.aspx";
var authenticationManager = new OfficeDevPnP.Core.AuthenticationManager();
var context = authenticationManager.GetSharePointOnlineAuthenticatedContextTenant(siteUrl, "nhodge@contoso.onmicrosoft.com", "contoso!contoso");
var web = context.Web;
context.Load(web);
context.ExecuteQuery();
var subSite = web.GetWeb("redoctober"); // the "sub site" of the "ussdallas" site is "redoctober"
var subSitePage = subSite.AddClientSidePage(pageName, true);
subSitePage.Save();
}
(真实的AddClientSidePage()
强制保存到 SharePoint)
结果是ClientSidePage 是在ussdallas
的站点页面库而不是redoctober
子站点的站点页面库中构建的。
从我可以确定的ClientContext
返回 fromweb.GetWeb()
仍然设置为 Parent 的 ( ussdallas
) ClientContext
...这就是为什么该页面是在错误的 Web 中创建的。
查看OfficeDev SharePoint PnP Core Library
...的来源,但我无法弄清楚如何“交换”上下文。我再做一个吗?此时用户已经登录。
有什么已知的解决方案吗?
解决方案
您可以尝试通过以下方式交换上下文:
context= authenticationManager.GetSharePointOnlineAuthenticatedContextTenant(siteUrl + "/sub1", userName, password);
var subSite = context.Web;
context.Load(subSite);
context.ExecuteQuery();
var subSitePage = subSite.AddClientSidePage(pageName, true);
subSitePage.Save();
推荐阅读
- ruby-on-rails - 提供重构代码(过滤方法)
- python - 如何解决:“无法导入名称:OneCycleLR”?
- c# - C# 交互式与即时窗口。差异、目的和用例
- javascript - Javascript 本机 .remove() 不适用于 HTMLCollection。Javascript错误?
- ionic-framework - Ionic V4 中的深度链接?
- twilio - Twilio 功能可将未接电话或在办公时间以外收到的电话转移到语音信箱,否则拨打 sip
- scala - Scala ZIO Ref 数据类型
- extjs - Extjs 网格。将记录的属性绑定到单元格的禁用属性
- java - 如何在 Spring Boot 应用程序中配置 elasticsearch 7.2.0?
- python - 测试 API 创建方法时出现错误请求 400