2017-10-19 72 views
1

如何使用rest更改列表项的页面布局?如何在SharePoint REST中设置列表项的页面布局?

下面的代码在过程中被使用,并且代码被执行,但是页面布局不会改变。请指教。

itemProperties['PublishingPageLayout'] = { 
      'type': 'SP.FieldUrlValue', 
       __metadata: { type: 'SP.FieldUrlValue' }, 
       Description: 'Custom Content Layout', 
       Url: '/_catalogs/masterpage/CustomPage.aspx' 
      }; 
function updateDocLibItem(url, itemType, itemProperties, etagId) { 
    itemProperties["__metadata"] = { "type": itemType }; 
    return $.ajax({ 
     url: url, 
     type: "POST", 
     contentType: "application/json;odata=verbose", 
     data: JSON.stringify(itemProperties), 
     headers: { 
      "Accept": "application/json;odata=verbose", 
      "X-RequestDigest": $("#__REQUESTDIGEST").val(), 
      "X-HTTP-Method": "MERGE", 
      "If-Match": etagId 
     }, 
     }); 
} 

回答

1

它不支持通过SharePoint REST API更新PublishingPageLayout字段值,因为字段被标记为ReadOnly

解决方法

JSOM API可以利用代替更新页面布局所证明如下:

var itemIdToUpdate = 3; 

var ctx = SP.ClientContext.get_current(); 
var listPages = ctx.get_web().get_lists().getByTitle("Pages"); 
var pageItem = listPages.getItemById(itemIdToUpdate); 

var val = new SP.FieldUrlValue(); 
val.set_url("/_catalogs/masterpage/ArticleLeft.aspx"); 
val.set_description("Blank Web Part page"); 
pageItem.set_item("PublishingPageLayout",val); 
pageItem.update(); 

ctx.executeQueryAsync(
    function() { 
     console.log("Updated");  
    }, 
    function(sender,args){ 
    console.log(args.get_message()); 
    }); 

W使用JSOM/CSOM API可以更新标有ReadOnly属性的字段。

+1

谢谢@Vadim,我设法使用JSOM来完成它。 –