相关文章推荐
买醉的野马  ·  java - ...·  1 年前    · 
跑龙套的凉茶  ·  c# iqueryable whereif-掘金·  1 年前    · 
飘逸的荔枝  ·  python 独立性检验 ...·  1 年前    · 
有腹肌的火锅  ·  curl ...·  2 年前    · 

适用于:Azure 逻辑应用(消耗)

若要在逻辑应用工作流中处理数组,可以创建一个 For each 循环 。 此循环会对数组中的每一项重复一个或多个操作。 有关“For each”循环可以处理的数组项数的限制,请参阅 并发、循环和拆分限制

若要重复操作直到满足条件或状态发生变化,可以创建一个 Until 循环 。 工作流首先运行循环内的所有操作,然后检查条件或状态。 如果满足该条件,则循环将停止。 否则,循环将继续进行。 有关工作流可以有的“Until”循环数的默认值和最大限制,请参阅 并发、循环和拆分限制

如果你有接收数组的触发器并且希望针对每个数组项运行工作流,则可以使用 SplitOn 触发器属性 “分离”该数组。

  • Azure 帐户和订阅。 如果没有订阅,可以 注册免费的 Azure 帐户

  • 有关 逻辑应用工作流 的基础知识

    “For each”循环

    “For each”循环在每个数组项上重复一个或多个操作,且仅在数组上工作。 使用“For each”循环时请注意以下事项:

  • “For each”循环仅可处理有限数量的数组项。 有关此限制,请参阅 并发、循环和拆分限制

  • 默认情况下,“For each”循环中的迭代将同时运行,或并行运行。 此行为不同于 Power Automate 的“应用到每项”循环 ,该循环一次运行一个迭代,或按顺序运行。 但是,可以 设置顺序“For each”循环迭代 。 例如,如果想使用 延迟操作 暂停“Foreach”循环中的下一次迭代,则需要将循环设置为按顺序运行。

    此默认行为的例外是嵌套循环,其中迭代始终按顺序运行,而不是并行运行。 若要对嵌套循环中的项目并行运行操作,请创建并 调用子逻辑应用工作流

  • 若要在每次循环迭代期间从变量操作获得可预测的结果,请按顺序运行这些循环。 例如,当并发运行的循环结束时,递增变量、递减变量和附加到变量操作会返回可预测的结果。 但是,在并发运行循环的每次迭代期间,这些操作可能会返回不可预测的结果。

  • “For each”循环中的操作使用 @item() 表达式来引用和处理数组中的每个项。 如果指定了不在数组中的数据,则逻辑应用工作流将失败。

    此示例逻辑应用工作流会发送网站 RSS 源的每日摘要。 该工作流使用“For each”循环,它会为每个新项发送电子邮件。

  • 使用 Outlook.com 帐户或者工作或学校帐户 创建此示例消耗型逻辑应用工作流

  • 在 RSS 触发器与“发送电子邮件”操作之间,添加一个“For each”循环。

  • 若要在步骤之间添加循环,请将鼠标指针移到这些步骤之间的箭头上。 选择出现的 加号 ( + ),然后选择“ 添加操作 ”。

  • 在搜索框下,选择“ 全部 ”。 在搜索框中输入“ for each ”。 从操作列表中,选择名为“ For each ”的控制操作。

    "Body": "@{item()}", "Subject": "New CNN post @{triggerBody()?['publishDate']}", "To": "me@contoso.com" "host": { "api": { "runtimeUrl": "https://logic-apis-westus.azure-apim.net/apim/office365" "connection": { "name": "@parameters('$connections')['office365']['connectionId']" "method": "post", "path": "/Mail" "runAfter": {} "foreach": "@triggerBody()?['links']", "runAfter": {}

    “Foreach”循环:顺序

    默认情况下,“Foreach”循环中的周期并行运行。 若要按顺序运行每个周期,请设置循环的“顺序”选项。 如果期望得出可预测结果的循环中具有嵌套循环或变量时,“Foreach”循环必须按顺序运行。

  • 在循环的右上角,选择省略号 (...) >“设置”。

  • 在“并发控制”下,将“并发控制”设置转为“开启” 。 将“并行度”滑块移至“1”,然后选择“完成” 。

    如果在使用逻辑应用的 JSON 定义,则可以通过添加 operationOptions 参数来使用 Sequential 选项,例如:

    "actions": {
       "myForEachLoopName": {
          "type": "Foreach",
          "actions": {
             "Send_an_email": { }
          "foreach": "@triggerBody()?['links']",
          "runAfter": {},
          "operationOptions": "Sequential"
    

    Until 循环

    若要运行并重复操作直到满足条件或状态发生变化,请将这些操作放在“Until”循环中。 逻辑应用首先运行循环内的所有操作,然后检查条件或状态。 如果满足该条件,则循环将停止。 否则,循环将继续进行。 有关逻辑应用运行可以有的“Until”循环数的默认值和最大限制,请参阅并发、循环和拆分限制

    下面是可以在其中使用“Until”循环的一些常见场景:

  • 调用某个终结点,直至获得想要的响应。

  • 在数据库中创建记录。 等待该记录中的特定字段获得批准。 继续处理。

    在每天上午 8:00,此示例逻辑应用都递增某个变量的值,直到该变量的值等于 10。 然后,该逻辑应用会发送一封电子邮件来确认当前值。

    这些步骤使用 Office 365 Outlook,但也可以使用逻辑应用支持的任何电子邮件提供商。 检查此处的连接器列表。 如果使用其他电子邮件帐户,则常规步骤保持不变,但 UI 外观可能稍有不同。

  • 创建空白逻辑应用。 在逻辑应用设计器的搜索框下,选择“全部”。 搜索“定期”。 从触发器列表中选择此触发器:“定期 - 计划”

  • 通过设置时间间隔、频率和天中的小时来指定触发器何时触发。 若要设置小时,请选择“显示高级选项”。

    “Until”循环会根据这些属性停止执行,因此请确保相应地设置它们的值:

  • 计数:此值为在循环退出之前运行的最大循环次数。 有关逻辑应用运行可以有的“Until”循环数的默认值和最大限制,请参阅并发、循环和拆分限制

  • 超时:此值为“Until”操作(包括所有循环)在退出前可运行的最长时间,以 ISO 8601 格式指定。 有关“超时”值的默认值和最大限制,请参阅并发、循环和拆分限制

    将针对每个循环周期评估超时值。 如果循环中的任何操作花费的时间超过超时限制,当前循环便不会停止。 但是,由于不满足限制条件,因此下一个循环不会启动。

    若要更改这些限制,请在“循环操作”中选择“更改限制”。

    Until 定义 (JSON)

    如果是在逻辑应用的代码视图中操作,可以改为在逻辑应用的 JSON 定义中定义 Until 循环,例如:

    "actions": {
       "Initialize_variable": {
          // Definition for initialize variable action
       "Send_an_email": {
          // Definition for send email action
       "Until": {
          "type": "Until",
          "actions": {
             "Increment_variable": {
                "type": "IncrementVariable",
                "inputs": {
                   "name": "Limit",
                   "value": 1
                "runAfter": {}
          "expression": "@equals(variables('Limit'), 10)",
          // To prevent endless loops, an "Until" loop 
          // includes these default limits that stop the loop. 
          "limit": { 
             "count": 60,
             "timeout": "PT1H"
          "runAfter": {
             "Initialize_variable": [
                "Succeeded"
    

    此示例“Until”循环调用可创建资源的 HTTP 终结点。 当 HTTP 响应主体返回 Completed 状态时,循环停止。 为防止无限循环,该循环在发生下列任一条件时也会停止:

  • 循环运行了 10 次(由 count 属性指定)。 默认值为 60 次。

  • 循环已运行两小时(由 timeout 属性以 ISO 8601 格式指定)。 默认值为一小时。

    "actions": {
       "myUntilLoopName": {
          "type": "Until",
          "actions": {
             "Create_new_resource": {
                "type": "Http",
                "inputs": {
                   "body": {
                      "resourceId": "@triggerBody()"
                   "url": "https://domain.com/provisionResource/create-resource",
                   "body": {
                      "resourceId": "@triggerBody()"
                "runAfter": {},
                "type": "ApiConnection"
          "expression": "@equals(triggerBody(), 'Completed')",
          "limit": {
             "count": 10,
             "timeout": "PT2H"
          "runAfter": {}
    
  • 如有问题,请访问有关 Azure 逻辑应用的 Microsoft Q&A 问题页
  • 若要提交功能和建议或者为其投票,请访问 Azure 逻辑应用用户反馈站点
  • 基于条件运行步骤(条件操作)
  • 基于不同的值运行步骤(switch 操作)
  • 运行或合并并行步骤(分支)
  • 基于分组的操作状态运行步骤(作用域)
  •