Azure Logic App toLower函数报错,疑字符串函数文档过时及Dynamics CRM OData筛选问题
解决Dynamics CRM OData筛选器中
toLower()函数报错的问题 你遇到的问题其实是两个核心细节导致的,咱们一步步拆解解决:
1. 函数名称的大小写错误
Dynamics CRM(现在通常称为Dataverse)的OData Web API严格遵循OData标准的函数命名规则,字符串转小写的函数是全小写的tolower(),而不是你代码里用的驼峰式toLower()。这就是报错提示"找不到名为'toLower'的未知函数"的直接原因——服务端根本识别不了驼峰写法的函数名。
2. 筛选逻辑的类型不匹配问题
你当前的筛选表达式还有个隐藏bug:concat('hat_', ...) eq true。concat()函数返回的是字符串类型,而true是布尔值,字符串和布尔值直接比较在OData里是不合法的,即使你修复了函数名,这部分逻辑依然会报错。
你需要根据实际需求调整逻辑:
- 如果你是想判断某个字段的值等于拼接后的字符串,应该把目标字段放在等式左边,比如:
"queries": {"$filter": "hat_targetField eq concat('hat_', tolower('@{body('Get_record_(Preview)')?['hat_fundname']}'))"} - 如果你是想检查拼接后的字符串是否非空,可以改成:
"queries": {"$filter": "concat('hat_', tolower('@{body('Get_record_(Preview)')?['hat_fundname']}')) ne ''"}
关于"文档是否过时"的疑问
这并不是文档过时的问题,而是不同OData服务实现的细节差异。有些第三方OData服务可能支持驼峰式的函数名,但Dynamics/Dataverse的Web API严格遵循OData官方规范的全小写函数命名,所以只要用对tolower()(全小写)就可以正常使用,无需怀疑文档有效性。
内容的提问来源于stack exchange,提问作者Eccountable
相关产品推荐
相关产品推荐

