学习目标
在本项目中,你将:
- 使用 Flow Builder 创建并发送一封邮件,内容取自 Salesforce 记录和 Nonprofit Success Pack(NPSP)字段。
- 学习 Screen、Get Records、Action、Assignment、Update Records 元素的基础知识。
- 使用 flow 的 Resource 为邮件创建文本模板。
- 将 flow 添加到 Lightning 页面并设置组件可见性。
注意:本项目需使用预配置的 NPSP Trailhead Playground。截至 2025 年 12 月,NPSP 已不再作为预配置包提供给生产 org;截至 2026 年 3 月,从 Salesforce 发送邮件需进行域级和用户级邮箱验证,本项目不包含 DKIM 设置步骤,构建并触发 flow 后不会真正收到邮件,但仍可完成挑战。
项目背景
No More Homelessness(NMH)的发展总监 Aniyah Thompson 想表达感谢——不是对你,而是对她的捐赠者。
NMH 正经历一波捐赠潮,资本活动带来的曝光让这家非营利组织广受关注,员工急需新方式来管理捐赠确认消息。Aniyah 希望员工能轻松地感谢捐赠者:直接从 Closed Won 的 opportunity 记录发送简短的模板消息,并在每封邮件发出前有机会审核一遍。
NMH 的 Salesforce 管理员 Gorav Patel 想到了解决方案:Flow Builder。本项目跟随 Gorav 的流程,创建一个 flow:从 opportunity 和 contact 记录获取详情,插入邮件文本模板,生成邮件预览,发送消息,并更新 opportunity 记录以标记捐赠已被确认。
Flow Builder 简介
Flow Builder 是用点击(而非代码)为每个 Salesforce 应用、体验和门户构建自动化的工具。你通过连接几个提供的元素来创建 flow。
虽然 flow 类型很多,但最常用的两种是:
- Screen flow(屏幕流):自动化需要用户直接交互的业务流程,例如输入数据(本项目构建的就是 screen flow)。
- Autolaunched flow(自动启动流):在后台自动化流程,无需用户交互,例如按特定计划或在记录变更时触发。
Flow 可以创建和更新记录、创建任务和事件、发送邮件等。本项目教你 flow 的几个基础原理——使用 Screen 元素、获取和更新记录、创建文本模板、发送邮件——它不是一个完整方案,但完成后你就掌握了为捐赠者、志愿者和其他相关人员构建模板邮件的知识。
注册 NPSP Developer Edition Org
在开始之前,请先使用同一个 Trailhead Playground 完成 Set Up a Nonprofit Success Pack Trial for Trailhead 中的动手挑战,本项目的步骤建立在那个项目之上。
要完成本项目,你需要一个包含 Nonprofit Success Pack 和示例数据的特殊 Developer Edition org。获取免费的 Developer Edition 并连接到 Trailhead,即可完成本项目的挑战。务必确认使用的是 Trailhead Playground 或推荐的 Developer Edition org。
启动 Flow 并概览 Flow Builder
在前提项目中完成 NPSP 设置后,就可以启动 flow 了:
- 点击 Setup,然后选择 Setup。
- 在 Quick Find 输入
flows,点击 Process Automation 分类下的 Flows。 - 点击 New Flow。
- 选择 flow 类型,本项目选默认的 Screen Flow,因为你将从 opportunity 记录启动它,且需要用户交互。
进入 Flow Builder 后,先熟悉一下界面元素:
- Toolbox(工具箱):flow 的组件所在之处,分为 Elements(交互、逻辑、数据)和 Resources(变量、常量、公式、文本模板等信息的容器)。
- Canvas(画布):通过添加 Element 构建 flow 的地方,画布上已有 Start 和 End 元素,中间有 Add element 图标。
添加第一个 Screen
先在画布上添加一个 Screen 元素。Screen 用于收集或向用户展示信息。在本项目中,Screen 元素会出现在 opportunity 记录页,给用户一个预览和发送邮件的简单界面。
- 在 flow 画布上 Start 元素之后点击 +。
- 在 Interaction 分类中选择 Screen。
- 在 New Screen 界面指定属性:Label=
Launch、API Name=Launch(自动生成)、Description=This screen is embedded on the opportunity Lightning Page and allows the user to start the flow.、Configure Header 取消勾选 Show Header。
现在给新 screen 添加组件。组件提供输入字段或展示文本,引导用户进入下一步。从 Components 的 Display 分类拖一个 Display Text 到画布,API Name=displayText。
在文本编辑器输入:Ready to acknowledge this gift? Click Next.(可选:用富文本功能或添加图片美化)。点击 Done。
(顺带一提:displayText 中 Text 的大写是驼峰命名——API 名称不能用空格,用大写分隔单词更易读。)
保存 Flow
还有很多工作要做,但每个伟大的 flow 都始于第一个元素。在继续之前先保存:
- 点击 Save。
- 输入:Flow Label=
Gift Acknowledgment、Flow API Name=Gift_Acknowledgment(自动生成)、Description=Screen element that sends a gift acknowledgment email to donors after allowing users to first preview the email on an opportunity record. - 保存。
如果想看效果,可以点击 Run——这是个不错的 Screen 元素,但暂时还做不了什么。下一步获取数据并创建邮件模板。
获取记录并创建邮件模板
本单元添加 Get Records 元素获取捐赠者和捐赠数据,并创建 flow 的邮件文本模板。
获取所需数据
目前 flow 里有个 screen 问用户是否确认捐赠,但具体是哪个 opportunity?用 Get Records 元素获取用户启动 flow 的那条 opportunity 记录详情。
对于任何从记录页启动的 screen flow,都需要用一个变量捕获记录 ID,再把这个变量传给 flow 作为筛选条件:
- 在 Launch screen 之后点击 +。
- 在 Data 分类选择 Get Records。
- 属性:Label=
Get Opportunity、API Name=Get_Opportunity(自动生成)、Description=Look up all field values from the opportunity, whose ID is passed from the opportunity record to the flow in a text variable.
- Get Records of This Object:选择 Opportunity (Opportunity)。
- Condition Requirements:All Conditions Are Met (AND)。
- Field:Id (Opportunity ID)、Operator=Equals。
- Value:点击 + New Resource,Resource Type=Variable、API Name=
recordId(区分大小写,是记录 ID 的保留变量,必须精确写成小写 d、大写 I)、Data Type=Text、Availability Outside the Flow 选 Available for input。
- How Many Records to Store:Only the first record(默认)。
- How to Store Record Data:Automatically store all fields(默认)。
你刚告诉 Get Records 元素:找到那条匹配 recordId 的 opportunity 记录,并存储其所有字段。这样后续邮件就能使用该记录的全部字段。同样的思路也适用于其他场景——比如找出金额超过 100 美元、且主要联系人住在某地区的 opportunity。
创建邮件模板
现在创建另一个变量:你的邮件模板。在 Flow Builder 工具箱打开 Manager 选项卡,可以看到所有已用到的资源和元素(包括刚创建的 recordId 变量)。
- 点击 New Resource。
- Resource Type 选 Text Template(用于存储可在 flow 中反复使用的文本,就像邮件模板)。
- API Name=
emailBody、Description=This is the email template to send to acknowledge the gift.
进入邮件正文,确保 View as Rich Text(默认)已选中。先输入 Dear 加一个空格,然后从 opportunity 记录及其关联 contact 记录提取详情。
先获取捐赠者姓名:点击 Insert a resource… 搜索栏 → 选 Opportunity from Get_Opportunity(Get Records 创建的记录变量)→ 选 Primary Contact → 选 FirstName (First Name)。Body 中应出现 {!Get_Opportunity.npsp__Primary_Contact__r.FirstName}。
用同样方式获取 Amount 和 Close Date({!Get_Opportunity.Amount}、{!Get_Opportunity.CloseDate})。还可以用 Running User 全局变量获取启动 flow 的用户姓名({!$User.FirstName}、{!$User.LastName}),让邮件以发送人署名。
用这些字段拼出邮件正文,每行之间记得留一个回车。模板完成后点击 Done,保存 flow。下一步设置预览,发送前核对邮件内容。
创建预览屏幕与发送邮件动作
本单元添加一个预览屏幕让用户发送前审核邮件,再配置 Send Email 动作把邮件投递给捐赠者。
构建邮件预览
设置好邮件模板后,添加一个在发送前预览它的方式——虽然可以不预览直接发送,但最好在发出前做最后核对。为此再添加一个 Screen 元素:
- 在 Get Opportunity 之后点击 +。
- Interaction 分类选 Screen。
- 属性:Label=
Email Preview、API Name=Email_Preview、Description=Shows the user a preview of the email before sending it.、Configure Header 取消 Show Header、Configure Footer 的 Next/Finish 用标准标签、Previous 选 Hide、Pause 选 Hide。
- 添加 Display Text 组件,API Name=
displayEmailBody,点击 Insert a resource 搜索栏选 emailBody 文本模板(添加{!emailBody})。 - 在
{!emailBody}后回车两次,添加提示文字:READY TO SEND THIS EMAIL? If so, click Next. If not, make adjustments to the Opportunity and Primary Contact records and refresh the page. - 点击 Done,保存。
创建发送邮件的 Action
现在发送邮件。使用 Action 元素——Salesforce 在 Action 元素下提供了多种标准动作,如提交记录审批、发布 Chatter、发送调查和发送邮件。
- 在 Email Preview screen 之后点击 +。
- Interaction 分类选 Action。
- 在 Action 窗口找到并选择 Send Email。
- Label=
Send Email、API Name=Send_Email(自动生成)、Description=This element sends the email. - Set Input Values 的 Recipient Addresses:选 Opportunity from Get Opportunity → Primary Contact → Email。
- Sender Email Address 留空(将来自运行 flow 的用户,即你的 Trailhead 邮箱)。
- Subject:
Thank you for your gift to No More Homelessness! - Body:点击图标选 Search Resources,搜索并选择 emailBody。
- Rich-Text Formatted Body:在 Global Constants 里选 True(告诉 Send Email 以富文本格式发送)。
保存 flow(可能收到邮件地址格式错误提示,可暂时忽略)。至此已能发送邮件,但还要添加几个元素——发送邮件时还想改 opportunity 记录的几个字段,标记捐赠已被确认,下一步来做。
更新记录并调试 Flow
本单元用 Assignment 和 Update Records 元素标记 opportunity 已感谢,然后测试并调试整个 flow。
添加 Assignment 元素
你不只想发送确认邮件,还想记录捐赠已被确认。在 NPSP 中,可以用 opportunity 记录的 Acknowledgment Status 和 Acknowledgment Date 字段记录这些值。
先用 Assignment 元素改 opportunity 的记录变量(flow 中存储 Salesforce 记录详情的特殊变量),再用 Update Records 元素把更改写入数据库。
- 在 Send Email action 之后点击 +(flow 太大找不到图标时,可用 Zoom out 或 Fit to canvas)。
- Logic 分类选 Assignment。
- Label=
Acknowledgment Status(拼写要精确,通过挑战需此名)、API Name=Acknowledgment_Status、Description=The assignment element sets the values for the opportunity record before we update it in the database. - Variable:Opportunity from Get Opportunity → Acknowledgment Status;Operator=Equals;Value=Acknowledged。
- 点击 + Add Assignment:Variable → Acknowledgment Date;Operator=Equals;Value=选 Running Flow Interview → CurrentDate。
保存 flow。
更新记录
Assignment 元素已在内存中存好值,现在用 Update Records 把这些值写回原始 opportunity。
- 在 Acknowledgment Status assignment 之后点击 +。
- Data 分类选 Update Records。
- Label=
Update Opportunity、API Name=Update_Opportunity、Description=Update the opportunity record and save the new Acknowledgment Status and Acknowledgment Date to the database. - How to Find Records to Update and Set Their Values:选 Use the IDs and all field values from a record or record collection。
- Record or Record Collection:Opportunity from Get Opportunity。
保存。现在 flow 已具备所有需要的元素!
测试与调试 Flow
离开 Flow Builder 前,可以用两种方式测试:Run 或 Debug。
- Run:以用户视角查看 flow 的两个 screen。但 Run 不会把 opportunity 记录的详情传给 flow,所以邮件模板基本是空的,也没有可发送的邮箱地址。
- Debug:提供更多选项和详情。对本 flow 尤其有用,因为可以在第一个 screen 输入 flow 所需变量——例如粘贴 opportunity ID(URL 中 /Opportunity/ 后面的 18 位码)再点 Run,就能看到 flow 的全部功能,以及 Debug Details 逐步展示 flow 的每一步。运行成功会显示 All done 和 Transaction Committed,出错则显示错误消息。
两种方式都试试看,完成后关闭浏览器标签回到 Flow Builder。
激活 Flow
关键时刻!在 Flow Builder 点击 Activate 激活 flow。
不过激活并不意味着用户能找到它。下一步把 flow 放到 opportunity 页面、创建测试记录,并给自己发邮件看看整体效果。
部署并使用 Flow
本单元把 flow 部署到 Opportunity Lightning 页面,添加为 Flow 组件,并端到端测试用户体验。
准备部署 Flow
刚构建的 flow 会出现在 Lightning 页面,用户通过之前添加的 Screen 组件与它交互——这样用户能在 opportunity 记录上下文中看到邮件预览。
这不是用户与 flow 交互的唯一方式:可以把它部署为 Lightning 页面上的对象特定 action 按钮、utility bar 里的按钮等,还可以把访问权限限制到特定用户或权限集。你也可以通过 flow 本身或组件可见性设置来控制 flow 何时出现——接下来就要用组件可见性。
编辑 Opportunity Lightning 页面
是时候离开 Flow Builder,回到 NPSP 了:
- 在 Flow Builder 点击 Back 回到 Setup。
- 点击 App Launcher,找到并选择 Opportunities。
- 在 Opportunities 列表视图点击任意 Opportunity Name 打开记录(可能需要先把列表视图改成 All Opportunities)。
- 点击 Setup,然后点击 Edit Page 进入 Lightning App Builder。
添加 Flow 组件到 Opportunity 页面
把 flow 加到 NPSP Opportunity Record Page 的次列顶部(含 Activity Timeline 和 Chatter 组件的那一列)。找到 Flow 组件,拖到次列顶部、Activities Timeline 上方。
然后做如下选择:Flow=Gift Acknowledgment(已激活)、Layout=One Column、recordId=选 Pass record ID into this variable(自动填入 recordId 文本框)。
你不想 flow 出现在每个 opportunity 上——只在「已关闭且未确认的捐赠」且「捐赠者是个体且系统中有邮箱」时显示。用 Set Component Visibility 添加几个过滤器实现:
- 过滤器 1(检查邮箱):Filter Type=Advanced、Field=Record → Primary Contact → Email、Operator=Not Equal、Value 留空。
- 过滤器 2(检查类型为捐赠):Filter Type=Advanced、Field=Record → Opportunity Record Type → Name、Operator=Equal、Value=
Donation。
- 过滤器 3(检查未确认):Filter Type=Record Field、Field=Acknowledgment Status、Operator=Not Equal、Value=Acknowledged。
- 过滤器 4(检查 Closed Won):Filter Type=Record Field、Field=Stage、Operator=Equal、Value=Closed Won。
Show component when 选 All filters are true(默认),点击 Save。
点击 Back 返回记录页查看新 flow。若 opportunity 不满足过滤器,flow 不会显示,所以在符合条件的新记录上测试。
使用 Flow
先创建一个带你自己邮箱的 contact 来测试邮件:
- 点击 App Launcher,找到并选择 Nonprofit Success Pack。
- 点击 Contacts 选项卡的 Contacts 菜单,选 New Contact。
- 输入:First Name=
Gorav、Last Name=Patel、Account Name 留空(自动创建 household 账户)、Preferred Email=Personal、Personal Email=你的邮箱,点击 Save。
再创建一条 opportunity:
- 在 contact 记录点击 New Donation。
- Opportunity Name 用默认、Close Date 用默认(今天)、Stage 改为 Closed Won、Amount=
100.00,点击 Save。 - 点击通知里的 opportunity 名,或到 contact 的 Related 选项卡点 Opportunities 相关列表里的 opportunity,打开它。
在 opportunity 次列的 flow 里点击 Next,检查邮件详情是否正确。
确认无误后点击 Next 发送邮件。发送前先看 opportunity 记录,确认 Acknowledgment Status 和 Acknowledgment Date 字段已自动填充。
然后到邮箱查看,应收到主题为 Thank you for your gift to No More Homelessness!、来自 Trailhead 账号邮箱的邮件。
Flow:完成
在(虚构的)No More Homelessness,管理员 Gorav 向 Fundraising 团队演示了他的 flow,团队赞不绝口,迫不及待要马上用起来。
在本项目中,你设置了 screen flow,学习了几个重要的 flow 元素和变量,并把它部署到可用状态。即便你不需要捐赠确认,用这些 flow 构建块也能创建其他类型的「一键邮件」,发送给捐赠者、服务对象或同事。Flow 是个强大的工具——现在你可以开始用它自动化团队的流程了。
文章来源:Trailhead - Build a Donor Email Flow for Nonprofit Success Pack (NPSP)























