Flow 中的多记录元素与转换

Flow Builder 的多记录元素让你用一个元素处理大量记录。本文覆盖:用 Update Records 元素一次更新多条记录、用集合变量存储记录组、用 Transform 元素把数据从一种形态转换成另一种、以及用 Collection Filter 和 Sort 整理集合——并牢记「能用 Transform 就不用 Loop」。...

📅 2026/10/11 ✍️ ponybai 🏷️ salesforce, headless

更新并检索多条记录(01 Update and Retrieve Multiple Records)

slide_2

本单元从一个记录触发的 Flow 开始:用单个 Update Records 元素关闭某个账户下的所有未关闭工单。然后介绍集合变量(collection variable),并用一个配置为「返回多条记录」的 Get Records 元素来创建集合变量。

完成本单元后,你将能够:

  • 在记录触发的 Flow 中,用 Update Related Records 菜单选项更新多条记录;
  • 应用使用集合变量的最佳实践;
  • 用 Get Records 元素创建集合变量。

注意:在本徽章和 Flow Builder 界面中,你可能会看到「集合(collection)」和「集合变量(collection variable)」这两个术语——它们含义相同,「记录集合」和「记录集合变量」也常被互换使用。

准备动手实践 Flow(Ready to Get Hands-on with Flows?)

slide_3

动手前先设置好工作区:

  • 创建全新的 Trailhead Playground——不要复用已有组织,创建约需 3-4 分钟;
  • 安装包:打开 Install a Package 标签,粘贴包 ID 04tKa000002f0NXIAY,点击 Install,选择 Install for Admins Only,再点击 Install。

为什么用全新 Playground?已有组织的数据会干扰动手挑战。安装完成后你会看到确认页,并收到一封确认邮件。整个模块都使用这个包和 Playground。

从触发的记录变更更新多条记录(一):触发器(Update Multiple Records (1): The Trigger)

slide_4

场景:Pyroclastic, Inc. 有时会流失客户,那些前客户往往还有未关闭的工单(case)和任务。当一个留存(Retention)商机流失时,支持团队希望自动推迟与该账户相关的所有工单任务。

因为自动化应在「带有特定条件的商机流失时」触发,你需要一个记录触发的 Flow:

  • Object 选 Opportunity;
  • Trigger the Flow When 选 A record is updated;
  • 条件(All Conditions Are Met / AND):Name Contains Retention、Stage Equals Closed Lost;
  • When to Run the Flow for Updated Records 选 Only when a record is updated to meet the condition requirements。

目标:用一个元素更新大量工单。

从触发的记录变更更新多条记录(二):一个元素处理多条记录(Update Multiple Records (2): One Element, Many Records)

slide_5

添加一个 Update Records 元素(用 Update Related Records 菜单选项创建,会自动配置为更新与触发记录相关的记录):

  1. Label 输入 Close Cases(API 名自动为 Close_Cases);
  2. 确认 How to Find Records 选 Update records related to the opportunity record that triggered the flow;
  3. Records Related to Opportunity 依次选 Triggering Opportunity → Account ID → Cases——这会找到触发商机对应的账户,再选中该账户下的所有工单;
  4. 更新条件(AND):Status Does Not Equal Closed;
  5. Flow Label 输入 Close Account's Cases from Retention Opp Lost,保存。

为什么加过滤条件?已关闭的工单无需处理;老账户可能有很多旧工单,会拖慢更新甚至触发 governor limits。结果:一个元素就关闭了所有未关闭的工单。

检索多条记录(Retrieve Multiple Records)

slide_6

Get Records 元素身兼两职:

  • 单条记录:把结果存入一个记录变量;
  • 多条记录:把它配置为检索所有记录,把整组存入一个集合变量。

同一个元素、一次配置变更,就能返回多条记录——这一差异为 Flow 的其余部分解锁了多记录处理能力。

什么是集合变量?(What Is a Collection Variable?)

slide_7

集合变量能存储多个同数据类型的值:

  • 多个文本、数字、日期等;
  • 不能混类型(Number 类型的集合不能存日期或文本);
  • 也能存储多条记录(含这些记录的全部字段)。

为什么用它?当 Flow 要以相同方式处理一组相关信息时,比如:一组要评估更新的记录、要展示给销售的一组产品描述、要接收同一通知的一批邮箱地址。

用 Get Records 创建集合变量(一):配置 Get Steps(Create a Collection Variable (1): Configure Get Steps)

slide_8

场景:一次更新多个 Onboarding Project Step 的状态。Pyroclastic 用两个自定义对象跟踪新客户入职流程——Onboarding Project(父)和 Onboarding Project Step(子)。Enablement 团队要一个能一次更新多个步骤状态的工具。创建一个屏幕 Flow:

  1. 创建输入变量 recordId(Data Type 选 Text,Availability Outside the Flow 选 Available for input);
  2. 添加 Get Records 元素,Label 输入 Get Steps;
  3. Object 选 Onboarding Project Step;
  4. 条件(AND):Onboarding Project Equals recordId;
  5. How Many Records to Store 选 All records;
  6. How to Store Record Data 确认选 Automatically store all fields。

用 Get Records 创建集合变量(二):结果(Create a Collection Variable (2): The Result)

slide_9

你刚才的配置:

  • All records → 一个集合变量;
  • 自动存储所有字段;
  • 每条记录都保留其字段结构和 ID。

在 Toolbox 里能看到这个变量:Resources → Record Collection Variables,标签是 Onboarding Project Steps from Get Steps。把 Flow 保存为 Choose Steps to Update,下一单元继续构建它。

转换多条记录(02 Transform Multiple Records)

slide_10

本单元解答何时用 Transform 元素而不是 Loop,展示如何用数据表捕获记录选择,并一步步用 Transform 元素把源字段映射到目标记录,包括用公式设置的值。

完成本单元后,你将能够:

  • 决定用 Transform 元素还是 Loop 元素;
  • 用 Data Table 组件捕获并选择多条记录;
  • 用 Transform 元素把数据表选择转换成可用集合;
  • 用 Transform 元素把源数据字段映射到目标数据;
  • 用公式把屏幕组件选择映射到转换后的集合。

Transform vs Loop(一):两个元素(Transforms vs. Loops (1): Two Elements)

slide_11

Flow Builder 提供两个能一次性改变集合里每条记录的元素:

  • Transform 元素——把一个或多个组件/变量的值(单个或集合)复制到一个自动生成的变量,同时改变副本的最终值。适合对一组记录做相同改动(如清空多条记录的 Description 字段);
  • Loop 元素——一次一个地遍历集合里的多个值,让 Flow 把每个值送进一系列元素。适合对一组记录做批量操作(如给一组用户发邮件)。

Transform vs Loop(二):为什么 Transform 胜出(Transforms vs. Loops (2): Why Transform Wins)

slide_12

你可能会想:「既然 Loop 能让一组记录经过元素,那我在 Loop 里放个 Update Records 元素,不也能批量改记录吗?」虽然可行,但不是最佳实践:

  • 每次 Update Records 运行都算一次 SOQL 查询,几次循环迭代就可能触及上限;
  • 过去在 Loop 里用 Assignment、在 Loop 外用 Update Records 的组合做法,如今也不单独推荐。

平均而言,Transform 元素比 Loop 快约 10 倍,且随 Flow 变复杂时扩展性更好——不仅给用户更快的体验,还大幅降低超出执行时间限制的风险。经验法则:能用 Transform 就用 Transform,只有不能用时才用 Loop。

用数据表捕获记录选择(一):屏幕(Capture Record Selections (1): The Screen)

slide_13

继续构建 Choose Steps to Update Flow。添加一个 Screen 元素:

  1. Label 输入 Select Steps to Update;
  2. 添加 Data Table 组件:API Name 输入 Select_Steps,Label 输入 Steps,Source Collection 选 Onboarding Project Steps from Get_Steps;
  3. Row Selection Mode 设为 Multiple,Minimum Selection 输入 1,Source Field 选 Name;
  4. 点击 Column Options 里的 Done;点击 +Add Column,重复步骤为 Status__c 和 Assigned_To__c 添加列。

用数据表捕获记录选择(二):新状态 Picklist(Capture Record Selections (2): New Status Picklist)

slide_14

用户还需要指定要应用的新状态。给屏幕添加一个 New Status Picklist:

  1. Label 输入 New Status,勾选 Require;
  2. Resource Type 选 Picklist Choice Set,API Name 输入 StepStatus;
  3. Object 选 Onboarding Project Step,Field 选 Status,点击 Done;
  4. 点击 Done 关闭屏幕画布,保存 Flow。

完成后 Flow Label 设为 Choose Steps to Update with Formula。

Transform 元素(一):为什么需要它(The Transform Element (1): Why You Need It)

slide_15

问题在于:

  • Flow 运行时,数据表存储用户选择的记录;
  • 但有些元素无法访问某些屏幕组件——具体说,Update Records 元素无法访问 Data Table 组件。

于是需要 Transform 元素:它复制一个或多个组件/变量的值到自动生成的变量,并在此过程中对副本做改动——最终产出一个 Update Records 能引用的集合。

Transform 元素(二):想象在烤蛋糕(The Transform Element (2): Think of Baking a Cake)

slide_16

Transform 就像烤蛋糕:

  • 从面粉、牛奶、鸡蛋这些原料(你的数据点)开始;
  • 把它们混合起来;
  • 同时还要对原料做处理(加鸡蛋前先去壳);
  • 最后得到你想要的美味蛋糕。

同样地,Transform 元素合并多个数据点、按需改变值,产出一个最终有用的数据集合。因为转换数据的方式很多,同一个用例可能有多个潜在方案。

用公式转换值(Transform Values with a Formula)

slide_17

方法一——保留记录集合:用 Transform 元素设置所选步骤记录的 Status。它与方法二的区别是:这个 Flow 保留记录集合,映射 Id 并用公式设置 Status。

更新所选步骤有两种同样有效的方式,接下来先构建方法 A。

把字段从源映射到目标(Map Fields from Source to Target)

slide_18

添加一个 Transform 元素:Label 输入 Transform Step Statuses。

  1. Resource 选 Select_Steps 屏幕组件;在 Select_Steps 框里点击 selectedRows 行的 >,展开集合的可用字段(所有 Onboarding Project Step 字段都会出现);
  2. 创建目标数据:Data Type 选 Record,勾选 Allow multiple values (collection),Object 选 Onboarding Project Step,点击 Create;
  3. 映射 Id:在 Source Data 列把鼠标悬停在 Id 字段上点击,再在 Target Data 列点击 Id 行——两列之间会出现一条连线,这条线就叫 mapping(映射)。

要删除错误映射,点击字段名(源或目标侧)再点击 Delete(垃圾桶)。

添加公式(Add a Formula)

slide_19

为什么用公式?你无法把 New Status 屏幕组件直接映射到 Status 字段,但可以用公式把屏幕组件的值插入字段:

  1. 在 Target Data 列点击 Status__c 行,出现「Add or edit formula」图标;
  2. 点击它,选择 Formula,映射面板变为 Add Transformation 面板;
  3. 在「Search a field…」字段选 Select Steps to Update → New Status,Formula 字段应显示 {!New_Status};
  4. 点击 Check Syntax 验证公式。

如果想把所有记录设为同一静态值(比如把 Status 全设为 Closed),改选 Value,输入静态值即可。完成后 Transform 的集合里每条所选步骤只有 Id 和 Status__c 两个字段。

更新 Onboarding Project Step 记录(Update the Onboarding Project Step Records)

slide_20

最后创建更新所选步骤状态的元素:

  1. 在 Transform Step Statuses 元素之后添加 Update Records 元素,Label 输入 Update Steps;
  2. How to Find Records 确认选 Use the IDs and all field values from a record or record collection;
  3. Record or Record Collection 选 Onboarding Project Steps from Transform Step Statuses;
  4. 保存 Flow。

方法 A 完成!下一单元用记录 ID 的文本集合重建同样的结果。

把数据从一种形态转换成另一种(03 Transform Data From One Form to Another)

slide_21

本单元用记录 ID 的文本集合重建上一单元的 Flow,再用 In 运算符更新记录——因为 In 只能搜索简单值集合。

完成本单元后,你将能够:

  • 用 Transform 元素把数据表选择转换成文本集合;
  • 用 In 运算符更新与文本集合内容匹配的记录。

把集合转换成另一种类型的集合(Transform a Collection into a Different Type of Collection)

slide_22

构建上一单元 Flow 的另一个版本。这次用 Transform 元素创建文本集合而非记录集合:文本集合存储一串文本字符串。把源数据的 Id 字段映射到文本集合时,新集合把所有所选记录的 ID 存为文本。

为什么 ID 的文本集合有用?Update Records 元素的过滤选项里有个 In 运算符——它搜索包含简单值(文本或数字)的集合,找到集合里有匹配值的所有记录。但 In 运算符无法搜索记录集合,所以要把记录集合转成文本集合。

先回到 All Flows 列表视图,打开 Choose Steps to Update Flow(此时只有 Get Steps 和 Select Steps to Update 两个元素)。

把 ID 从源映射到目标(Map the ID from Source to Target)

slide_23

添加一个 Transform 元素:Label 输入 Transform Step IDs。

  1. Resource 选 Select_Steps 屏幕组件,展开 selectedRows 显示字段;
  2. 创建目标数据:Data Type 选 Text,勾选 Allow multiple values (collection),点击 Create;
  3. 映射 Id:在 Source Data 列把鼠标悬停在 Id 字段上点击,再在 Target Data 列点击 Transform_Step_IDs 行;
  4. 保存 Flow。

从 ID 更新 Onboarding Project Step 记录(Update Records from Their IDs)

slide_24

最后添加带过滤条件的 Update Records 元素,找到 Id 在 Transform 文本集合里的所有记录:

  1. 在 Transform Step IDs 之后添加 Update Records 元素,Label 输入 Update Steps;
  2. How to Find Records 选 Specify conditions to identify records, and set fields individually,Object 选 Onboarding Project Step;
  3. 条件(AND):Record ID In Transform Step IDs;Status 设为 Select Steps to Update 屏幕 → New Status;
  4. 保存 Flow。

注意画布看起来和方法 A 一模一样,但元素配置截然不同。两种方法配置耗时、运行耗时都差不多——记住:构建 Flow 时,同一种自动化往往有很多实现方式,有时只是个人偏好问题。

在集合变量中整理数据(04 Organize Data in a Collection Variable)

slide_25

最后一个单元:用 Collection Filter 和 Collection Sort 元素在使用前整理集合变量,再构建一个 Flow 选出 Top 商机、把联系人添加为活动成员。

完成本单元后,你将能够:

  • 过滤集合变量的内容;
  • 排序集合变量的内容;
  • 限制集合变量中的值数量。

过滤集合的内容(Filter a Collection’s Contents)

slide_26

Collection Filter 元素顾名思义:对集合应用过滤器,移除不符合条件的值。但更准确地说,它创建一个副本集合,副本里不包含不符合条件的值,而原始集合保持不变——这一点很有用,因为之后仍可用未过滤的原集合。

例如:你有一个新服务公告邮件地址的文本集合,但想避开包含竞品域名的地址。Flow 现在有两个文本集合:一个含所有原始邮箱,一个不含竞品邮箱。

排序并截断集合的内容(Sort and Truncate a Collection’s Contents)

slide_27

Collection Sort 元素能按你设定的条件改变集合顺序(例如按 Amount 降序重排商机记录)。它还有个重要功能:限制集合里的值数量,移除限制之后的所有值。按 Amount 降序排序后,你可以只保留前 10 个商机。

重要区别:与 Collection Filter 不同,Collection Sort 不创建新集合,而是直接修改你选择排序的那个集合。

最佳实践:能用 Get Records 的过滤/排序功能就优先用它(更高效、更快);只有在条件无法在 Get Records 时确定(如条件由 Decision 元素或屏幕输入决定)时才用这两个元素。

在 Flow 中过滤和排序(Filter and Sort in a Flow)

slide_28

场景:Product Marketing 团队用一个 agent 管理活动,希望它能快速把活动成员添加到一个基于产品的活动。高投入客户回购率高,所以 Product Marketing 要求 agent 找出主产品匹配活动 Product Campaign Type 的前 10 个已赢单商机,把这些商机的联系人添加为活动成员。

工具组合:Autolaunched Flow(No Trigger)+ Filter + Sort + Transform + Create Records。

创建 Flow 并获取所需记录(Create a Flow and Get the Required Records)

slide_29

创建一个 Autolaunched Flow(No Trigger):

  1. 创建输入变量 recordId(Text,Available for input);
  2. Get Records 元素 Get Campaign Details:Object 选 Campaign,条件 Campaign ID Equals recordId;
  3. Get Records 元素 Get Opps:Object 选 Opportunity,条件 Stage Does Not Equal Closed Lost,How Many Records 选 All records;
  4. Flow Label 输入 Create Top 10 Campaign Members。

Available for Input 必须对任何要接收 agent 数据的变量启用。

用 Decision 检查 Product Campaign Type(Check the Product Campaign Type with a Decision)

slide_30

Flow 必须根据活动的 Product Campaign Type 走不同分支,所以创建 Decision 元素:Label 输入 What Product Campaign Type?。

结果(Product Campaign Type =):

  • Generators;
  • Bots;
  • Other(默认)。

每条路径稍后:过滤该产品的商机、创建匹配的活动成员。

过滤并排序集合(Filter and Sort the Collection)

slide_31

为每个产品建独立路径后,先创建 Collection Filter 元素,生成只含主产品是发电机(generator)商机的集合(发电机商机在 Main Product Category 字段值为 GC):

  • Filter Generators(Collection Filter):Collection 选 Opportunities from Get Opps,条件 Main Product Category Equals GC——会创建新集合;
  • Top 10 Generator Opps(Collection Sort):Collection Variable 选 Opportunities from Filter Generators,Sort By 选 Amount,Sort Order 选 Descending,How Many Items to Keep 选 Set the maximum number of items,输入 10。

记住:Filter 创建新集合,Sort 原地修改集合。

转换并创建活动成员(Transform and Create Campaign Members)

slide_32

现在你有了想要的数据:前 10 个非 Closed Lost、Main Product Category 为 GC、按 Amount 排序的商机。把这些商机的联系人转成活动成员:

  1. Transform Generator Contacts to CMs:Resource 选 Opportunities from Filter_Generators(Sort 没建新集合,仍引用 Filter 生成的集合),目标为 Record 集合、Object 选 Campaign Member,映射 ContactId → ContactId,CampaignId 用公式 {!recordId};
  2. Create Generator CMs(Create Records):How to set record field values 选 From a Record Variable,How Many Records to Create 选 Multiple,Record Collection 选 Campaign Members from Transform Generator Contacts to CMs;
  3. 保存 Flow。

在动手挑战里完成 Bots 路径即可收尾。离开前记住 Transform 最重要的规则:能用 Transform 就不用 Loop。


文章来源:Trailhead - Multirecord Elements and Transforms in Flows