适用范围:Azure 逻辑应用(消耗型 + 标准型)
默认情况下,逻辑应用工作流中的作按顺序运行。 若要将作组织到单独的分支中并同时运行这些分支,请创建 并行分支。 稍后可以在工作流中加入这些分支。
本指南演示如何在工作流中创建并行分支并重新加入这些分支,如以下示例工作流所示:
提示
在你具有可接收和访问数组的工作流触发器,并需要为每个数组项运行单独工作流实例的方案中,可以对数组进行解批操作,以此作为分支的替代方法。 在支持此功能的触发器上,你可以在设计器中启用“拆分依据”设置,这会映射到触发器定义中的 属性。splitOn
只有可以接受和返回数组的触发器才支持此功能。 有关详细信息,请参阅 在数组上触发多个运行。
先决条件
一个 Azure 帐户和订阅。 如果没有订阅,可以注册 Azure 帐户。
一个逻辑应用工作流,该工作流初始包含触发器和所需操作。 确保该工作流包含你要在之间添加并行分支的操作。
如果没有此资源,请参阅以下文章:
使用并行分支时的注意事项
仅当
runAfter
并行分支的属性值与父作的完成状态匹配时,并行分支才会运行。 例如,仅当 parentAction 以“成功”状态完成时,分支 BranchAction1 和 branchAction2 才会运行。工作流会等待同一级别的所有并行分支完成,然后运行用于合并这些分支的动作。
添加并行分支操作
在 Azure 门户中,打开你的逻辑应用资源。
根据您使用的是消耗型还是标准型逻辑应用,请执行相应的步骤。
消耗
- 在资源边栏上的 “开发工具”下,选择设计器以打开工作流。
标准
在资源边栏的“工作流”下,选择“工作流”。
在 “工作流 ”页上,选择一个工作流。
在工作流边栏上的 “工具”下,选择设计器以打开工作流。
在要添加并行分支的作之间,将鼠标悬停在连接箭头上。
选择出现的加号 (),然后选择“添加并行分支”+。
在并行分支中添加您希望运行的操作。 在“添加操作”窗格和搜索框中,找到并选择所需的操作。
所选操作现在显示在并行分支中。
若要将另一个操作添加到并行分支,请在要添加新操作的操作下,选择加号 (),然后选择“添加操作”+。
在“添加操作”窗格和搜索框中,找到并选择所需的操作。
所选操作现在显示在当前的分支中。
要将分支重新合并,请联接并行分支,如以下部分所示。
并行分支定义 (JSON)
在代码视图中,可以在逻辑应用工作流的 JSON 定义中定义并行结构。
{
"triggers": {
"myTrigger": {}
},
"actions": {
"parentAction": {
"type": "<action-type>",
"inputs": {},
"runAfter": {}
},
"branchAction1": {
"type": "<action-type>",
"inputs": {},
"runAfter": {
"parentAction": [
"Succeeded"
]
}
},
"branchAction2": {
"type": "<action-type>",
"inputs": {},
"runAfter": {
"parentAction": [
"Succeeded"
]
}
}
},
"outputs": {}
}
联接并行分支
若要合并所有分支下的并行分支,请添加另一个操作。 此操作仅在上述所有并行分支完成运行后运行。
在 Azure 门户中,按照前面的过程所述打开逻辑应用和工作流。
在要联接的任何并行分支下,选择加号 (),然后选择“添加操作”+。
在“添加操作”窗格和搜索框中,找到并选择要用于联接分支的操作。
在设计器上,选择之前添加的操作。 操作的信息窗格打开后,选择“设置”。
在 “设置” 选项卡上的 “运行后” 下,打开 “选择操作” 列表。 选择每个分支中的最后一个动作,该动作在合并动作运行之前必须完成。
只有在所有所选操作完成运行后,合并操作才会运行。
完成后,所选操作将显示在您要合并的并行路径下:
联接定义 (JSON)
在代码视图中,您可以在逻辑应用工作流的 JSON 定义中定义联接操作。
{
"triggers": {
"myTrigger": { }
},
"actions": {
"parentAction": {
"type": "<action-type>",
"inputs": { },
"runAfter": {}
},
"branchAction1": {
"type": "<action-type>",
"inputs": { },
"runAfter": {
"parentAction": [
"Succeeded"
]
}
},
"branchAction2": {
"type": "<action-type>",
"inputs": { },
"runAfter": {
"parentAction": [
"Succeeded"
]
}
},
"joinAction": {
"type": "<action-type>",
"inputs": { },
"runAfter": {
"branchAction1": [
"Succeeded"
],
"branchAction2": [
"Succeeded"
]
}
}
},
"outputs": {}
}