更新并检索多条记录(01 Update and Retrieve Multiple Records)
本单元从一个记录触发的 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?)
动手前先设置好工作区:
- 创建全新的 Trailhead Playground——不要复用已有组织,创建约需 3-4 分钟;
- 安装包:打开 Install a Package 标签,粘贴包 ID
04tKa000002f0NXIAY,点击 Install,选择 Install for Admins Only,再点击 Install。
为什么用全新 Playground?已有组织的数据会干扰动手挑战。安装完成后你会看到确认页,并收到一封确认邮件。整个模块都使用这个包和 Playground。
从触发的记录变更更新多条记录(一):触发器(Update Multiple Records (1): The Trigger)
场景:Pyroclastic, Inc. 有时会流失客户,那些前客户往往还有未关闭的工单(case)和任务。当一个留存(Retention)商机流失时,支持团队希望自动推迟与该账户相关的所有工单任务。
因为自动化应在「带有特定条件的商机流失时」触发,你需要一个记录触发的 Flow:
- Object 选 Opportunity;
- Trigger the Flow When 选 A record is updated;
- 条件(All Conditions Are Met / AND):Name Contains
Retention、Stage EqualsClosed 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)
添加一个 Update Records 元素(用 Update Related Records 菜单选项创建,会自动配置为更新与触发记录相关的记录):
- Label 输入
Close Cases(API 名自动为Close_Cases); - 确认 How to Find Records 选 Update records related to the opportunity record that triggered the flow;
- Records Related to Opportunity 依次选 Triggering Opportunity → Account ID → Cases——这会找到触发商机对应的账户,再选中该账户下的所有工单;
- 更新条件(AND):Status Does Not Equal
Closed; - Flow Label 输入
Close Account's Cases from Retention Opp Lost,保存。
为什么加过滤条件?已关闭的工单无需处理;老账户可能有很多旧工单,会拖慢更新甚至触发 governor limits。结果:一个元素就关闭了所有未关闭的工单。
检索多条记录(Retrieve Multiple Records)
Get Records 元素身兼两职:
- 单条记录:把结果存入一个记录变量;
- 多条记录:把它配置为检索所有记录,把整组存入一个集合变量。
同一个元素、一次配置变更,就能返回多条记录——这一差异为 Flow 的其余部分解锁了多记录处理能力。
什么是集合变量?(What Is a Collection Variable?)
集合变量能存储多个同数据类型的值:
- 多个文本、数字、日期等;
- 不能混类型(Number 类型的集合不能存日期或文本);
- 也能存储多条记录(含这些记录的全部字段)。
为什么用它?当 Flow 要以相同方式处理一组相关信息时,比如:一组要评估更新的记录、要展示给销售的一组产品描述、要接收同一通知的一批邮箱地址。
用 Get Records 创建集合变量(一):配置 Get Steps(Create a Collection Variable (1): Configure Get Steps)
场景:一次更新多个 Onboarding Project Step 的状态。Pyroclastic 用两个自定义对象跟踪新客户入职流程——Onboarding Project(父)和 Onboarding Project Step(子)。Enablement 团队要一个能一次更新多个步骤状态的工具。创建一个屏幕 Flow:
- 创建输入变量
recordId(Data Type 选 Text,Availability Outside the Flow 选 Available for input); - 添加 Get Records 元素,Label 输入
Get Steps; - Object 选 Onboarding Project Step;
- 条件(AND):Onboarding Project Equals
recordId; - How Many Records to Store 选 All records;
- How to Store Record Data 确认选 Automatically store all fields。
用 Get Records 创建集合变量(二):结果(Create a Collection Variable (2): The Result)
你刚才的配置:
- All records → 一个集合变量;
- 自动存储所有字段;
- 每条记录都保留其字段结构和 ID。
在 Toolbox 里能看到这个变量:Resources → Record Collection Variables,标签是 Onboarding Project Steps from Get Steps。把 Flow 保存为 Choose Steps to Update,下一单元继续构建它。
转换多条记录(02 Transform Multiple Records)
本单元解答何时用 Transform 元素而不是 Loop,展示如何用数据表捕获记录选择,并一步步用 Transform 元素把源字段映射到目标记录,包括用公式设置的值。
完成本单元后,你将能够:
- 决定用 Transform 元素还是 Loop 元素;
- 用 Data Table 组件捕获并选择多条记录;
- 用 Transform 元素把数据表选择转换成可用集合;
- 用 Transform 元素把源数据字段映射到目标数据;
- 用公式把屏幕组件选择映射到转换后的集合。
Transform vs Loop(一):两个元素(Transforms vs. Loops (1): Two Elements)
Flow Builder 提供两个能一次性改变集合里每条记录的元素:
- Transform 元素——把一个或多个组件/变量的值(单个或集合)复制到一个自动生成的变量,同时改变副本的最终值。适合对一组记录做相同改动(如清空多条记录的 Description 字段);
- Loop 元素——一次一个地遍历集合里的多个值,让 Flow 把每个值送进一系列元素。适合对一组记录做批量操作(如给一组用户发邮件)。
Transform vs Loop(二):为什么 Transform 胜出(Transforms vs. Loops (2): Why Transform Wins)
你可能会想:「既然 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)
继续构建 Choose Steps to Update Flow。添加一个 Screen 元素:
- Label 输入
Select Steps to Update; - 添加 Data Table 组件:API Name 输入
Select_Steps,Label 输入Steps,Source Collection 选 Onboarding Project Steps from Get_Steps; - Row Selection Mode 设为 Multiple,Minimum Selection 输入
1,Source Field 选 Name; - 点击 Column Options 里的 Done;点击 +Add Column,重复步骤为 Status__c 和 Assigned_To__c 添加列。
用数据表捕获记录选择(二):新状态 Picklist(Capture Record Selections (2): New Status Picklist)
用户还需要指定要应用的新状态。给屏幕添加一个 New Status Picklist:
- Label 输入
New Status,勾选 Require; - Resource Type 选 Picklist Choice Set,API Name 输入
StepStatus; - Object 选 Onboarding Project Step,Field 选 Status,点击 Done;
- 点击 Done 关闭屏幕画布,保存 Flow。
完成后 Flow Label 设为 Choose Steps to Update with Formula。
Transform 元素(一):为什么需要它(The Transform Element (1): Why You Need It)
问题在于:
- Flow 运行时,数据表存储用户选择的记录;
- 但有些元素无法访问某些屏幕组件——具体说,Update Records 元素无法访问 Data Table 组件。
于是需要 Transform 元素:它复制一个或多个组件/变量的值到自动生成的变量,并在此过程中对副本做改动——最终产出一个 Update Records 能引用的集合。
Transform 元素(二):想象在烤蛋糕(The Transform Element (2): Think of Baking a Cake)
Transform 就像烤蛋糕:
- 从面粉、牛奶、鸡蛋这些原料(你的数据点)开始;
- 把它们混合起来;
- 同时还要对原料做处理(加鸡蛋前先去壳);
- 最后得到你想要的美味蛋糕。
同样地,Transform 元素合并多个数据点、按需改变值,产出一个最终有用的数据集合。因为转换数据的方式很多,同一个用例可能有多个潜在方案。
用公式转换值(Transform Values with a Formula)
方法一——保留记录集合:用 Transform 元素设置所选步骤记录的 Status。它与方法二的区别是:这个 Flow 保留记录集合,映射 Id 并用公式设置 Status。
更新所选步骤有两种同样有效的方式,接下来先构建方法 A。
把字段从源映射到目标(Map Fields from Source to Target)
添加一个 Transform 元素:Label 输入 Transform Step Statuses。
- Resource 选 Select_Steps 屏幕组件;在 Select_Steps 框里点击 selectedRows 行的
>,展开集合的可用字段(所有 Onboarding Project Step 字段都会出现); - 创建目标数据:Data Type 选 Record,勾选 Allow multiple values (collection),Object 选 Onboarding Project Step,点击 Create;
- 映射 Id:在 Source Data 列把鼠标悬停在 Id 字段上点击,再在 Target Data 列点击 Id 行——两列之间会出现一条连线,这条线就叫 mapping(映射)。
要删除错误映射,点击字段名(源或目标侧)再点击 Delete(垃圾桶)。
添加公式(Add a Formula)
为什么用公式?你无法把 New Status 屏幕组件直接映射到 Status 字段,但可以用公式把屏幕组件的值插入字段:
- 在 Target Data 列点击 Status__c 行,出现「Add or edit formula」图标;
- 点击它,选择 Formula,映射面板变为 Add Transformation 面板;
- 在「Search a field…」字段选 Select Steps to Update → New Status,Formula 字段应显示
{!New_Status}; - 点击 Check Syntax 验证公式。
如果想把所有记录设为同一静态值(比如把 Status 全设为 Closed),改选 Value,输入静态值即可。完成后 Transform 的集合里每条所选步骤只有 Id 和 Status__c 两个字段。
更新 Onboarding Project Step 记录(Update the Onboarding Project Step Records)
最后创建更新所选步骤状态的元素:
- 在 Transform Step Statuses 元素之后添加 Update Records 元素,Label 输入
Update Steps; - How to Find Records 确认选 Use the IDs and all field values from a record or record collection;
- Record or Record Collection 选 Onboarding Project Steps from Transform Step Statuses;
- 保存 Flow。
方法 A 完成!下一单元用记录 ID 的文本集合重建同样的结果。
把数据从一种形态转换成另一种(03 Transform Data From One Form to Another)
本单元用记录 ID 的文本集合重建上一单元的 Flow,再用 In 运算符更新记录——因为 In 只能搜索简单值集合。
完成本单元后,你将能够:
- 用 Transform 元素把数据表选择转换成文本集合;
- 用 In 运算符更新与文本集合内容匹配的记录。
把集合转换成另一种类型的集合(Transform a Collection into a Different Type of Collection)
构建上一单元 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)
添加一个 Transform 元素:Label 输入 Transform Step IDs。
- Resource 选 Select_Steps 屏幕组件,展开 selectedRows 显示字段;
- 创建目标数据:Data Type 选 Text,勾选 Allow multiple values (collection),点击 Create;
- 映射 Id:在 Source Data 列把鼠标悬停在 Id 字段上点击,再在 Target Data 列点击 Transform_Step_IDs 行;
- 保存 Flow。
从 ID 更新 Onboarding Project Step 记录(Update Records from Their IDs)
最后添加带过滤条件的 Update Records 元素,找到 Id 在 Transform 文本集合里的所有记录:
- 在 Transform Step IDs 之后添加 Update Records 元素,Label 输入
Update Steps; - How to Find Records 选 Specify conditions to identify records, and set fields individually,Object 选 Onboarding Project Step;
- 条件(AND):Record ID In
Transform Step IDs;Status 设为 Select Steps to Update 屏幕 → New Status; - 保存 Flow。
注意画布看起来和方法 A 一模一样,但元素配置截然不同。两种方法配置耗时、运行耗时都差不多——记住:构建 Flow 时,同一种自动化往往有很多实现方式,有时只是个人偏好问题。
在集合变量中整理数据(04 Organize Data in a Collection Variable)
最后一个单元:用 Collection Filter 和 Collection Sort 元素在使用前整理集合变量,再构建一个 Flow 选出 Top 商机、把联系人添加为活动成员。
完成本单元后,你将能够:
- 过滤集合变量的内容;
- 排序集合变量的内容;
- 限制集合变量中的值数量。
过滤集合的内容(Filter a Collection’s Contents)
Collection Filter 元素顾名思义:对集合应用过滤器,移除不符合条件的值。但更准确地说,它创建一个副本集合,副本里不包含不符合条件的值,而原始集合保持不变——这一点很有用,因为之后仍可用未过滤的原集合。
例如:你有一个新服务公告邮件地址的文本集合,但想避开包含竞品域名的地址。Flow 现在有两个文本集合:一个含所有原始邮箱,一个不含竞品邮箱。
排序并截断集合的内容(Sort and Truncate a Collection’s Contents)
Collection Sort 元素能按你设定的条件改变集合顺序(例如按 Amount 降序重排商机记录)。它还有个重要功能:限制集合里的值数量,移除限制之后的所有值。按 Amount 降序排序后,你可以只保留前 10 个商机。
重要区别:与 Collection Filter 不同,Collection Sort 不创建新集合,而是直接修改你选择排序的那个集合。
最佳实践:能用 Get Records 的过滤/排序功能就优先用它(更高效、更快);只有在条件无法在 Get Records 时确定(如条件由 Decision 元素或屏幕输入决定)时才用这两个元素。
在 Flow 中过滤和排序(Filter and Sort in a Flow)
场景: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)
创建一个 Autolaunched Flow(No Trigger):
- 创建输入变量
recordId(Text,Available for input); - Get Records 元素 Get Campaign Details:Object 选 Campaign,条件 Campaign ID Equals recordId;
- Get Records 元素 Get Opps:Object 选 Opportunity,条件 Stage Does Not Equal Closed Lost,How Many Records 选 All records;
- Flow Label 输入
Create Top 10 Campaign Members。
Available for Input 必须对任何要接收 agent 数据的变量启用。
用 Decision 检查 Product Campaign Type(Check the Product Campaign Type with a Decision)
Flow 必须根据活动的 Product Campaign Type 走不同分支,所以创建 Decision 元素:Label 输入 What Product Campaign Type?。
结果(Product Campaign Type =):
- Generators;
- Bots;
- Other(默认)。
每条路径稍后:过滤该产品的商机、创建匹配的活动成员。
过滤并排序集合(Filter and Sort the Collection)
为每个产品建独立路径后,先创建 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)
现在你有了想要的数据:前 10 个非 Closed Lost、Main Product Category 为 GC、按 Amount 排序的商机。把这些商机的联系人转成活动成员:
- Transform Generator Contacts to CMs:Resource 选 Opportunities from Filter_Generators(Sort 没建新集合,仍引用 Filter 生成的集合),目标为 Record 集合、Object 选 Campaign Member,映射 ContactId → ContactId,CampaignId 用公式
{!recordId}; - 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;
- 保存 Flow。
在动手挑战里完成 Bots 路径即可收尾。离开前记住 Transform 最重要的规则:能用 Transform 就不用 Loop。
文章来源:Trailhead - Multirecord Elements and Transforms in Flows






























