OData 使用过滤器选择单个实体

OData selecting single entity using filter

我知道,这个问题听起来有点奇怪,因为根据 OData 文档,如果您想 select 一个单一的实体,您应该使用像这样的请求 /端点('entityID')

但是,我需要使用 Dynamics365 Finance and Operations,并且需要使用安全角色。

如果我需要 select 我可以使用的所有角色映射:

/data/SecurityUserRoles

结果如下:

{
    "@odata.context": "https://****.dynamics.com/data/$metadata#SecurityUserRoles",
    "value": [
        {
            "@odata.etag": "W/\"JzEsNTYzNzc2NjQwNSc=\"",
            "UserId": "UserIDValue",
            "SecurityRoleIdentifier": "11111111-1111-1111-1111-C3C8BC7DB911",
            "AssignmentStatus": "Enabled",
            "AssignmentMode": "Manual",
            "SecurityRoleName": "Some Role Name",
            "UserLicenseType": "Enterprise"
        } ]
}

没有映射的 ID,所以如果我想获得单个映射,我可以使用这样的请求:

/data/SecurityUserRoles?$filter=UserId eq 'UserIDValue' and SecurityRoleIdentifier eq '11111111-1111-1111-1111-C3C8BC7DB911'

效果不错。然而,它 return 的数据格式相同,如上面的响应 - 'value' 包含记录数组,即使它是单个记录。 一切都会好起来的,但我需要 PATCH 或 DELETE 这个映射。陷阱是,如果我 运行 PATCH 或 DELETE 使用相同的过滤器请求 - 我会得到错误:

More than one resource was found when selecting for update.

这很清楚,因为'value'包含数组,使用过滤器后。 有什么方法可以使用过滤器 return 单个实体,所以 'value' 不会包含数组,而只是一个对象? 或者也许还有其他一些方法可以在不知道 ID 的情况下引用此类对象?

提前致谢

如果有人正在寻找相同的解决方案,这里是解决方案:

您不需要使用过滤器。您可以使用以下请求获取特定实体:

/data/SecurityUserRoleAssociations(UserId ='UserIDValue',SecurityRoleIdentifier='11111111-1111-1111-1111-C3C8BC7DB911')

此请求将 return 单个实体(不是数组),您可以使用此实体执行您需要的所有操作 - 例如 PATCH、DELETE。