elsa 分发子工作流
在构建工作流时,您可能希望在更大的工作流中重用现有的工作流。
在 Elsa 中,您可以使用 DispatchWorkflow
活动从其他工作流分发工作流。
分发工作流
要分发工作流,您需要向您的工作流添加一个 DispatchWorkflow
活动。此活动有一个 WorkflowDefinitionId
属性,您可以使用它来指定要分发的工作流的定义 ID。
当工作流执行时,DispatchWorkflow
活动将分发指定 ID 的工作流。被分发的工作流将在后台运行,而父工作流将继续执行,除非 WaitForCompletion
属性设置为 true
。
带输入分发工作流
您也可以向分发的工作流传递输入。为此,您需要将 Input
属性设置为包含要传递给工作流的输入的 JSON 对象。
当工作流执行时,DispatchWorkflow
活动将以指定的输入分发工作流。
分发工作流并接收输出
您还可以从分发的工作流接收输出。为此,您需要将 WaitForCompletion
属性设置为 true
,并将 Output
属性设置为包含您想从工作流接收的输出的 JSON 对象。
尝试一下
当工作流执行时,DispatchWorkflow
活动将分发工作流并等待其完成。当工作流完成后,DispatchWorkflow
活动将接收来自工作流的输出并继续执行。
以下每个示例都假设从先前的工作流继续。
示例 1:分发工作流
在此示例中,我们将创建一个工作流,该工作流以无输入和无输出的方式分发另一个工作流。
子工作流
首先,使用 Elsa Studio 创建一个名为子工作流的新工作流,包含以下活动:
WriteLine
Text
:Hello from Child
。
确保发布该工作流。
父工作流
然后,使用 Elsa Studio 创建一个名为父工作流的新工作流,包含以下活动:
WriteLine
Text
:Parent started
。
DispatchWorkflow
WorkflowDefinitionId
: <从下拉菜单中选择子工作流工作流>。WaitForCompletion
:true
。
WriteLine
Text
:Parent completed
。
子工作流应如下所示:
从设计器运行父工作流,并注意控制台输出,应显示:
Parent started
Hello from Child
Parent completed
要尝试此示例,您可以从此处下载工作流 这里 并导入它们。
示例 2:带输入分发工作流
在此示例中,我们将更新子工作流以接收来自父工作流的输入。
子工作流
首先,向工作流添加以下输入属性:
Message
(字符串)
然后,更新WriteLine
活动如下:
WriteLine
Text
(JavaScript):getMessage()
。
父工作流
然后,更新父工作流中的 DispatchWorkflow
活动如下:
DispatchWorkflow
WorkflowDefinitionId
: <从下拉菜单中选择子工作流工作流>。WaitForCompletion
:true
。Input
(JavaScript):return {"Message": "Hello from Parent"}
。
确保发布工作流(至少是子工作流),然后从设计器运行父工作流,并注意控制台输出,应显示:
Parent started
Hello from Parent
Parent completed
要尝试此示例,您可以从此处下载工作流 这里 并导入它们。
示例 3:分发工作流并接收输出
在此示例中,我们将更新子工作流以向父工作流发送输出。
子工作流
首先,向工作流添加以下输出属性:
Response
(字符串)
然后,向工作流中添加一个 SetOutput
活动,并设置其属性如下:
SetOutput
Output
: <从下拉菜单中选择Response输出>。Value
:"Hello from Child"
。
确保将 WriteLine
活动连接到 SetOutput
活动并发布工作流。
父工作流
然后,更新父工作流中的 DispatchWorkflow
活动如下:
- 添加一个名为
ChildOutput
的新变量,类型为ObjectDictionary
。
然后更新 DispatchWorkflow
活动如下:
DispatchWorkflow
WorkflowDefinitionId
: <从下拉菜单中选择子工作流工作流>。WaitForCompletion
:true
。Output
: <从下拉菜单中选择ChildOutput变量>。
在 DispatchWorkflow
和 WriteLine
活动之间添加一个新的 WriteLine
活动,并设置其属性如下:
WriteLine
Text
(JavaScript):getChildOutput().Response
。
确保发布工作流(至少是子工作流),然后从设计器运行父工作流,并注意控制台输出,应显示:
Parent started
Hello from Parent
Hello from Child
Parent completed
要尝试此示例,您可以从此处下载工作流 这里 并导入它们。