使用Dynamics 365 Web API查询含空值备用键的记录
嘿,我之前也碰到过类似的场景,Dynamics 365 Web API在处理带空值的复合备用键查询时确实有一些需要注意的点,我来分享下可行的解决办法:
解决Dynamics 365 Web API查询含空值的复合备用键记录
首先得明确:Dynamics 365 Web API对复合备用键中的空值查询有特定的语法要求,直接按常规逻辑写可能会踩坑,下面分两种常用方案说明:
1. 直接通过复合键构造查询URL
假设你的实体逻辑名称是new_myentity,三个复合备用键属性分别是new_mystringkey(字符串)、new_myintegerkey(整数)、new_mydecimalkey(小数)。如果要查询new_mystringkey='s1'且new_myintegerkey为null的记录,直接用复合键的语法构造URL即可:
GET [Organization URI]/api/data/v9.2/new_myentity(new_mystringkey='s1',new_myintegerkey=null,new_mydecimalkey=null)
如果只有部分键属性为空,比如仅整数键空,其他有值,就对应修改参数:
GET [Organization URI]/api/data/v9.2/new_myentity(new_mystringkey='s1',new_myintegerkey=null,new_mydecimalkey=1.5)
注意:这里的null不需要加引号,直接写就行;如果是字符串类型的键属性为空,同样用null(比如new_mystringkey=null)。
2. 用$filter做替代查询(兼容性更强)
如果直接用复合键构造的方式在某些Web API版本里不生效,或者你需要组合更多筛选条件,可以改用$filter语法:
GET [Organization URI]/api/data/v9.2/new_myentity?$filter=new_mystringkey eq 's1' and new_myintegerkey eq null and new_mydecimalkey eq 1.5
这种方式更灵活,也能精准匹配含空值的键属性记录。
3. 几个关键注意事项
- URL编码:如果查询参数里有特殊字符(比如空格、特殊符号),需要对URL做编码,但
null和常规字符串/数值不需要额外处理。 - 实体配置验证:确认你已经把三个属性设置为唯一组合的备用键,并且发布了实体更改,否则Web API无法识别这个复合键的查询语法。
- 权限验证:确保你的Web API请求已经通过OAuth 2.0验证,拥有该实体的读取权限。
举个实际的例子,假设你的组织URI是https://contoso.crm.dynamics.com,要查询new_mystringkey='s1'、new_myintegerkey=null、new_mydecimalkey=2.0的记录,完整请求URL就是:
GET https://contoso.crm.dynamics.com/api/data/v9.2/new_myentity(new_mystringkey='s1',new_myintegerkey=null,new_mydecimalkey=2.0)
内容的提问来源于stack exchange,提问作者Daniel Schmid
相关产品推荐
相关产品推荐

