3. 筛选订单#
在工作流的这一步中,你将学习如何使用条件逻辑来过滤数据,以及如何在节点中使用表达式(expressions)。我们将使用 If 节点 来实现这一功能。 完成此步骤后,你的工作流应如下所示: 查看工作流文件
为了仅将状态为“处理中”的订单插入到 Airtable 中,我们需要根据 orderStatus 字段对数据进行过滤。基本逻辑是:如果 orderStatus 的值为 processing(处理中),那么 将所有具有该状态的记录插入 Airtable;否则(例如,当 orderStatus 不是 processing 时),计算所有其他状态(如 booked)订单的总和。
这种 if-then-else(如果-那么-否则)命令称为条件逻辑(conditional logic)。在 n8n 工作流中,你可以通过 If 节点 添加条件逻辑,该节点会根据比较操作将工作流进行条件分支。
If 节点 vs. Switch 节点
如果你需要基于多个非布尔值(不仅仅是 true 和 false)进行数据过滤,请使用 Switch 节点。Switch 节点与 If 节点类似,但支持多个输出连接器。
在 Airtable 节点前添加 If 节点#
首先,我们在 HTTP Request 节点和 Airtable 节点之间的连接中插入一个 If 节点:
- 将鼠标悬停在连接 HTTP Request 节点和 Airtable 节点的箭头上。
- 点击两个节点之间出现的 + 符号。
配置 If 节点#
点击加号后,原本从 HTTP Request 节点到 Airtable 节点的连接会被断开。现在,我们来添加一个连接到 HTTP Request 节点的 If 节点:
- 搜索 If 节点。
- 在搜索结果中选择该节点。
对于 If 节点,我们将使用一个表达式。
表达式(Expressions)
表达式 是编程语言中由字符和符号组成的字符串,可以通过求值获得一个结果,其值通常取决于输入。在 n8n 工作流中,你可以在节点中使用表达式来引用其他节点的输入数据。在本例中,If 节点将引用 HTTP Request 节点输出的数据。
在 If 节点窗口中,配置以下参数:
- 将
value1占位符设置为{{ $json.orderStatus }},操作步骤如下:- 将鼠标悬停在
value1字段上。 - 在
value1字段右侧选择 Expression(表达式)选项卡。 - 接着,点击链接图标以打开表达式编辑器: Opening the Expression Editor打开表达式编辑器
- 使用左侧面板选择 HTTP Request > orderStatus,然后将其拖动到窗口中央的 Expression(表达式)字段中。 Expression Editor in the IF nodeIf 节点中的表达式编辑器
- 添加表达式后,关闭 Edit Expression(编辑表达式)对话框。
- 将鼠标悬停在
- Operation(操作):选择 String(字符串)> is equal to(等于)
- 将
value2占位符设置为processing。
数据类型
选择 操作(Operation) 时,请确保选择了正确的数据类型(boolean 布尔值、date & time 日期与时间、number 数字、或 string 字符串)。
选择 执行步骤(Execute step) 来测试 If 节点。
你的结果应如下所示:
If 节点输出If 节点输出
请注意,订单状态为 processing 的订单应显示在 True Branch(真分支) 的输出中,而订单状态为 booked 的订单则应出现在 False Branch(假分支) 的输出中。
完成后关闭 If 节点的详细视图。
将数据插入 Airtable#
接下来,我们要将这些数据插入到 Airtable 中。还记得 Nathan 在 将数据插入 Airtable 教程末尾说的话吗?
实际上我只需要把正在处理中的订单插入表中……
由于 Nathan 只需要 processing 状态的订单,我们将 Airtable 节点连接到 If 节点的 true 连接器上。
在这种情况下,由于 Airtable 节点已经位于画布上,选择 If 节点 的 true 连接器并将其拖动到 Airtable 节点上即可。
此时最好重新测试一下 Airtable 节点。在执行之前,请先打开你在 Airtable 中的表格,并删除所有现有行。然后在 n8n 中打开 Airtable 节点窗口,点击 执行步骤(Execute step)。
检查你在 Airtable 中的数据,确认工作流仅添加了正确的订单(即 orderStatus 为 processing 的订单)。现在应该有 14 条记录,而不是之前的 30 条。
此时,你的工作流应如下图所示: 查看工作流文件
下一步是什么?#
Nathan 🙋:这个 If 节点对过滤数据真的很有用!现在我有了所有关于处理中订单的信息。不过实际上我只需要 employeeName 和 orderID 这两个字段,但我想我可以保留其他字段以防万一。
你 👩🔧:其实我不建议这样做。插入更多数据会消耗更多的计算资源,数据传输更慢、耗时更长,同时也会占用表格中更多的存储空间。虽然在这个例子中,14 条记录包含 5 个字段似乎影响不大,但如果业务增长到成千上万条记录和几十个字段,这些开销就会累积起来,甚至多出一列都可能影响性能。
Nathan 🙋:哦,这倒是挺重要的信息。那你能只从处理中的订单里提取这两个字段吗?
你 👩🔧:当然可以,我将在下一步中完成这个操作。