工作流 Flows

Flows 支持 Directus 中的自定义、事件驱动的数据处理和任务自动化。 每个流程由一个触发器组成,然后是一系列操作。

在你开始之前
请务必查看 快速入门指南 以获得平台的基本概述。

Learn More
There is also dedicated API documentation on Flows and Operations.

What's a Flow?

What's a Flow?

每个流由三个元素组成:触发器、操作和数据链。

触发器

每个流程都以一个 trigger 开头,它定义了启动流程的操作或事件。 此操作或事件可能是应用程序内的某种类型的事务、传入的 webhook、cron 作业等。

操作

操作 是在流中执行的操作或过程。 这些使您能够管理数据:发送电子邮件、推送应用内通知、发送 webhook 等等

用概念术语来说,操作做了三件事:

  • 从 Directus 或其他外部服务获取数据
  • 处理数据 a.k.a. 转换、验证或其他方式。
  • 向 Directus 或其他外部服务发送数据

Developers
您甚至可以开发自己的 自定义操作 以适应任何用例。

数据链

为了让流的操作跟踪和访问相同的数据,每个流都会创建自己的 数据链。每个操作都可以访问此数据链,并且每个操作在运行后都会在此对象上附加一些值。这意味着您可以使用 数据链变量 在当前操作中动态访问先前操作中的数据。

控制流

并非流中执行的每个操作都能成功。在某些情况下,您的操作将失败。也许一个操作试图访问不存在的数据,或者一个 webhook 操作由于某种原因失败,或者你设置了一个 condition 操作,当它的设计_fails_不满足条件。

这些失败的操作不会立即停止您的流程。相反,流允许您通过在内部提供成功路径失败路径来实现 控制流 一个流程:

  • 成功 — 如果 operation1 成功执行,则 operation2 执行。
  • Failure — 否则,如果 operation1 执行失败,则 operation3 执行。

我们有了它! 这些是任何流程的概念基石。现在您需要知道如何实际创建流,我们将在下一节中讨论。

配置一个流

创建流

  1. 导航到 Settings > Flows 并单击页眉中的 add。一个抽屉会打开。
  2. Flow Setup 下,填写流程的 Name 和以下 optional 详细信息:
    • 状态 - 将流设置为活动或非活动。
    • 图标 - 添加图标以帮助快速识别流程。
    • 描述 - 设置流的简短口头描述。
    • 颜色 - 设置颜色以帮助识别流程。
    • 活动和日志跟踪 - 让您跟踪活动和日志活动两者都不

要了解更多信息,请参阅下面有关 Logs 的部分以及 Activity Log 文档。

配置触发器

  1. 单击 arrow_forward 导航到 Trigger Setup。选择 trigger 类型并根据需要进行配置。
  2. 点击菜单标题中的done进行确认。

您现在将在一个空的网格区域中看到您的触发器。是时候开始添加操作了。

配置操作

  1. 在触发面板上,单击addCreate Operation 侧边抽屉将打开。
  2. 选择名称操作 类型,并根据需要进行配置。 Directus 会将名称转换为唯一的操作密钥,用于 数据链。如果您不选择名称,系统将自动为您生成名称和密钥。 7、接下来,点击页眉中的done确认并返回流格区域。
  3. 从这里,您可以进行以下可选配置:
    • 重新定位 - 您可以拖放面板以根据需要重新定位。
    • 取消链接/重新链接 - 单击并拖动 adjustarrow_forward 以取消链接/重新链接流程。
    • 复制操作 - 要复制操作,请单击 more_vert 以打开其上下文菜单。单击 control_point_duplicate 将创建操作的副本(及其配置详细信息)。
    • 复制操作 - 要将操作复制并粘贴到另一个流程中,请单击 more_vert 以打开其上下文菜单。点击 input 会打开一个弹出菜单。从下拉列表中选择所需的流程,然后单击 Copy
    • data_object 切换原始编辑器 - 单击操作表单输入字段上的 data_object 以在标准值和原始值之间切换输入类型。这允许您在任何类型的配置选项中添加原始值或 数据链变量,甚至是下拉菜单、复选框和单选按钮。
    • 删除操作 - 要删除操作,请单击 more_vert,然后单击 delete。将出现一个弹出菜单。点击删除确认。
  4. 在新建的操作面板上:
    • 点击add,将操作添加到成功路径
    • 点击remove 将操作添加到失败路径
  5. 重复步骤 5-10 以根据需要构建您的流程。
  6. 单击done 确认并创建您的流程。
  7. 单击arrow_back 返回流列表。
  8. 创建后,您可能需要重新编辑流程、将其切换为非活动状态或将其删除。

编辑流

  1. 导航到所需的流程。
  2. 单击流页面标题中的 edit 并根据需要进行重新配置。
  3. 点击完成确认。

将流切换为非活动状态

  1. 导航至 Settings > Flows 并单击所需流上的 more_vert
  2. 点击**check Set Flow to Active** 或**block Set Flow to Inactive**。

删除流

  1. 单击所需流上的 more_vert 以打开其上下文菜单。
  2. 点击delete,弹出菜单。点击删除确认。

现在我们知道如何创建和配置流,是时候更深入地了解数据链了。

数据链

请记住,每个流都会创建自己的 JSON 对象来存储生成的任何数据。

当流程开始时,四个键被附加到数据链:$trigger$accountability$env$last。 然后,随着每个操作的运行,它可以访问此数据链。 操作完成后,其数据将附加在其 <operationKey> 下。 当操作不生成数据时,将在其键下附加null

下面是一个高度通用的数据链示例。

json
{
  "$trigger": {
    // 包含流的触发器生成的数据。
    // 这可能包括标头、访问令牌、有效负载等。
    // 每个数据链都有一个 $trigger 键。
  },
  "$accountability": {
    // 提供有关谁/什么启动了流程的详细信息。
    // 这可能包括用户的 id、角色、IP 地址等...
    // 每个数据链都有一个 $accountability 键。
  },
  "$env": {
    // `FLOWS_ENV_ALLOW_LIST` 中允许的环境变量。
    // 这可能包括 PUBLIC_URL、PORT 等...
    // 每个数据链都有一个 $env 键。
  },
  "$last": {
    // $last 下附加的值在每次操作后都会发生变化。
    // 它存储流中执行的最后一个操作的数据。
    // 这样,您就不必记住上一个操作的唯一键名。
    // 这是一个方便的小便利工具!
    // 每个数据链都有一个 $last 键。
  },
  "operationKey1": "A value", // 第一次操作生成的数据(如果有)。
  "operationKey2": {
    "nestedKey": ["nested val", "nested val 2"] // 嵌套的 JSON 数据很常见。
  },
  "operationKey3": null // 如果没有生成数据,则附加一个空值。
}

如您所见,上面的示例在每个键中都没有任何实质性数据。 实际上,会有很多数据,并且总是会略有不同,具体取决于您的流程的独特配置。 在配置和调试期间,您需要使用 The Log 之类的工具来查看您的数据链,并确保每个操作都按照您的预期访问和生成数据。

在我们的示例中,我们使用通用 placeholders 作为操作键,例如 <operationKey>,这对于低代码用户来说可能看起来很有趣。 在实践中,操作键实际上将具有唯一且具有描述性的名称,例如 send_email_7538

请记住,$trigger$accountability$last$ 开头,但不是 operationKeys\

数据链变量

配置您的操作 时,您可以使用数据链中的键作为变量来访问数据。 只需用引号和 double mustaches 将变量包装起来。 例如:

json
"{{ $accountability }}"

将获得嵌套在 $accountability 键下的数据,产生如下内容:

json
{
  "user": "4b11492d-631d-4b8a-bca7-2beasdfadf58b",
  "role": "12c79228-5361-4905-929b-d69d3w46trs6b",
  "admin": true,
  "app": true,
  "ip": "127.0.0.1",
  "userAgent": "Amazon CloudFront"
}

您可以将自己的硬编码 JSON 与变量混合。 您还可以使用点表示法和数组索引来检索子嵌套值。

json
{
  "key0": "a hard-coded value",
  "key1": "{{ $trigger.payload }}",
  "key2": "{{ operationKey.payload.friend_list[0] }}"
}

不能使用双胡子语法传递任何类型的计算。

js
{
 "key": "{{ 2 + 2 }}",
 "key2": "{{ $trigger.payload.toLowerCase() }}"
}

**要对流数据执行计算,请使用 脚本操作webhook。\

某些操作使用下拉菜单、切换、复选框和其他输入选项。 但是,您可以完全绕过这一点,直接使用 Toggle to Raw Editor 输入原始值。 您也可以使用双胡子语法在这些输入选项中动态访问数据。

Logs

可从侧边栏访问,日志存储每个流程执行的信息。 每个日志将显示来自触发器的信息以及流中的每个操作。 要访问流的日志,请按照以下步骤操作。

  1. 导航至 Settings > Flows 并单击所需的流。
  2. 点击边栏中的**fact_check日志**。 将打开一个侧抽屉,显示流的日志。
  3. 单击一个日志,另一个侧边抽屉将打开,允许您查看其数据。
  4. 完成后,点击close关闭抽屉。

日志不是到数据链的 1:1 映射。 每个触发器和操作都有自己的下拉列表,用于存储其相关数据。 以下是您将从其中得到的:

Trigger

  • Options - 配置触发器时输入的值。 (这些配置选项不存储在数据链上)
  • Payload - 显示附加在 $trigger 下的数据。
  • Accountability - 显示附加在 $accountability 下的数据。

请注意,$accountability 没有嵌套在 $trigger 键下。但是,它在日志中的触发器下列出,因为 $accountability 是由触发器生成的。

<操作键>

  • Options - 您在配置操作时输入的值。 (这些配置选项不存储在数据链上)
  • Payload - 显示附加在此 <operationKey> 下的数据。

请记住,Log to Console 操作是一个关键的调试工具。它不会将数据附加到数据链中。您将在 Options 下查看您的日志消息。因此,您记录的任何内容都将始终显示为嵌套在 message 键下。例如,如果您决定记录“上次操作成功”,它将显示为:

{
 "message": "The last operation was a success"
}

日志存储在数据库中
请记住,如果您已配置流来跟踪日志,则所有这些信息都存储在数据库中。 您可能需要定期删除这些数据。

$last 在哪里?
您可能会注意到 $last 不在日志中。 请记住,$last 会不断更新以存储最近执行的操作的数据。 日志显示整个流程的结果。 因此,$last 只是流程中的最后一个操作。

更多关于调试的信息
您可能会发现像 Postman 这样的工具对查看数据和调试流程很有帮助。