Logic Apps中Compose操作使用IF语句编写表达式报错解决方案
报错核心原因
两个表达式无法通过校验的问题出在语法使用错误:
- 第一版表达式把
outputs('Compose_Priority')、outputs('Compose_Category')两个取值函数用单引号包裹,会被解析器识别为普通文本,不会实际拉取对应Compose操作的输出;同时单引号嵌套直接触发语法解析冲突。 - 第二版表达式错误使用了
@{}插值语法,该语法仅用于设计器静态内容块中拼接动态值,纯表达式编辑场景下不能使用;另外直接在表达式参数中写拼接文本不符合Azure Logic Apps的表达式语法规则。
正确实现方式
场景1:直接返回两个Compose操作的输出
对应条件成立取Compose_Priority输出、不成立取Compose_Category输出的需求,直接去掉函数外层多余的单引号即可,正确表达式如下:
if(contains(outputs('Create_duplicateKey'),'SendVehicleOrder'), outputs('Compose_Priority'), outputs('Compose_Category'))
场景2:返回拼接自定义文本的结果
对应拼接固定文本和动态值的需求,纯表达式中拼接内容需要使用concat()函数,不能直接写插值格式,正确表达式如下:
if(contains(outputs('Create_duplicateKey'),'SendVehicleOrder'), concat('Id: ', items('Loop_through_all_alerts')?['ID']), concat('orderType: ', items('Loop_through_all_alerts')?['OrderType']))
编写表达式的通用注意事项
- 纯表达式编辑模式下,所有函数调用、动态值取值路径都不需要加
@{}包裹,直接书写即可 - 单引号仅用于包裹固定字符串常量,不要把函数、动态取值路径放在单引号内部,否则会被识别为普通文本无法执行
- 多段内容(固定文本+动态值)拼接统一使用
concat()函数,按拼接顺序把各片段作为参数传入即可 - 引用其他操作输出时,操作名必须和设计器中显示的名称完全一致,包含下划线、大小写等格式,否则会触发找不到操作的报错
内容的提问来源于stack exchange,提问作者moderator
相关产品推荐
相关产品推荐

