通过 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);
}
我正在尝试确定是否可以通过 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 seemsAddWebPart
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);
}