如何使用 REST API 创建带有 id 的网站内容类型
How to create site content type with id using REST API
我想创建新的内容类型,它将成为现有内容类型的子内容类型 - 使用 REST 的工作流任务 (SharePoint 2013) API。
因此,当我创建请求时,我将父内容类型 ID 包含在新 ID 中。
我试过下面的代码。
const api = '/_api/web/contenttypes';
const requestBody = {
'__metadata': {
'type': 'SP.ContentType',
},
'Description': 'This is content type',
'Name': 'TestContentType',
'Group': 'TestContentTypeGroup',
'Id': {
'__metadata': {
'type': 'SP.ContentTypeId'
},
'StringValue': '0x0108003365C4474CAE8C42BCE396314E88E51F000x010056401AE39A088645AD0597364A428033'
}
};
const requestHeaders = {
'accept': 'application/json;odata=verbose',
'content-type': 'application/json;odata=verbose',
'X-RequestDigest': <digestValue>
};
const requestData = JSON.stringify(requestBody);
var executor = new SP.RequestExecutor(<AppWebUrl>);
executor..executeAsync({
url: '<BaseUrl>' + api,
method: 'POST',
body: requestData,
headers: requestHeaders,
success: res => {
console.log(res);
},
error: error => {
console.log(error);
}
});
它确实创建了新的内容类型 TestContentType 但它继承自 Item 内容类型并且它没有我提供的相同 ID在请求中。它随机生成任何id。
有人可以帮忙吗?
这实际上是 REST 中的一个错误 API...
这是针对 PnP JS 库提交的一个 link 问题,其中添加内容类型的实现方式与您所做的相同:https://github.com/pnp/pnpjs/issues/457
Patrick Rodgers 也向 Microsoft 提交了一个问题来解决它:https://github.com/SharePoint/sp-dev-docs/issues/3276
这意味着目前,不幸的是,没有办法用 REST 来做到这一点。
您可以做的是对该问题进行投票,以提高它的知名度,并希望它能尽快得到解决。
据我所知,这个错误仍然存在。我找到了可以帮助无法使用 CSOM 或 JSOM 的人的解决方法。您可以使用 Site script to define new site content type and specify parent content type 名称或 ID。您可以将此站点脚本包装在站点设计中并通过 REST API 应用此站点设计。
不幸的是,只有当您在不同的网站上创建相同的网站内容类型时,此解决方法才有用。当然,您可以为每种内容类型创建多个站点脚本和站点设计。
我想创建新的内容类型,它将成为现有内容类型的子内容类型 - 使用 REST 的工作流任务 (SharePoint 2013) API。 因此,当我创建请求时,我将父内容类型 ID 包含在新 ID 中。
我试过下面的代码。
const api = '/_api/web/contenttypes';
const requestBody = {
'__metadata': {
'type': 'SP.ContentType',
},
'Description': 'This is content type',
'Name': 'TestContentType',
'Group': 'TestContentTypeGroup',
'Id': {
'__metadata': {
'type': 'SP.ContentTypeId'
},
'StringValue': '0x0108003365C4474CAE8C42BCE396314E88E51F000x010056401AE39A088645AD0597364A428033'
}
};
const requestHeaders = {
'accept': 'application/json;odata=verbose',
'content-type': 'application/json;odata=verbose',
'X-RequestDigest': <digestValue>
};
const requestData = JSON.stringify(requestBody);
var executor = new SP.RequestExecutor(<AppWebUrl>);
executor..executeAsync({
url: '<BaseUrl>' + api,
method: 'POST',
body: requestData,
headers: requestHeaders,
success: res => {
console.log(res);
},
error: error => {
console.log(error);
}
});
它确实创建了新的内容类型 TestContentType 但它继承自 Item 内容类型并且它没有我提供的相同 ID在请求中。它随机生成任何id。
有人可以帮忙吗?
这实际上是 REST 中的一个错误 API...
这是针对 PnP JS 库提交的一个 link 问题,其中添加内容类型的实现方式与您所做的相同:https://github.com/pnp/pnpjs/issues/457
Patrick Rodgers 也向 Microsoft 提交了一个问题来解决它:https://github.com/SharePoint/sp-dev-docs/issues/3276
这意味着目前,不幸的是,没有办法用 REST 来做到这一点。 您可以做的是对该问题进行投票,以提高它的知名度,并希望它能尽快得到解决。
据我所知,这个错误仍然存在。我找到了可以帮助无法使用 CSOM 或 JSOM 的人的解决方法。您可以使用 Site script to define new site content type and specify parent content type 名称或 ID。您可以将此站点脚本包装在站点设计中并通过 REST API 应用此站点设计。 不幸的是,只有当您在不同的网站上创建相同的网站内容类型时,此解决方法才有用。当然,您可以为每种内容类型创建多个站点脚本和站点设计。