4.5. 数据位于集合中的集成行为
有时,连接会返回一个集合,其中包含了相同类型的多个值。当连接返回集合时,流可以通过多种方式在集合上操作,包括:
- 为集合执行一次每个步骤。
- 为集合中的每个元素执行一次每个步骤。
- 为集合执行一次这些步骤,并为集合中的每个元素执行一次其他步骤。
要决定如何对流中的集合进行操作,您需要了解流连接到哪些应用程序,以及是否可以处理集合,以及您希望流程完成的内容。然后,您可以使用以下主题中的信息向处理集合的流中添加步骤:
4.5.1. 关于数据类型和集合 复制链接链接已复制到粘贴板!
data mapper 显示源字段和目标字段,您可以定义您需要的字段到字段映射。
在 data mapper 中,字段可以是:
-
存储单个值的原语类型。原语类型示例包括
布尔值
、char
、字节
、短
、int
、长
、浮点
数和双倍
。原语类型不可扩展,因为它是一个字段。 - 复杂的 类型,由多个不同类型组成的字段组成。您可以在设计时定义复杂类型的子字段。在数据映射器中,一种复杂的类型可以扩展,以便您可以查看其子字段。
每种字段类型(专用和复杂)也可以是一个集合。集合是一个可以有多个值的单个字段。集合中的项目数量在运行时决定。在设计时,在数据映射程序中,集合由
表示。数据映射程序界面中是否可扩展集合是否由其类型决定。当集合是原语类型时,它不可扩展。当集合是复杂的类型时,数据映射程序可以被扩展来显示集合的子字段。您可以从/映射到每个字段。
以下是一些示例:
-
ID
是原语类型字段(int
)。在运行时,员工只能有一个ID
。例如:ID=823
。因此,ID
是非集合的原语类型。在数据映射器中,ID
不可扩展。 -
email
是原语类型字段(字符串)。在运行时,员工可以具有多个电子邮件
值。例如:email<0>=aslan@home.com
和email<1>=aslan@business.com
。因此,电子邮件
是一个原语类型,也是集合。数据映射程序使用表示
电子邮件
字段是一个集合,但电子邮件
无法扩展,因为它是一个原语类型(没有子字段)。 -
staff
是复杂的对象字段,具有多个子字段,包括ID
和电子邮件
。在运行时,员工
也是一个集合,因为公司有许多员工。
在设计时,数据映射程序使用来表示
员工
是一个集合。employees
字段可扩展,因为它是包含子字段的复杂类型。
4.5.2. 关于处理集合 复制链接链接已复制到粘贴板!
流处理集合的最简单方法是使用 data mapper 将源集合中的字段映射到目标集合中字段。对于很多流,这是需要的。例如,流可能会从数据库中获取一系列员工记录,然后将这些记录插入到电子表格中。在数据库连接和 Google Sheets 连接之间,数据映射程序步骤将数据库字段映射到 Google Sheets 字段。由于源和目标都是集合,因此当 Fuse Online 执行流时,它会同时调用 Google Sheets 连接。在该调用中,Fuse Online 会迭代记录并正确地填充电子表格。
在一些流程中,您可能需要将集合分成单独的对象。例如,有一个流,它连接到数据库,并获得了在一定日期之前丢失分配时间的员工集合。然后,流程需要向每个员工发送电子邮件通知。在这个流程中,您可以在数据库连接后添加 split 步骤。然后,您将添加一个数据映射程序步骤,将员工记录的源字段映射到发送邮件的 Gmail 连接中的 target 字段。当 Fuse Online 执行流时,它会对每个员工执行 data mapper 步骤和 Gmail 连接。
有时,在流中分离集合后,在流中对集合执行一些步骤后,每个元素都会再次在集合上操作。考虑上一段落中的示例。假设在 Gmail 连接后向每个员工发送一条信息,您希望添加一个向电子表格通知的员工列表。在这种情况下,在 Gmail 连接后,添加一个聚合步骤来创建员工名称的集合。然后添加一个数据映射程序,将源集合中的字段映射到目标 Google Sheets 连接中的字段。当 Fuse Online 执行流时,会为集合执行新的 data mapper 步骤和 Google Sheets 连接。
这些是在流中处理集合的最常见场景。然而,更复杂的处理也成为可能。例如,当集合中的元素本身是集合时,您可以在其他分离和聚合步骤中嵌套分割和聚合步骤。
4.5.3. 使用 data mapper 处理集合 复制链接链接已复制到粘贴板!
在流中,当步骤输出集合以及流中的后续连接时,需要一个集合作为输入,您可以使用 datamapper 指定如何处理集合的方式。
当步骤输出集合时,流视觉化会在步骤的详细信息中显示 Collection。例如:
在提供集合并在需要映射的步骤之前,添加数据映射步骤。在此数据映射程序步骤中的流程需要完全取决于流程中的其它步骤。下图显示了从源集合字段到目标集合字段的映射:
在源和目标面板中,数据映射器会显示
来表示集合。
当集合是复杂的类型时,数据映射程序会显示集合的子字段。您可以从/映射到每个字段。
当源字段嵌套到多个集合中时,您可以将其映射到满足这些状况的目标字段:
target 字段嵌套在与 source 字段相同的集合数量中。例如,允许这些映射:
-
/A<>/B<>/C
/D<>/E<>/F -
/A<>/B<>/C
/G<>/H/I<>/J
-
/A<>/B<>/C
target 字段只嵌套在一个集合中。例如,允许这个映射:
/A<>/B<>/C
/K<>/L 在这种情况下,数据映射程序使用深度第一算法来迭代源中的所有值。因此,数据映射程序会将源值放在单个目标集合中。
不允许使用以下映射:
/A<>/B<>/C cannot-map-to /M<>/N/O<>/P<>/Q
当 Fuse Online 执行流时,它会迭代源集合元素来填充目标集合元素。如果您将一个或多个源集合字段映射到目标集合或目标集合字段,则目标集合元素仅包含映射字段的值。
如果您将源集合中的源集合或字段映射到不在集合中的目标字段,那么当 Fuse Online 执行流时,它将仅从源集合中的最后一个元素分配值。集合中的所有其他元素在此映射步骤中会被忽略。但是,任何后续映射步骤都可以访问源集合中的所有元素。
当连接返回 JSON 或 Java 文档中定义的集合时,数据映射程序通常可以将源文档作为集合处理。
4.5.4. 添加分割步骤 复制链接链接已复制到粘贴板!
在执行流期间,当连接返回一组对象时,Fuse Online 对集合执行一次后续步骤。如果要为集合中的每个对象执行一次后续步骤,请添加 split 步骤。例如,Google Sheets 连接会返回一行对象的集合。要对每个行执行一次后续步骤,请在 Google Sheets 连接后添加一个拆分步骤。
确定到 split 步骤的输入始终是一个集合。如果分割步骤获取一个不是集合类型的源文档,步骤会在每个空间上分离输入。例如,Fuse Online 将"Hello world!"输入分成两个元素:"Hello"和"world!",并将这些两个元素传递到网络流中的下一步。特别是,XML 数据不是集合类型。
先决条件
- 正在创建或编辑一个流。
- 流已具有所需的所有连接。
- 在流视觉化中,获取源数据的连接表示数据是一个 (Collection)。
流程
-
在流视觉化中,点您要添加分割步骤的位置
。
- 点 Split。此步骤不需要任何配置。
- 点击 Next。
附加信息
通常,要在添加数据映射程序步骤前添加任何分割步骤和聚合步骤。这是因为数据是集合还是单个对象是否影响映射。如果您添加一个数据映射程序,然后添加分割步骤,您通常需要重做映射。同样,如果您删除了分割或聚合步骤,则需要恢复任何映射。
4.5.5. 添加聚合步骤 复制链接链接已复制到粘贴板!
在流中,添加一个聚合步骤,您要使用 Fuse Online 从单个对象创建集合。在执行聚合步骤后,Fuse Online 对每个对象执行一次后续步骤,而对集合执行一次后续步骤。
在决定是否将聚合步骤添加到流时,请考虑流中的连接。对于每个后续连接,Fuse Online 会为每个流程数据中的每个元素连接一次应用程序。对于某些连接,最好一次连接一次,而不是多次连接。
先决条件
- 正在创建或编辑一个流。
- 流已具有所需的所有连接。
- 上一步将集合分成单个对象。
流程
-
在流视觉化中,您要在流中添加聚合步骤,点
。
- 点 Aggregate。此步骤不需要任何配置。
- 点击 Next。
附加信息
通常,要在添加数据映射程序步骤前添加任何分割和聚合步骤。这是因为数据是集合还是单个对象是否影响映射。如果您添加一个数据映射程序,然后添加一个聚合步骤,通常需要重做映射。同样,如果您删除了聚合步骤,则需要恢复任何映射。
4.5.6. 在流中处理集合示例 复制链接链接已复制到粘贴板!
此简单集成从随 Fuse Online 提供的样本数据库中获取一组任务。流将集合分成单个任务对象,然后过滤这些对象来查找已完成的任务。然后,流会在集合中聚合完成的任务,将该集合中的字段映射到电子表格中的字段,并通过向电子表格添加完成的任务列表来完成。
以下流程提供了创建此简单集成的说明。
先决条件
- 您创建了 Google Sheets 连接。
- 在 Google Sheets 连接访问的帐户中,有一个用于接收数据库记录的电子表格。
流程
- 点 Create Integration。
添加启动连接:
- 在 Choose a connection 页面上,单击 PostgresDB。
- 在 Choose a action 页面上,选择 Periodic SQL Invocation。
-
在 SQL 语句 字段中,输入
选择 * from todo
,然后单击 Next。
此连接返回一组任务对象。
添加完成连接:
- 在 Choose a connection 页面中,点 Google Sheets 连接。
- 在 Choose a action 页面中,选择 Append values to asheet。
- 在 SpreadsheetId 字段中输入电子表格的 ID,将任务列表添加到其中。
-
在 Range 字段中,输入
A:B
作为您要附加值的目标列。第一列 A 用于任务 ID。第二列 B 用于任务名称。 - 接受 Major Dimension 和 Value Input Option 的默认值,然后单击 Next。
Google Sheets 连接通过将集合中的每个元素添加到电子表格,从而完成网络流。
在流中添加分割步骤:
- 在流视觉化中,点加号。
- 点 Split。
在流程执行分割步骤后,结果是一组单独的任务对象。Fuse Online 为每个任务对象执行一次流程中的后续步骤。
在流中添加过滤器步骤:
- 在流视觉化中,在分割步骤后点加号。
点 Basic Filter 并配置过滤器:
-
单击第一个字段中的,然后选择包含您要评估数据的字段名称。
- 在第二个字段中,选择 等于 completed 字段值必须满足的条件。
-
在第三个字段中,将
1
指定为必须在 completed 字段中的值。1
表示任务已完成。
-
单击第一个字段中的,然后选择包含您要评估数据的字段名称。
- 点击 Next。
在执行过程中,流程为每个任务对象执行过滤器步骤一次。其结果是一组单独的完成的任务对象。
在流中添加聚合步骤:
- 在流视觉化中,在过滤器步骤后点加号。
- 点 Aggregate。
现在,结果集包含一个集合,其中包含每个完成的任务的一个元素。
在流中添加数据映射步骤:
- 在流视觉化中,在聚合步骤后点加号。
点 Data Mapper,将 SQL 结果源集中的以下字段映射到 Google Sheets 目标集合:
- ID 到 A
- 任务 到 B
- 点 Done。
- 单击 Publish。
结果
当集成运行时,它会每分钟从示例数据库获取任务,然后将完成的任务添加到电子表格中的第一个表中。该集成将任务 ID 映射到第一列 A,它会将任务名称映射到第二列 B。