Sharepoint online 如何使用RESTAPI创建id为的站点内容类型

Sharepoint online 如何使用RESTAPI创建id为的站点内容类型,sharepoint-online,Sharepoint Online,我想使用REST API创建新的内容类型,它将是现有内容类型-工作流任务(SharePoint 2013)的子内容类型。 所以,当我创建请求时,我会在新Id中包含父内容类型Id 我尝试了以下代码 const api = '/_api/web/contenttypes'; const requestBody = { '__metadata': { 'type': 'SP.ContentType', }, 'Descrip

我想使用REST API创建新的内容类型,它将是现有内容类型-工作流任务(SharePoint 2013)的子内容类型。 所以,当我创建请求时,我会在新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);
        }
    });
constapi='/_-api/web/contenttypes';
const requestBody={
“\u元数据”:{
“类型”:“SP.ContentType”,
},
“描述”:“这是内容类型”,
“名称”:“TestContentType”,
“组”:“TestContentTypeGroup”,
“Id”:{
“\u元数据”:{
“类型”:“SP.ContentTypeId”
},          
“StringValue”:“0x0108003365C4474CAE8C42BCE396314E88E51F000X010056401AE39A0886445AD0597364A428033”
}
};
const requestHeaders={
“accept”:“application/json;odata=verbose”,
“内容类型”:“应用程序/json;odata=verbose”,
“X-RequestDigest”:
};
const requestData=JSON.stringify(requestBody);
var executor=new SP.RequestExecutor();
执行者..执行同步({
url:''+api,
方法:“POST”,
正文:请求数据,
headers:requestHeaders,
成功:res=>{
控制台日志(res);
},
错误:错误=>{
console.log(错误);
}
});
它确实创建了新的内容类型TestContentType,但它继承自项目内容类型,并且它没有我在请求中提供的相同Id。它随机生成任何id


有人能帮忙吗?

这实际上是RESTAPI中的一个bug

下面是一个指向PnP JS库的问题的链接,其中添加内容类型的实现方式与您所做的相同:

Patrick Rodgers还向Microsoft提交了一个问题以解决该问题:

这意味着,不幸的是,就目前而言,REST无法做到这一点。
你所能做的就是升级这个问题,让它更具可见性,并希望它能很快得到解决。

据我所知,这个错误仍然存在。我找到了一种解决方法,可以帮助那些不能使用CSOM或JSOM的人。您可以使用名称或Id。此网站脚本可以包装在网站设计中,并通过REST API应用此网站设计。 不幸的是,只有在不同站点上创建相同的站点内容类型时,此变通方法才有用。当然,您可以为每种内容类型创建多个站点脚本和站点设计