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

时间:2016-05-05 16:49:12

标签: rest sharepoint sharepoint-2013 web-parts

我试图找出是否可以通过REST API导入Web部件。

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

我已导出ListView Web部件,因此我有一个XML webpart定义文件。

我可以成功打电话 https://mysite.sharepoint.com/subsite/_api/web/getfilebyserverrelativeurl(' /subsite/Pages/Info.aspx')/ getlimitedwebpartmanager(范围= 0)

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

但是我无法弄清楚发布到什么/如何发布,webpart定义是XML,但是如果我发布了那么,那么API不出所料地说&#34;格式不正确的JSON流&#34;。< / p>

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

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

  

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

     

参数 { webPartXml : <webpartxml> }

     

HTTP方法 POST

     

注意:尽管通过REST API支持ImportWebPart方法,但它   似乎AddWebPart方法相反,支持   在页面上添加Web部件的操作时刻不适用

示例

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);
}