嵌套函数的Project Online OData URL查询报错原因及替代方案咨询
Project Online OData嵌套函数查询报错的原因与解决方案
报错原因
Project Online的OData服务基于OData v3规范,不支持在函数参数中嵌套其他函数调用。你写出的substring(ResourceName, indexof(ResourceName,','),10)里,把indexof作为substring的参数传入,这种嵌套语法超出了它的解析能力,导致服务器无法处理请求,返回"处理请求时出错"的提示。
可行替代方案
1. 客户端侧二次过滤
先通过基础查询获取包含逗号的资源记录,再在客户端完成最终的子串筛选:
- 第一步发起的OData查询:
$filter=contains(ResourceName, ',') - 客户端处理示例(以PowerShell为例):
遍历返回的结果集,对每条记录的ResourceName执行$subStr = $resource.ResourceName.Substring($resource.ResourceName.IndexOf(',') + 1, 10),再判断$subStr是否等于'example'。
2. 添加自定义计算列(需编辑权限)
如果拥有Project Online的字段编辑权限,可以创建一个计算列提前处理子串逻辑:
- 计算列公式(提取逗号后前10个字符):
LEFT(RIGHT(ResourceName, LEN(ResourceName)-FIND(",", ResourceName)),10) - 之后直接查询这个计算列:
$filter=计算列名称 eq 'example'
3. 非嵌套函数组合(限特定场景)
如果'example'是逗号后内容的开头,可以尝试用contains+startswith的组合(部分环境可能支持):
$filter=contains(ResourceName, ',') and startswith(substring(ResourceName, FIND(",", ResourceName)+1), 'example')
注:该写法兼容性不稳定,建议优先测试,不生效则切换到前两种方案。
内容的提问来源于stack exchange,提问作者Eyass Shahoud
相关产品推荐
相关产品推荐

