Как выполнить нулевую проверку в действии условия "если" в приложении Azure Logic

Я создал приложение логики, которое содержит триггер, соединитель «http», а затем действие условия «Если». Коннектор http возвращает результат json, например jsonObj.

Я могу проверить условие как @equal(body('HTTP')['jsonObj'].someProperty,'someValue'), но не могу null проверить это someProperty значение.

Ниже приведены некоторые способы, которые я пробовал, но которые не работают.

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

person Santhosh Ramini    schedule 16.08.2016    source источник
comment
См. также: stackoverflow.com/q/51028620/42223   -  person dreftymac    schedule 25.06.2020


Ответы (3)


Я не нашел реального способа напрямую протестировать null или undefined, но следующий обходной путь должен работать при выборе достаточной «случайной» строки в качестве запасного варианта для 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
}
person DAXaholic    schedule 16.08.2016

Теперь вы можете:

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

Он действителен и может быть сохранен, но если вы попытаетесь переключиться в основной режим, вы получите сообщение об ошибке. Хотя еще можно сэкономить.

person Chris76786777    schedule 07.07.2017
comment
Теперь вы также сможете переключиться в базовый режим, не получая сообщения об ошибке. Нулевое значение преобразуется в токен выражения, значение которого равно нулю при отображении в базовом режиме. - person Joe Chung; 27.02.2018
comment
Использование равно условию, и заполните каждое поле с помощью всплывающего окна редактора выражений, не вводите непосредственно в поля условия. Слева используйте: equals (triggerBody () ['jsonObj']? ['SomeProperty'], null) Справа используйте: true - person Thomas A. Johnson; 27.01.2021

Другой вариант - выполнить конкатенацию строк в конструкторе и проверить значение> '' (пробел).

Например, ниже я выполняю итерацию по набору агентов, у которых их электронная почта потенциально NULL, присоединение нулевой строки к пустой строке приводит к пустой строке.

Это дает то преимущество, что работает как в конструкторе, так и в представлении кода.

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

Это в конечном итоге выглядит следующим образом в представлении кода

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