我有一个
Lookup activity
,我可以在其中检查 Kusto (ADX) 值是 true 还是 false,然后我可以运行下一个 Lookup activity
,最后运行基于第二个查找值的 For Each activity
。
问题是,如果条件为真,我只想运行第二个
Lookup
和For Each
,但ADF不允许For Each
位于If Activity
内部,而且我已经有很多管道了调用子管道(我讨厌这种解决方案,因为它变得如此丑陋,并且不知何故看起来对于同一个解决方案来说它非常重复)。
有没有办法在运行
For Each
之前检查这一点?我尝试了验证活动,但看起来它不接受来自 Lookup
的值,仅接受来自 Dataset
的值。
这是我目前的逻辑:
但在这种情况下它不起作用,因为无论条件为真还是假,For Each 都会始终运行。
您可以使用 Do-if-skip-else-block 错误处理方法作为此场景的解决方法。
首先在管道变量部分创建一个整型变量。现在,采用一个设置变量并给出您的 if 活动条件。
@if(<Your if activity expression>,1,'1')
在这里,我使用
True
和 False
作为 if 活动表达式结果。此设置变量活动充当 if 活动,其成功和失败将充当 if 和 else 场景。
在此设置变量活动成功时添加您的 True 活动,在其失败时添加 False 活动。在 True 活动的最后一个活动之后,在跳过最后一个活动时添加一个样本集变量活动。
您可以查看这个错误处理方法的汇总表来了解这种方法。
这里,如果您的 if 表达式为
true
,则上述表达式会将整数值 1
赋给整型变量 var1
,并且活动成功。然后您的 True 活动将与您的 For-Each 一起执行。
如果表达式结果为
False
,则上述表达式会将字符串值 '1'
分配给整型变量,从而导致活动失败。然后你的 False 活动将被执行。
在这种阻止管道失败的方法中,如“Do-if-else 块”,在跳过最后一个 True 活动时使用了额外的设置变量活动。这继承了上面的假 if 活动失败时的管道。