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。
我知道,这个问题听起来有点奇怪,因为根据 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。