NAV2017 OdataV4使用or组合多个过滤分组报错的原因及解决方案问询
报错原因
Dynamics NAV 2017的OData V4服务端存在原生实现限制:不支持针对同一字段使用or运算符组合多组范围过滤条件。即使你的查询语法完全符合OData V4标准,也会返回The OData filter expression is not supported.的501错误,该问题属于NAV 2017版本自身的功能缺陷,和查询语法、调用代码无关。
可行的多范围筛选实现方案
方案1:客户端拆分请求合并结果
将每个筛选范围拆分为独立的OData查询请求,并行发送后在客户端对返回结果进行合并去重。如果要降低HTTP请求开销,可将多个查询封装为一个OData Batch请求批量提交。
单范围请求语法和你之前可正常运行的写法一致:http://myaddress/.../AccountList?$filter=No ge '1600' and No le '1699'该方案无需修改NAV后台配置,适配性最高,适合筛选范围数量不多的场景。
方案2:NAV端自定义查询服务
在NAV开发环境中新建自定义查询对象或代码单元,暴露为OData Web服务,新增专门接收范围字符串的参数(可直接传入你提到的1600-1699,2000-2099格式内容),在NAV服务端自行解析参数完成过滤逻辑后返回结果。
该方案查询效率最高,尤其适合筛选范围多、数据量较大的场景,但需要持有NAV的开发权限。方案3:替换为支持的过滤函数组合(仅适配固定长度编码场景)
如果你的No字段为固定4位的数字字符串,可使用startswith等NAV支持的过滤函数组合实现类似效果,比如筛选16、20开头的4位编码可写为:http://myaddress/.../AccountList?$filter=startswith(No, '16') or startswith(No, '20')该方案仅适合前缀匹配即可覆盖筛选范围的场景,灵活度较低。
内容的提问来源于stack exchange,提问作者MaweMawe
相关产品推荐
相关产品推荐

