在使用 CSOM 进行初始部署后将 SharePoint 列表 Web 部件添加到特定页面
Adding SharePoint list webpart to a Specific Page after Initial deployment with CSOM
在部署我的共享点网站期间,我创建了一些列表,我想以编程方式将其添加到主页,但找不到任何有效的列表。
现在,我收到以下错误:
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);
希望对您有所帮助。
在部署我的共享点网站期间,我创建了一些列表,我想以编程方式将其添加到主页,但找不到任何有效的列表。
现在,我收到以下错误:
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);
希望对您有所帮助。