You need to enable JavaScript to run this app. Dynamics365 FO中OData通过filter筛选单实体实现更新删除操作问题
优惠活动
大模型
产品
解决方案
定价
更多

Dynamics365 FO中OData通过filter筛选单实体实现更新删除操作问题

针对Dynamics 365 Finance and Operations SecurityUserRoles实体OData操作问题的解决方案

核心原因说明

Dynamics 365 FO的OData服务不支持在PATCH、DELETE等修改类请求的URL中携带$filter参数匹配资源,无论$filter实际匹配到多少条记录,服务端都会出于数据安全校验直接返回「找到多个资源」的报错。GET请求携带$filter默认返回的就是数组格式,OData标准没有通过$filter直接返回单实体对象的语法。

可行解决方案

方案1:使用组合键直接寻址单实体(推荐)

SecurityUserRoles实体采用组合主键,不需要单独的单字段映射ID,你可以直接将所有主键字段放入请求地址中实现单实体寻址,格式如下:

/data/SecurityUserRoles(UserId='UserIDValue',SecurityRoleIdentifier='11111111-1111-1111-1111-C3C8BC7DB911',Partition='你的分区值',LegalEntityId='所属公司ID')
  • 若分配的是全局安全角色,LegalEntityId传入空字符串即可
  • Partition字段值可以先通过一次GET查询对应记录获取,同一环境的分区值通常固定
    你直接对上述地址发起PATCH、DELETE请求即可正常操作单条记录,不会触发匹配错误。

方案2:通过系统内置RecId字段寻址

Dynamics 365 FO所有实体都内置了全局唯一的RecId字段作为隐藏主键,你可以先通过GET查询获取目标记录的RecId,再用标准单实体格式操作:

  1. 发起GET查询获取RecId:
    /data/SecurityUserRoles?$filter=UserId eq 'UserIDValue' and SecurityRoleIdentifier eq '11111111-1111-1111-1111-C3C8BC7DB911'&$top=1&$select=RecId
  2. 用获取到的RecId构造操作地址:
    /data/SecurityUserRoles(RecId='查询得到的RecId数值')
    对上述地址发起PATCH、DELETE请求即可正常执行。

内容的提问来源于stack exchange,提问作者Oleksii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 08:24:04