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

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

在本文档中