【问题标题】:How to do a 'null' check in 'if' condition action of Azure Logic App如何在 Azure Logic App 的“if”条件操作中执行“null”检查
【发布时间】:2016-08-16 13:50:17
【问题描述】:

我创建了一个逻辑应用,其中包含一些触发器、一个“http”连接器和一个“If”条件活动。 “http”连接器返回一个“json”结果,例如 jsonObj

我可以检查@equal(body('HTTP')['jsonObj'].someProperty,'someValue') 的条件,但无法检查nullsomeProperty 值。

以下是我尝试过的一些无效的方法。

@equal(body('HTTP')['jsonObj'].someProperty, null) --Unable to save
@equal(body('HTTP')['jsonObj']?.someProperty,'null') --Comparing with string value 'null'

【问题讨论】:

标签: json azure azure-logic-apps


【解决方案1】:

您现在可以这样做:

 @equals(triggerBody()['jsonObj']?['someProperty'], null)

它是有效的,可以保存,但如果你尝试切换到基本模式,你会得到一个错误。不过还是可以保存的。

【讨论】:

  • 您现在应该也可以切换到基本模式而不会出现错误。将 null 值转换为在基本模式下显示时值为 null 的表达式标记。
  • 使用“等于”条件并使用表达式编辑器弹出窗口填写每个框,不要直接在条件字段中输入。左边用:equals(triggerBody()['jsonObj']?['someProperty'], null) 右边用:true
【解决方案2】:

我没有找到直接测试nullundefined但下面的解决方法应该在选择足够的“随机”字符串作为coalesce

...
"propExists": "@equals(coalesce(triggerBody()?.prop, 'Fallback42'), 'Fallback42')"
...

例如,以下逻辑应用将回显属性 prop 以及它是否实际指定

{
    "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
    "actions": {
        "Response": {
            "inputs": {
                "body": {
                    "propNull": "@equals(coalesce(triggerBody()?.prop, 'undefined'), 'undefined')",
                    "prop": "@triggerBody()?.prop"
                },
                "statusCode": 200
            },
            "runAfter": {},
            "type": "Response"
        }
    },
    "contentVersion": "1.0.0.0",
    "outputs": {},
    "parameters": {},
    "triggers": {
        "request": {
            "inputs": {
                "schema": {}
            },
            "kind": "Http",
            "type": "Request"
        }
    }
}

这样一个请求用

{
    "prop": "test"
}

结果

{
  "prop": "test",
  "propNull": false
}

而带有

的请求
{
    "propOther": "test"
}

结果

{
  "prop": null,
  "propNull": true
}

【讨论】:

    【解决方案3】:

    另一种选择是在设计器中进行字符串连接并检查值 > ''(空格)。

    例如,下面我正在迭代一组代理,其中他们的电子邮件可能为 NULL,将一个空字符串连接到一个空字符串会导致一个空字符串。

    这具有同时在设计器和代码视图中工作的优势。

    @concat('', items('iterateAgents')?['email'])
    

    这最终在代码视图中如下所示

                    "expression": {
                        "and": [
                            {
                                "greater": [
                                    "@concat('', items('iterateAgents')?['email'])",
                                    "  "
                                ]
                            }
                        ]
                    },
    

    2021 您现在还可以在 if 语句中执行以下操作,使用 EQUALS 语句检查值是否为 null,如果为 null,则返回已知值,您可以检查该值。否则返回你感兴趣的实际值。

    if( equals(body('basicEventJSON')?['type'], null), '_IS_NULL_VALUE',body('basicEventJSON')?['type'])
    

    【讨论】:

      【解决方案4】:

      就我而言,我遇到了三种情况:

      • 当属性是 { "MyProperty" : "SomeValue" }
      • 当属性为空时{ "MyProperty" : null }
      • 根本不传递属性时。 { }

      建议的解决方案不适合我,所以我用这两个简单的表达式来涵盖三个场景:

      contains (triggerBody(), 'MyProperty') - 检查属性是否存在并传递了某个值或 null coalesce (triggerBody()?['MyProperty'], 'NULL') 使用属性值或回退到 null 情况

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-24
        • 1970-01-01
        • 2019-11-22
        • 2012-07-06
        • 1970-01-01
        相关资源
        最近更新 更多