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变量>。

DispatchWorkflowWriteLine 活动之间添加一个新的 WriteLine 活动,并设置其属性如下:

  • WriteLine
    • Text (JavaScript): getChildOutput().Response

确保发布工作流(至少是子工作流),然后从设计器运行父工作流,并注意控制台输出,应显示:

Parent started
Hello from Parent
Hello from Child
Parent completed

要尝试此示例,您可以从此处下载工作流 这里 并导入它们。

在本文档中