我一直在努力使用 Sharepoints REST API 为 Microsoft Project Web App 创建自定义字段。总而言之,我想在部署我们的产品之前创建几个自定义字段以便于设置。 我设法创建自定义字段,尽管我无法将它们设置为正确的实体类型。
我尝试了几种不同的路线:
选项 1:
POST https://tenantname.sharepoint.com/sites/pwa/_api/ProjectServer/CustomFields
Content-Type: application/json;odata=verbose
{
"__metadata": {"type": "PS.CustomField"},
"Description": "A Custom Field",
"Name": "Custom Field 1",
"FieldType":21,
"EntityType":{
"__metadata":{
"type":"PS.EntityType"
},
"Name":"Task"
}
}
这将返回 201,其中 EntityType 设置为“Project”而不是“Task”。
选项2:
POST https://tenantname.sharepoint.com/sites/pwa/_api/ProjectServer/CustomFields/Add
Content-Type: application/json;odata=verbose
{
"parameters": {
"Name": "Custom Field1",
"Description": "A Custom Field",
"FieldType": 21,
"EntityType": {
"Name": "Task"
}
}
}
此命令返回一条错误消息,指出: “属性“EntityType”在类型“PS.CustomFieldCreationInformation”上不存在。请确保仅使用由该类型定义的属性名称。”
这让我感到困惑,根据文档 CustomFieldCreationInformation should 具有属性“EntityType”。 (https://learn.microsoft.com/en-us/previous-versions/office/project-javascript-api/jj668876(v=office.15)) (我还尝试了有效负载中entityType的不同大小写) 如果我跳过 EntityType 属性,它会毫无问题地返回 201,因此端点至少可以工作。
我通常尝试过这些调用的不同变体,例如尝试使用 EntityType 作为原始值并将其直接设置为“任务”,我尝试过 content-type: application/json;odata=nometadata 以及 application /atom+xml,我在创建后尝试了 PUT 和 MERGE 调用来更改实体类型,但无济于事。
我根本无法让它工作,而且我找不到任何文档来说明我是否做错了,或者它是否不可能。
谢谢。
我设法在 GitHub 上找到此文档,其中指出 EntityType 不可使用 REST 进行写入,但有一个名为 EntityTypeId 的属性可以使用 REST 进行写入。
EntityTypeId 由 GUID 组成,可以在以下位置找到: https://tenantname.sharepoint.com/sites/pwa/_api/ProjectServer/EntityTypes/TaskEntity 表示“任务”,.../ProjectEntity 表示“项目”,.../ResourceEntity 表示“资源”。
因此,在获取所述 GUID 后,我们可以发布此内容:
POST https://tenantname.sharepoint.com/sites/pwa/_api/ProjectServer/CustomFields/Add
Content-Type: application/json;odata=verbose
{
"parameters": {
"Name": "Custom Field1",
"Description": "A Custom Field",
"FieldType": 21,
"EntityTypeId": "GUID-ACQUIRED-FROM-EARLIER"
}
}
我希望这对其他人有帮助!