为什么Logic Apps' if()表达式同时执行两个代码路径?

时间:2018-03-16 15:47:30

标签: azure azure-logic-apps

我在Logic App上遇到失败,因为if()表达式正在执行true和false路径。如果执行错误路径将会失败,这就是为什么我把它放在if()中的原因。

表达式是:

if(empty(triggerBody()?['data']?['eta']), null, formatDateTime(triggerBody()?['data']?['eta'], 'yyyy-MM-dd'))

我也尝试过:

if(equals(triggerBody()?['data']?['eta'], null), null, formatDateTime(triggerBody()?['data']?['eta'], 'yyyy-MM-dd'))

数据为空:

...
"data": {
    "eta": null,
...

我已经通过将formatDateTime()替换为类似'不为空的字符串来测试这一点。当我这样做时,我得到预期的输出(null)并且没有失败。

更新:来自Logic Apps团队的人建议以下选项:

@if(empty(triggerBody()?['data']?['eta']), null, formatDateTime(coalesce(triggerBody()?['data']?['eta'], '1999-01-01'), 'yyyy-MM-dd'))

此处建议使用coalesce(),因为它返回第一个非null结果。因此,通过这种方式,我至少可以确保为formatDateTime()提供价值。

1 个答案:

答案 0 :(得分:2)

为什么呢?因为这就是它的写作方式。 ;)

您所看到的是在LogicApp中if()执行的预期行为。来自LogicApp团队的人提到了这个问题(第9频道?抱歉不要回忆),并且不希望它在短期内发生变化。

如果任何一种情况都可能导致运行时错误,您需要分两步完成。