基于文件名触发Logic App工作流的条件配置是否正确?
基于文件名的Logic App触发条件配置问题分析
当前你使用的条件表达式存在错误,无法正确匹配文件名:
@or(contains(triggerBody()?['Name'],'example.csv'),contains(triggerBody()?['Name'],'Hello.csv'))
问题原因
从你提供的触发器请求体示例来看,根节点不存在Name字段,所以triggerBody()?['Name']会返回空值,导致条件永远无法匹配,或者无法按预期过滤触发事件。
正确的配置方式
根据请求体结构,文件名可以从以下两个字段提取,对应两种条件表达式写法:
方式1:从subject字段提取文件名
subject字段格式为/blobServices/default/containers/{容器名}/blobs/{文件名},可以通过拆分路径获取最后一段作为文件名:
@or( equals(last(split(triggerBody()?['subject'], '/')), 'hello.csv'), equals(last(split(triggerBody()?['subject'], '/')), 'example.csv') )
如果需要忽略大小写匹配,可以用toLower()转换:
@or( equals(toLower(last(split(triggerBody()?['subject'], '/'))), 'hello.csv'), equals(toLower(last(split(triggerBody()?['subject'], '/'))), 'example.csv') )
方式2:从data.blobUrl/data.url字段匹配
也可以直接匹配Blob URL中的文件名(建议加上斜杠避免误匹配类似testexample.csv的文件):
@or( contains(triggerBody()?['data']?['blobUrl'], '/hello.csv'), contains(triggerBody()?['data']?['blobUrl'], '/example.csv') )
更高效的替代方案
其实不需要在工作流里加条件判断,直接在Blob存储触发器的配置界面,设置Blob名称筛选器:
- 选择“以特定后缀结尾”,输入
.csv后再指定具体文件名; - 或者选择“包含特定文本”,直接填写目标文件名(注意区分大小写)。
触发器层面的过滤会直接拦截不符合条件的事件,减少不必要的工作流触发次数,比在工作流里加条件更高效。
内容的提问来源于stack exchange,提问作者Mostafa Bouzari
相关产品推荐
相关产品推荐

