Как выполнить "нулевую" проверку действия условия "if" приложения Azure Logic
Я создал приложение логики, которое содержит некоторый триггер, "http" -коннектор и затем условие "If". Разъем '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'
4 ответа
Я не нашел реального способа напрямую протестировать против 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
}
Теперь вы можете сделать:
@equals(triggerBody()['jsonObj']?['someProperty'], null)
Это допустимо и может быть сохранено, но если вы попытаетесь переключиться в основной режим, вы получите ошибку. Можно все еще сохранить, хотя.
Другой вариант - выполнить конкатенацию строк в конструкторе и проверить значение> '' (пробел).
Например, ниже я выполняю итерацию по набору агентов, у которых их электронная почта потенциально NULL, присоединение нулевой строки к пустой строке приводит к пустой строке.
Это дает то преимущество, что работает как в конструкторе, так и в представлении кода.
@concat('', items('iterateAgents')?['email'])
Это в конечном итоге выглядит следующим образом в представлении кода
"expression": {
"and": [
{
"greater": [
"@concat('', items('iterateAgents')?['email'])",
" "
]
}
]
},
В моем случае у меня было три сценария:
- Когда собственность - это что-то
{ "MyProperty" : "SomeValue" }
- Когда свойство равно null
{ "MyProperty" : null }
- Когда собственность не передается вообще.
{ }
Предлагаемые решения для меня не сработали, поэтому я получил эти два простых выражения для трех сценариев:
contains (triggerBody(), 'MyProperty')
- Проверяет, существует ли свойство с некоторым значением или значением null
coalesce (triggerBody()?['MyProperty'], 'NULL')
Использует значение свойства или возвращается к нулевому регистру