我试图找出是否可以通过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>
有什么想法吗?
答案 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);
}