在使用CSOM进行初始部署之后,将SharePoint列表webpart添加到特定页面
问题描述:
在部署我的SharePoint站点期间,我创建了一些我想以编程方式添加到主页的列表,但找不到任何可用的东西。在使用CSOM进行初始部署之后,将SharePoint列表webpart添加到特定页面
现在,我得到了以下错误:
The property or field 'SchemaXml' has not been initialized.
It has not been requested or the request has not been executed.
It may need to be explicitly requested.'
这里说的部署过程中创建的清单代码:
ArrayList arrFields = new ArrayList();
arrFields.Add(fieldBody);
arrFields.Add(fieldPublishStartDate);
arrFields.Add(fieldPublishStopDate);
arrFields.Add(fieldReadMore);
//create the home page content lists
List FeaturedStories = CreateList(ctx, currentWeb, "Featured Stories", ListTemplateType.PictureLibrary, arrFields, true);
CreateList(ctx, currentWeb, "Team Spotlight", ListTemplateType.PictureLibrary, arrFields, true);
List quickLinks = CreateList(ctx, currentWeb, "Quick Links", ListTemplateType.Links, null, true);
List resourceLinks = CreateList(ctx, currentWeb, "Resource Links", ListTemplateType.Links, null, true);
arrFields.Remove(fieldBody);
List announcementsList = CreateList(ctx, currentWeb, "News and Announcements", ListTemplateType.Announcements, arrFields, true);
List eventsCalendarList = CreateList(ctx, currentWeb, "Events Calendar", ListTemplateType.Events, arrFields, true);
ctx.Load(currentWeb, w => w.Lists);
ctx.ExecuteQuery();
这里就是我想要的代码将其中一个列表添加到主页:
var pageUrl = "/sites/practice3/SitePages/Home.aspx";
var xml = ctx.Web.Lists.GetByTitle("News and Announcements").SchemaXml;
var web = ctx.Web;
var lists = web.Lists;
ctx.Load(lists);
ctx.ExecuteQuery();
AddWebPart(ctx, pageUrl, xml);
这是方法AddWebPart
,但是我还没有能够测试这是否会工作,因为我无法达到的代码:
public static void AddWebPart(ClientContext context, string pageUrl, string xml)
{
var page = context.Web.GetFileByServerRelativeUrl(pageUrl);
var webpartManager = page.GetLimitedWebPartManager(PersonalizationScope.Shared);
context.Load(webpartManager);
context.Load(webpartManager.WebParts);
context.ExecuteQuery();
WebPartDefinition webpartDef = webpartManager.ImportWebPart(xml);
WebPartDefinition webpart = webpartManager.AddWebPart(webpartDef.WebPart, "mainContent", 0);
context.Load(webpartDef);
context.ExecuteQuery();
//webpartManager.ImportWebPart(xml);
//context.ExecuteQuery();
Console.WriteLine("Hit any key to continue...");
Console.ReadKey();
Console.ReadKey();
}
谢谢任何帮助!
答
您正在加载所有列表信息(包含基本文件),因此尝试访问XML数据时出现NonInitializedProperty
异常。如果你想获得你的模式,你需要明确加载它。
var pageUrl = "/sites/practice3/SitePages/Home.aspx";
// mark object you would like to access
var list = ctx.Web.Lists.GetByTitle("News and Announcements");
// prepare load query with SchemaXml property
ctx.Load(list, l=>l.SchemaXml);
ctx.ExecuteQuery(); // request the data
AddWebPart(ctx, pageUrl, list.SchemaXml);
希望有帮助。
这解决了这个问题......谢谢!现在我在'AddWebPart'函数的一行中得到一个错误:'无法识别此Web部件的XML名称空间' 我不确定这是为什么,但如果您有任何想法非常有帮助! – Kyle
这是因为您正在将'SchemaXML'列表传递给'webpartManager.ImportWebPart()'方法,而不是Web部件xml内容。如果您想要让您的Web部件发送正确的XML或过滤'webpartManager.WebParts'(不要忘记加载该属性)以获取您的Web部件。然后将其添加到页面。 – nizzik
我想这是我的问题,因为我认为'SchemaXML'是我正在寻找的XML。 – Kyle