How to do a 'null' check in 'if' condition action of Azure Logic App

大憨熊 提交于 2020-08-24 05:46:11

问题


I've created a logic app which contains some trigger, an 'http' connector and then an 'If' condition activity. The 'http' connector returns a 'json' result say jsonObj.

I'm able to check condition as @equal(body('HTTP')['jsonObj'].someProperty,'someValue') but not able to do a null check on that someProperty value.

Below are some ways I tried which are not working.

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

回答1:


I did not found a real way to directly test against null or undefined but the following workaround should work when choosing a sufficient 'random' string as fallback for the coalesce

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

For example the following Logic App would echo back the property prop and whether it was actually specified or not

{
    "$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"
        }
    }
}

so that a request with

{
    "prop": "test"
}

results in

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

whereas a request with

{
    "propOther": "test"
}

results in

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



回答2:


You can now do:

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

It's valid and can be saved but if you try to switch to Basic mode you'll get an error. Can still save though.




回答3:


Another option is to do a string concatenation in the designer and check for a value > '' (a space.)

For example below I am iterating over a set of agents where their email is potentially NULL, joining a null string to an empty string results in an empty string.

This has the advantage of working in both the designer and code view.

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

This end up looking like the following in the code view

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


来源:https://stackoverflow.com/questions/38976744/how-to-do-a-null-check-in-if-condition-action-of-azure-logic-app

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!