逻辑应用检查数组上的 null 值,然后将其替换为字符串

Logic app check null values on array then replace it with string

提问人:user20829088 提问时间:12/25/2022 最后编辑:user20829088 更新时间:12/28/2022 访问量:450

问:

所以我正在尝试检查循环中的数组空值,但我真的不知道正确的格式

数组示例:

[
  'value 1',
  'value 2',
  '',
  'value 4',
]

这是我试图写的表达:

if(empty(outputs('splitTD')[variables('FirstRecord')]), replace(outputs('splitTD')[variables('FirstRecord')], '', 'Not specified' ), outputs('splitTD')[variables('FirstRecord')])
数组 循环 null 元素 azure-logic-apps

评论


答:

0赞 Skin 12/26/2022 #1

您将无法将内联表达式用于整个数组。我尝试将数组转换为字符串并使用表达式,但它只是不想转换回数组。replace

您需要遍历它并以这种方式进行处理。此外,如果要确保数组保持其原始顺序,则需要将并发性转换为 1,否则,它将并行运行,并调用竞争条件样式结果到更新的数组。

循环中的组件是 IF 语句,它将决定如何处理每个项目。

if(or(equals(item(),null), equals(item(), '')), 'Not specified', item())

将其加载到租户中,以查看工作版本。

{
    "definition": {
        "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
        "actions": {
            "For_Each_Array_Item": {
                "actions": {
                    "Append_To_Updated_Array": {
                        "inputs": {
                            "name": "Updated Array",
                            "value": "@if(or(equals(item(),null), equals(item(), '')), 'Not specified', item())"
                        },
                        "runAfter": {},
                        "type": "AppendToArrayVariable"
                    }
                },
                "foreach": "@variables('Array')",
                "runAfter": {
                    "Initialize_Updated_Array": [
                        "Succeeded"
                    ]
                },
                "runtimeConfiguration": {
                    "concurrency": {
                        "repetitions": 1
                    }
                },
                "type": "Foreach"
            },
            "Initialize_Array": {
                "inputs": {
                    "variables": [
                        {
                            "name": "Array",
                            "type": "array",
                            "value": [
                                "value 1",
                                "value 2",
                                "",
                                "value 4"
                            ]
                        }
                    ]
                },
                "runAfter": {},
                "type": "InitializeVariable"
            },
            "Initialize_Updated_Array": {
                "inputs": {
                    "variables": [
                        {
                            "name": "Updated Array",
                            "type": "array"
                        }
                    ]
                },
                "runAfter": {
                    "Initialize_Array": [
                        "Succeeded"
                    ]
                },
                "type": "InitializeVariable"
            }
        },
        "contentVersion": "1.0.0.0",
        "outputs": {},
        "parameters": {},
        "triggers": {
            "manual": {
                "inputs": {
                    "method": "GET",
                    "schema": {}
                },
                "kind": "Http",
                "type": "Request"
            }
        }
    },
    "parameters": {}
}

这是最终结果(上面的 JSON 中不存在此 compose 语句,但您不需要)......

Result

评论

0赞 user20829088 12/28/2022
您好,感谢您的回复。我尝试了你的 if 语句代码我的项目,但它没有像我预期的那样工作。我看到你得到的结果顺序相同,我不知道为什么对我来说它不一样。因此,对于我的项目,我使用 2 个循环和 2 个数组。第一个数组将循环以在第一个数组中附加数据。然后第二个将循环并检查 null,然后附加到另一个数组。它确实检查了数据并进行了替换,但结果不在同一顺序上。
0赞 Skin 12/28/2022
是的,并发。
1赞 RithwikBojja 12/26/2022 #2

我已经在我的环境中重现,并得到了以下预期结果:

首先,我用您给定的输入初始化了数组,然后再次初始化了另一个空数组,然后,我为每个循环使用了条件并得到了结果并遵循以下过程:if(empty(item()),'No Element',item())

enter image description here

in compose 变量如下:

enter image description here

输出:

enter image description here

编辑:

您需要按如下方式处理并发以获得正确的顺序:

enter image description here

评论

0赞 user20829088 12/28/2022
您好,感谢您的回复。我尝试了您的解决方案,但我得到的结果与我想要的顺序不同,有解决方案吗?
0赞 RithwikBojja 12/28/2022
@user20829088,我已经根据您的要求在最后编辑了我的答案,并让我知道这是否适合您,我想它应该可以工作