OfficeDev PNP:AddClientSitePage无法与子站点一起使用

问题描述

在LINQPad中使用以下代码,并使用最新的(3.24.2008)Office Online for SharePoint Online的OfficeDev SharePoint PnP核心库

void Main()
{
    var baseSite = "https://contoso.sharepoint.com";
    var sharepointSite = "/ussdallas";
    var siteUrl = $"{baseSite}{sharepointSite}";
    var userEmailAddress = "[email protected]";

    var pageName = "ContosoMarketResearch.aspx";
    
    var authenticationManager = new OfficeDevPnP.Core.AuthenticationManager();

    var context = authenticationManager.GetSharePointOnlineAuthenticatedContextTenant(siteUrl,"[email protected]","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()中的 true 强制保存到SharePoint)

结果是因为ClientSidePage是在ussdallas站点页面库而不是redoctober站点站点页面库中构建的。

根据我的判断,从ClientContext返回的web.GetWeb()仍设置为父级(ussdallasClientContext ...这就是制作页面的原因在错误的网站上。

正在寻找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();