在 Salesforce Lightning 环境中,如果你做的是 Screen Flow(屏幕流),默认情况下当用户点击 “Finish” (完成) 按钮时,Flow 会直接结束,并停留在 Flow 最后一个屏幕或弹窗上。很多人希望 Flow 结束后自动返回到上一页(比如返回到调用 Flow 的那个记录页面),有几种思路可以实现,下面给出常见做法。
1. 使用 retURL 参数 + 自定义按钮/链接
1.1 自定义按钮/链接,拼接 Flow URL
-
在 Opportunity (或其他对象) 上新建一个自定义按钮/链接 (Detail Page Button or Link)。
-
Content Source 选择 URL,然后在 URL 里拼接 Flow 的访问地址以及一个 retURL 参数,例如:
/flow/My_Flow_API_Name?recordId={!Opportunity.Id}&retURL=/{!Opportunity.Id}
- 其中
recordId
用于告诉 Flow 当前操作的记录ID; retURL
用于告诉 Flow 在结束后要跳转到哪里,通常可以是上一步的记录详情/{!Opportunity.Id}
,也可以是其它自定义页面或 URL。
- 其中
-
在 Flow 中创建一个名为
recordId
(可选) 的 输入变量,确保勾选 Available for Input;
同理,如果想要拿到 retURL,也可以在 Flow 中创建一个retURL
的文本变量,勾选 Available for Input。 -
将此按钮放到对象的 Page Layout 中。用户点击该按钮进入 Flow,Flow 结束时如果 Salesforce 识别到
retURL
,就会自动跳回指定页面(有时可能需要在最后的 Finish 屏幕设置或在 URL 重定向上做处理,见下述注意)。
注意:
- 在 Lightning 中,如果你使用的是 弹窗打开 Flow(Quick Action 弹窗)这种模式,
retURL
可能不会生效,因为弹窗内不一定会认这个 URL 参数; - 如果是在 浏览器新窗口/同窗口 打开 Flow,一般
retURL
可以生效; - Classic 环境中,这个方法非常常见和好用,Lightning 则要看具体打开方式(弹窗 or 新tab)。
2. 使用 Flow Finish Location 配置
- 编辑你的 Screen Flow 后,点击 Flow Builder 右上角的齿轮图标 (Settings),有时可以看到 Finish Behavior / End Screen 或类似的配置项(不同版本可能略有差异)。
- 如果版本支持,可以在这里指定 Finish Location,输入一个 URL。这样当用户点击 “Finish” 时会直接跳转到所填的 URL。
- 你可以将 “上一页” 或 “某个记录页面” 的链接填在这里。
- 例如:
/lightning/r/Opportunity/{!recordId}/view
- 或者
/apex/CustomPage
、外部链接等。
- 例如:
但是:
- 并不是所有版本的 Flow Builder 都有这个“Finish Location”设置,如果没有,就只能用别的办法(例如 retURL、LWC 包装等)。
3. 在 Quick Action 中,Flow 结束后自动返回
如果你是通过 Quick Action(在对象上新建的 Action,类型是 Flow)来调用屏幕流,那么当用户点击 Flow 的 “Finish” 时,Salesforce 通常会把弹窗关闭并直接返回到记录页面。这是系统的默认行为。
- 前提:你的 Flow 中没有专门做任何 “Navigation” 或 “Finish Location” 设置。
- 用户点 Finish,自动关闭弹窗,就相当于“回到”调用 Quick Action 的那一页了。
如果你在 Quick Action 环境下发现无法自动返回:
- 检查是否在 Flow 里加了最后一个 “Screen” 并让用户点击某个按钮时使用了特定的 Navigation 元素,或嵌入了别的逻辑。
- 一般默认情况下,Finish 就会返回或关闭弹窗。
4. 使用 LWC / Aura 包装 Flow,监听“完成事件”后导航
如果你想要更灵活地掌控 Flow 结束后的行为(比如做一些逻辑计算再跳转),可以用 LWC 或 Aura Component 将 Flow 嵌入,然后通过代码监听 Flow 的 onstatuschange 或 onfinish 回调事件,进行跳转:
4.1 LWC 示例
<template><lightning-flowflow-api-name="My_Flow_API_Name"onstatuschange={handleStatusChange}resume-flow-api-name={flowInterview}></lightning-flow>
</template>
import { LightningElement, track } from 'lwc';
import { NavigationMixin } from 'lightning/navigation';export default class MyFlowContainer extends NavigationMixin(LightningElement) {@track flowInterview;handleStatusChange(event) {if (event.detail.status === 'FINISHED') {// 在这里执行自动跳转// 例如,返回到上一页 (不能直接"back"浏览器,但可以导航到特定record页面)this[NavigationMixin.Navigate]({type: 'standard__recordPage',attributes: {recordId: '某个记录ID', // 或者从param中获取actionName: 'view'}});}}
}
- 将此 LWC 放到 Record Page 或者单独的 App Page 当中。
- 当 Flow 结束后 (FINISHED),JS 里捕捉到这个事件,再执行
NavigationMixin.Navigate
返回到你想要的页面(比如当前 Opportunity 详情)。
优点:
- 很灵活,可以做一些逻辑判断后再跳转,比如自动跳转到不同页面。
缺点: - 需要写一点 LWC / Aura 代码。
5. 嵌入式 Flow (在页面布局里直接显示)
如果你将 Flow 直接嵌入在 Lightning Record Page (App Builder 里把 Flow 拖到页面上),那么当 Flow 结束时,其实还停留在同一个页面,只是 Flow 本身会显示最后一个屏幕或“完成”的提示。如果想做自动跳转,可以用第 4 点 (LWC 包装) 的思路,或使用 Flow Builder 自带的 Finish Location (如果可用)。
6. 小结
-
最简单:
- 自定义按钮 + retURL:将 Flow URL 和
retURL=xxx
拼接好,当 Flow 结束(用户点 Finish)时,会自动跳转到retURL
指定的地址。 - Quick Action 调用 Flow:大部分情况下点击 “Finish” 会自动关闭弹窗、返回记录页面。
- 自定义按钮 + retURL:将 Flow URL 和
-
更高级:
- Flow 设置 Finish Location:如果有该功能,可直接在 Flow 配置里指定结束后要跳去哪。
- LWC / Aura 包装 Flow:监听 Flow 完成事件后做自定义导航。
无论使用哪种方案,其核心就是给 Flow 一个要返回的 URL(或导航目标),并在 Flow 结束/用户点击 Finish 时,让系统进行跳转。这样就能实现 “Flow结束后自动返回上一步页面” 的效果。