使用 Project Online 的共享点 REST API 在创建自定义字段时设置所需的 EntityType

问题描述 投票:0回答:1

我一直在努力使用 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 调用来更改实体类型,但无济于事。

我根本无法让它工作,而且我找不到任何文档来说明我是否做错了,或者它是否不可能。

谢谢。

sharepoint odata ms-project ms-project-server-2013 project-online
1个回答
0
投票

我设法在 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"
    }
}

我希望这对其他人有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.