ADF删除活动表达式优化:目标文件夹不存在时无操作
问题分析与解决方案
核心错误原因
你之前的条件判断逻辑存在本质问题:equals(activity('Get Metadata1').output.childItems, '[]')是将数组类型的childItems与字符串类型的'[]'做比较,两者类型完全不同,equals永远返回false。因此not(equals(...))永远为true,不管load目录下有没有文件夹,都会执行concat分支里的childItems[0]['name'],当数组为空时就触发了索引越界错误。
正确表达式写法
需要用ADF内置的数组判断函数来检查childItems是否为空,同时利用表达式的短路求值特性(条件不满足时,不会执行对应分支的表达式)。
方案1:用empty()判断数组是否为空
@if(not(empty(activity('Get Metadata1').output.childItems)), concat(item().layer, '/load/', activity('Get Metadata1').output.childItems[0]['name']), null)
方案2:用length()判断数组长度
@if(greater(length(activity('Get Metadata1').output.childItems), 0), concat(item().layer, '/load/', activity('Get Metadata1').output.childItems[0]['name']), null)
方案3:结合first()函数简化写法
first()函数返回数组第一个元素,由于我们已经通过条件确保数组非空,所以可以安全使用:
@if(not(empty(activity('Get Metadata1').output.childItems)), concat(item().layer, '/load/', first(activity('Get Metadata1').output.childItems)['name']), null)
逻辑验证
当load目录下有文件夹时,childItems是非空数组,条件判断为true,执行concat生成正确路径;当目录为空时,条件判断为false,直接返回null,删除活动会因路径为null跳过执行,避免报错。
内容的提问来源于stack exchange,提问作者Ifeanyi
相关产品推荐
相关产品推荐

