通过 REST 添加/导入 Sharepoint 2013 WebPart API

Add / Import Sharepoint 2013 WebPart via REST API

我正在尝试确定是否可以通过 REST 导入 Web 部件 API。

我见过各种 CSOM 这样做的例子,例如 How to add a Web Part into a SitePages/Home.aspx using CSOM

我导出了一个 ListView Web 部件,所以我有一个 XML Web 部件定义文件。

我可以成功调用 https://mysite.sharepoint.com/subsite/_api/web/getfilebyserverrelativeurl('/subsite/Pages/Info.aspx')/getlimitedwebpartmanager(scope=0)

importWebPart 的终点似乎存在,例如 https://mysite.sharepoint.com/subsite/_api/web/getfilebyserverrelativeurl('/subsite/Pages/Info.aspx')/getlimitedwebpartmanager(scope=0)/importWebPart

但是我想不通what/how到post对吧,webpart定义是XML,但是如果我POST那么API 不出所料地说 "Not well formatted JSON stream".

有什么想法吗?

此错误很可能是因为 parameters 属性 以无效格式提供,下面的示例演示了如何调用 ImportWebPart 方法:

Endpoint /_api/web/getfilebyserverrelativeurl('<pageurl>')/getlimitedwebpartmanager(1)/ImportWebPart

Parameters { webPartXml : <webpartxml> }

HTTP method POST

Note: despite ImportWebPart method is supported via REST API, it seems AddWebPart method on the contrary is not supported at the moment making the operation for adding web part on the page not applicable


例子

var webPartXml = '<?xml version="1.0" encoding="utf-8"?>' +
'<WebPart xmlns="http://schemas.microsoft.com/WebPart/v2">' +
    '<Assembly>Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c</Assembly>' + 
    '<TypeName>Microsoft.SharePoint.WebPartPages.ContentEditorWebPart</TypeName>' + 
    '<Title>$Resources:core,ContentEditorWebPartTitle;</Title>' +
    '<Description>$Resources:core,ContentEditorWebPartDescription;</Description>' +
    '<PartImageLarge>/_layouts/15/images/mscontl.gif</PartImageLarge>' +
'</WebPart>';
var zoneId = "TopColumnZone";
var zoneIndex = 0;
var pageUrl = _spPageContextInfo.webServerRelativeUrl + "/Pages/default.aspx"; 

importWebPart(_spPageContextInfo.webAbsoluteUrl, pageUrl ,webPartXml,zoneId,zoneIndex)
.done(function(result)
{
    console.log('Web part has been imported successfully');
})
.fail(function(error){
    console.log(JSON.stringify(error));
});

哪里

function importWebPart(webUrl, pageUrl,webPartXml,zoneId,zoneIndex){
    var url = webUrl + "/_api/web/getfilebyserverrelativeurl('" + pageUrl + "')/getlimitedwebpartmanager(1)/ImportWebPart";
    var properties = {"webPartXml": webPartXml};
    return executeJson({
        "url" :url,
        "method": 'POST',
        "payload": properties})
}

function executeJson(options) 
{
    var headers = options.headers || {};
    var method = options.method || "GET";
    headers["Accept"] = "application/json;odata=verbose";
    if(options.method == "POST") {
        headers["X-RequestDigest"] = $("#__REQUESTDIGEST").val();
    }   

    var ajaxOptions = 
    {       
       url: options.url,   
       type: method,  
       contentType: "application/json;odata=verbose",
       headers: headers
    };
    if("payload" in options) {
      ajaxOptions.data = JSON.stringify(options.payload);
    }  

    return $.ajax(ajaxOptions);
}