如果基于更改值,Azure 逻辑应用程序条件无法在循环中工作

2024-05-02

我需要编写一个简单的 LogicApp,它连接到 http 端点,接收一些 JSON,循环遍历 JSON 消息,并根据消息中的值将其分块提交到不同的 http 端点。

在这样做时,我得出的结论是,For Each 循环内的条件始终评估循环之前的条件并执行与循环之前的结果匹配的路径,即使结果应该已经更改,因为一些变量已在循环。

我已经成功地用下面的例子来说明这个问题。

{
    "definition": {
        "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
        "actions": {
            "Compose": {
                "inputs": "@variables('TestStr')",
                "runAfter": {
                    "Compose_3": [
                        "Succeeded"
                    ]
                },
                "type": "Compose"
            },
            "Compose_3": {
                "inputs": "@variables('TestArray')",
                "runAfter": {
                    "For_each": [
                        "Succeeded"
                    ]
                },
                "type": "Compose"
            },
            "For_each": {
                "actions": {
                    "Compose_2": {
                        "inputs": "@variables('TestArray')",
                        "runAfter": {
                            "Condition": [
                                "Succeeded"
                            ]
                        },
                        "type": "Compose"
                    },
                    "Condition": {
                        "actions": {
                            "Append_to_array_variable": {
                                "inputs": {
                                    "name": "TestArray",
                                    "value": "@items('For_each')"
                                },
                                "runAfter": {},
                                "type": "AppendToArrayVariable"
                            },
                            "Set_variable_2": {
                                "inputs": {
                                    "name": "TestStr",
                                    "value": "XXXX"
                                },
                                "runAfter": {
                                    "Append_to_array_variable": [
                                        "Succeeded"
                                    ]
                                },
                                "type": "SetVariable"
                            }
                        },
                        "else": {
                            "actions": {
                                "Set_variable": {
                                    "inputs": {
                                        "name": "TestStr",
                                        "value": "not"
                                    },
                                    "runAfter": {},
                                    "type": "SetVariable"
                                }
                            }
                        },
                        "expression": {
                            "and": [
                                {
                                    "equals": [
                                        "@variables('TestStr')",
                                        "BlankValue"
                                    ]
                                }
                            ]
                        },
                        "runAfter": {},
                        "type": "If"
                    }
                },
                "foreach": "@variables('FullArray')",
                "runAfter": {
                    "Initialize_variable_3": [
                        "Succeeded"
                    ]
                },
                "type": "Foreach"
            },
            "Initialize_variable": {
                "inputs": {
                    "variables": [
                        {
                            "name": "TestStr",
                            "type": "String",
                            "value": "BlankValue"
                        }
                    ]
                },
                "runAfter": {},
                "type": "InitializeVariable"
            },
            "Initialize_variable_2": {
                "inputs": {
                    "variables": [
                        {
                            "name": "TestArray",
                            "type": "Array"
                        }
                    ]
                },
                "runAfter": {
                    "Initialize_variable": [
                        "Succeeded"
                    ]
                },
                "type": "InitializeVariable"
            },
            "Initialize_variable_3": {
                "inputs": {
                    "variables": [
                        {
                            "name": "FullArray",
                            "type": "Array",
                            "value": [
                                {
                                    "key": "value1"
                                },
                                {
                                    "key": "value2"
                                },
                                {
                                    "key": "value3"
                                }
                            ]
                        }
                    ]
                },
                "runAfter": {
                    "Initialize_variable_2": [
                        "Succeeded"
                    ]
                },
                "type": "InitializeVariable"
            }
        },
        "contentVersion": "1.0.0.0",
        "outputs": {},
        "parameters": {},
        "triggers": {
            "Recurrence": {
                "recurrence": {
                    "frequency": "Month",
                    "interval": 3
                },
                "type": "Recurrence"
            }
        }
    }
}

我希望下面的 LogicApp 执行循环三次,每次评估条件并仅执行一次数组插入,其中 TestArray 包含一个条目

{
  "key":"value1"
}

字符串 TestStr 的值为“not”

但实际结果似乎有所不同 - TestArray 包含 FullArray 中的所有三个条目,而 TestStr 是“XXXX”

我在这里缺少什么?有什么解决方法吗?


我已经发现了这种行为的原因。如果将来有人遇到此问题,请在此发帖。

For_each 循环默认并行执行。这就是为什么在循环开始之前评估所有迭代的条件的原因。

有一种方法可以关闭它 - 在Settings https://i.stack.imgur.com/kpMeE.png您可以打开并发控制并设置并行性 https://i.stack.imgur.com/HA8LR.png to 1

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果基于更改值,Azure 逻辑应用程序条件无法在循环中工作 的相关文章

  • Azure 逻辑应用程序可以有多个启动触发器吗?

    Azure 逻辑应用程序可以有多个启动触发器吗 我已阅读触发器文档MSDN但看不到有多个触发器的任何内容 一般来说是的 您可以在逻辑应用工作流中拥有多个触发器 实际上 根据官方文档 您最多可以有 10 个 在单个逻辑应用程序中触发 例如 在
  • 添加 API 应用程序时出现 Azure 逻辑应用程序错误

    我正在使用逻辑应用程序 API 应用程序进行 POC 以从本地 SQL 获取记录 我在 API 应用程序中创建了 SQL 连接器 还创建了逻辑应用程序 但是当尝试在逻辑应用程序设计器中添加 SQL Connector API 应用程序时 它
  • Azure 逻辑应用程序 http post multipart/form-data 文件上传

    我正在尝试使用 Azure 中的 HTTP 逻辑应用程序调用 api 我可以通过邮递员使通话成功 查看我的邮递员配置 我可以看到来自邮递员的 http 代码 如下所示 我使用它来使逻辑应用程序的格式类似于邮递员的格式 POST dcma r
  • ftp 到 azure 存储 blob(触发处理)

    我想从一个传输加密文件ftp server到 azure blob 存储容器 这是有问题的工作流程 CSVFtp 服务器上的加密文件 gt Trigger 例子 关于添加文件 gt 调用 一些处理解密的本地程序或api 然后创建输出csvb
  • 从逻辑应用中的服务总线获取内容

    I am new to Azure logic apps I have a service bus and pass a json object message to that service bus then I set up an ac
  • 获取 ARM 中逻辑应用的回调 url

    我正在部署一个 ARM 模板 其中包括 天蓝色函数 逻辑应用程序 下列的link https github com MicrosoftDocs azure docs blob master articles logic apps logic
  • Azure 逻辑应用 - 从 URL 下载文件

    我在逻辑应用程序中有一个要求 我需要从网站 URL 执行 HTTP GET 该网站 URL 提供了我需要下载到 Azure 文件存储的文件 我可以调用可下载 URL 但不确定如何将文件下载到 Azure 文件存储目录 请让我知道您的输入 我
  • 如何通过 Azure Devops CI/CD 使用单臂模板部署多个逻辑应用程序?

    我有多个带有相应 ARM 模板的逻辑应用程序 现在 我想将不同的 ARM 模板合并到一个 ARM 模板中 并通过 AZURE DEVOPS 管道同时部署多个逻辑应用 对于您的场景 您需要首先更改 ARM 模板结构 例如 我想将4个ARM模板
  • 如何从 ARM 模板创建具有事件网格订阅的逻辑应用程序

    我制作了一个监听事件网格主题的逻辑应用程序 它工作正常 但如果我删除它并尝试从模板创建它 它就不起作用 它永远不会运行 问题在于 虽然它确实创建了与事件网格的 API 连接 但它使其未经授权 并且也不会创建对事件网格主题的任何订阅 任何时候
  • 如何在 Azure 逻辑应用程序中使用 OAuth 2.0 身份验证?

    我正在尝试创建一个带有 FTP 触发器的简单逻辑应用程序 然后将任何上传的文件内容通过管道传输到我在 Azure 中托管并使用 OAuth 2 0 客户端凭据授予流进行保护的 Web API 如何在逻辑应用中配置 OAuth 2 0 身份验
  • Azure 逻辑应用响应 HTTP 操作在 60 秒后超时

    我有一个非常简单的 Azure 逻辑应用程序 它对 SAP Web 服务器进行 REST 调用 并在将响应发送回逻辑应用程序的调用者之前转换响应 JSON 令我困惑的是 当 SAP 调用仅花费 1 分钟多一点时 响应操作就会抛出此错误 操作
  • 使用 PowerShell 授权 Office365 逻辑应用 API 连接

    尝试设置一堆支持Azure功能等的逻辑应用程序 概念是利用ML Azure功能 逻辑应用程序等来设置自动邮件系统 一切都是使用 ADO Git 和 CD CI 管道进行部署的 但我们在 Office365 连接器方面遇到了问题 它在创建后需
  • 使用逻辑应用在无服务器 Azure Functions 上按顺序消息处理

    我需要在 Azure 上处理传入消息 每条消息都将与一个特定的实体相关联 例如 通过EntityId属性 属于同一实体的消息必须按彼此的顺序进行处理 同时 我会保留 Azure Functions 的无服务器特性 如果我有 1 000 个实
  • 使用 Logic App 将文件从 SFTP 服务器复制到 Blob 存储

    我想使用逻辑应用将文件从 SFTP 服务器复制到 Blob 存储 逻辑应用每 3 分钟由 重复 块触发一次 并检查服务器上有哪些文件以便复制它们 为了检查服务器上有哪些文件 我使用 列出文件夹中的文件 块 复制本身是通过管道运行执行的 到目
  • 如何在Azure中从BLOB读取文件内容并解析CSV文件?

    我已将 csv 文件存储在 blob 容器中 并尝试从 azure 中的逻辑应用程序读取内容 但我面临着获得联系并迭代相同的问题 请帮忙处理一下流量 您可以将逻辑应用程序与Azure Function结合起来来实现它 用于获取文件的 Blo
  • Azure 逻辑应用:将 HTTP 标头密钥值提取到变量中

    我是逻辑应用程序的新手 我的逻辑应用收到一个 POST 调用 该调用在 HTTP 标头中具有键值 我希望将其提取到变量中以便稍后在工作流中进行处理 设置变量操作似乎只能访问触发器主体 我尝试以下方法通过表达式访问标头 但无法接收该值 Set
  • 从门户部署逻辑应用时无法在存储帐户中创建文件共享

    从门户创建逻辑应用程序时出现以下错误 创建存储文件共享失败 远程服务器 返回错误 403 禁止 请检查是否有存储 帐户可以访问 在选择初始逻辑应用配置时 我选择一个现有存储帐户 该帐户应允许从 azure 可信服务进行访问 配置如下 如果存
  • 如何验证来自不同发行者的 jwt 令牌

    我正在使用可操作的消息 通过 Outlook Web 应用程序 来调用逻辑应用程序 因此我在请求中得到了一个不记名令牌 操作 授权 承载者eyJ0eXAi 调用堆栈 Outlook web app gt Logic App gt my en
  • 使用azure逻辑应用程序将消息作为字符串发送到azure服务总线

    我正在使用逻辑应用操作 发送消息 向服务总线主题发送消息 在控制台应用程序中读取它时 如果我这样做 SubscriptionClient subClient SubscriptionClient CreateFromConnectionSt
  • Azure 逻辑应用 - 从 Blob 事件获取 Blob 内容

    当通过 http 创建 blob 时 我的逻辑应用程序会收到 blob 事件 我使用事件网格订阅 当发生 Blob Created 事件时 它会通过 Webhook 触发逻辑应用程序 http 触发器收到的典型 blob 事件如下所示 to

随机推荐