sharepoint 2013更改了CSOM中的现有发布页面布局

Zho*_*min 3 sharepoint csom

我需要使用CSOM来更改发布网络中现有发布页面的页面布局.我看到有CSOM对象PublishingWeb,但缺少获取发布页面的方法.

Vad*_*hev 8

尽管在SharePoint 2013 CSOM 中引入了新的Microsoft.SharePoint.Client.Publishing命名空间,但与SSOM相比,它仍然是相对有限的API.例如,CSOM PublishingPage类不公开Layout像SSOM财产PublishingPage .

如何使用SharePoint CSOM为发布页面设置页面布局

以下示例允许在SharePoint 2010/2013中使用CSOM设置页面布局:

pageItem["PublishingPageLayout"] = new FieldUrlValue() { Url = "<page layout server relative url>", Description = "<page layout name>" };
Run Code Online (Sandbox Code Playgroud)

以下示例演示如何为Blank Web Part page页面设置页面布局:

var pagesList = ctx.Web.Lists.GetByTitle("Pages");
var pageItem = pagesList.GetItemById(listItemId);
pageItem["PublishingPageLayout"] = new FieldUrlValue() { Url = "/_catalogs/masterpage/BlankWebPartPage.aspx", Description = "Blank Web Part page" };
pageItem.Update();
ctx.ExecuteQuery();
Run Code Online (Sandbox Code Playgroud)

如何设置列表项的内容类型

要为列表项设置内容类型,必须在列表中提供内容类型.以下方法用于此目的:

public static void SetListItemContentType(ListItem item, ContentType contentType)
{
    var ctx = item.Context;
    //1. Ensure Content Type is available in List
    var list = item.ParentList;
    var result = ctx.LoadQuery(list.ContentTypes.Where(ct => ct.Name == contentType.Name));
    ctx.ExecuteQuery();
    var listContentType = result.FirstOrDefault();
    if (listContentType == null)
    {
        list.ContentTypes.AddExistingContentType(contentType);
        list.Update();
        ctx.ExecuteQuery();
    }
    //2. Set Content Type for List Item 
    item["ContentTypeId"] = contentType.Id;
    item.Update();
    ctx.ExecuteQuery();
}
Run Code Online (Sandbox Code Playgroud)

用法

 var result = ctx.LoadQuery(ctx.Site.RootWeb.AvailableContentTypes.Where(ct => ct.Name == "Contoso Article Page"));
 ctx.ExecuteQuery();
 var pageContentType = result.FirstOrDefault();

 var pagesList = ctx.Web.Lists.GetByTitle("Pages");
 var pageItem = pagesList.GetItemById(7);
 SetListItemContentType(pageItem, pageContentType);
Run Code Online (Sandbox Code Playgroud)