我在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()
提供价值。
答案 0 :(得分:2)
为什么呢?因为这就是它的写作方式。 ;)
您所看到的是在LogicApp中if()
执行的预期行为。来自LogicApp团队的人提到了这个问题(第9频道?抱歉不要回忆),并且不希望它在短期内发生变化。
如果任何一种情况都可能导致运行时错误,您需要分两步完成。