salesforce在opportunity的opportunity products页面增加一个按钮,可以批量删除products
在 Salesforce 中,如果想在「Opportunity > Opportunity Products」列表页面上增加一个“批量删除产品”的按钮,并实现勾选多条产品后统一删除,大体可以考虑以下几种实现思路。由于环境和版本(Classic / Lightning)不同,具体操作也略有差异,下面分别做介绍。
一、在 Lightning 环境中实现
1. 使用 Flow + 自定义按钮/自定义操作(推荐做法)
-
创建 Flow(屏幕流 Screen Flow)
- 在 Flow 中先添加一个“获取记录”(Get Records)元素,用于获取 Opportunity Product(即
OpportunityLineItem
)的数据。 - 在界面上提供一个可供多选的列表控件(可以使用 Data Table 或者 Checkbox 的方式),让用户勾选需要删除的 Opportunity Products。
- 用户确认后,调用“删除记录”(Delete Records)元素删除选中的记录。
- 在 Flow 中先添加一个“获取记录”(Get Records)元素,用于获取 Opportunity Product(即
-
创建自定义按钮/操作(Action)
- 在「对象管理 > Opportunity > Buttons, Links, and Actions」中,点击“New Action”或“New Button or Link”。
- 如果使用的是 Lightning Action,则可以选择调用刚才创建好的 Flow(Screen Flow)。
- 将此按钮/操作添加到页面布局(Page Layout)或 Lightning Record Page 中,让用户能够在 Opportunity 的页面上点击打开。
-
效果
- 用户在 Opportunity Record Page 里点击该自定义操作(或按钮),弹出 Flow 屏幕,看到与该 Opportunity 相关的所有 Products 列表,勾选需要删除的产品,确认后执行删除。
注意要点
- Flow 中最好先做一下权限或错误处理,比如如果没有选择任何产品,也要提示用户。
- 如果列表数据量非常大,使用可分页的方式或者限制查询的数量也是值得考虑的。
2. 使用 LWC / Aura Component + 自定义按钮
如果需求更复杂,或对交互有更高要求,可以创建一个自定义 Lightning Web Component (LWC) 或 Aura Component,放到 Opportunity Record Page 上,具体步骤如下:
-
创建 LWC / Aura Component
- 在组件中编写逻辑,从后台(Apex Controller)查询当前 Opportunity 的所有 OpportunityLineItem。
- 在前端显示一个可多选的列表供用户勾选。
- 提供一个“Delete”按钮来执行批量删除的 Apex 方法。
-
Apex Controller
- 创建一个带
@AuraEnabled
的 Apex 方法,接收要删除的 OpportunityLineItem Id 列表。 - 在方法中执行
delete
语句或 Database.delete() 方法,完成删除操作,并处理可能的异常。
- 创建一个带
-
页面布局
- 将该自定义组件添加到 Lightning Record Page 的相关位置(例如使用 App Builder)中。
-
效果
- 用户可以在组件中多选 Opportunity Products,然后点击“Delete”按钮,实现批量删除。
二、在 Classic 环境中实现
如果仍在使用 Salesforce Classic,可以使用自定义列表按钮和 JavaScript 的方式来实现批量删除。需要注意,官方已不再推荐使用 JavaScript 按钮,但在 Classic 中依然是常见方案。
1. 创建自定义列表按钮(Custom List Button)
-
进入「对象管理 > Opportunity > Buttons, Links, and Actions」
- 点击“New Button or Link”。
-
按钮类型
- 在“Display Type”选择“List Button”。
- 在“Behavior”中选择“Display in existing window without sidebar or header”或者“Display in new window”皆可。
- 在“Content Source”中选择“OnClick JavaScript”。
-
编写 OnClick JavaScript 代码
- 代码功能大致包括:
- 获取 Opportunity Product 列表页面中选中的记录(
!REQUIRESCRIPT("/soap/ajax/xx/connection.js")
通常用在 Classic 中)。 - 若没有选中记录,弹窗提示需要先选择。
- 若有选择记录,弹窗确认后调用
sforce.connection.deleteIds()
或调用自定义 Apex Web Service 来删除。
- 获取 Opportunity Product 列表页面中选中的记录(
下面是一段示例 JavaScript(仅供参考,注意需要按实际环境进行调整):
{!REQUIRESCRIPT("/soap/ajax/36.0/connection.js")} {!REQUIRESCRIPT("/soap/ajax/36.0/apex.js")} var records = {!GETRECORDIDS($ObjectType.OpportunityLineItem)}; if (records.length === 0) { alert("请先勾选需要删除的产品!"); } else { if (confirm("确定要删除选择的产品吗?")) { // 调用 SFDC AJAX API 直接删除 sforce.connection.deleteIds(records); // 刷新页面 window.location.reload(); } }
- 这里的
!GETRECORDIDS()
能够获取在列表中勾选的记录的 Id 列表。
- 代码功能大致包括:
-
将此按钮添加到相关的 Related List
- 打开「对象管理 > Opportunity > Page Layout」,找到“Related List”配置。
- 在 Opportunity Page Layout 的“Opportunity Product”列表配置中,将刚才创建的 List Button 加进“Custom Buttons”区域。
-
效果
- 在 Opportunity 的「Related List」里,会多出一个自定义按钮。
- 用户在列表中勾选部分产品,点击按钮后执行 JavaScript 逻辑,即可批量删除。
三、综合对比
-
Lightning Flow 方式:
- 优点:无需写太多代码,配置为主,维护简单,可视化好。
- 缺点:UI 交互可能不如自定义组件灵活。
-
LWC / Aura Component 方式:
- 优点:UI 体验好,功能灵活,可以配合更多复杂需求。
- 缺点:需要一定的开发能力(前端 + Apex)。
-
Classic JavaScript List Button 方式:
- 优点:实现简单、快速,可直接在列表上批量操作。
- 缺点:JavaScript 按钮在 Lightning 中已不再被支持,今后升级可能需要重构。
总之,如果在 Lightning 环境下,最推荐的方式是使用Flow + 自定义按钮(Action),或者若有更丰富的界面需求,可以使用自定义组件 (LWC)。如果还停留在 Classic 环境,则可以使用自定义列表按钮 + JavaScript 的方式来实现批量删除。
根据以上思路设置好按钮后,就能满足在「Opportunity > Opportunity Products」页面,批量勾选并删除多条产品记录的需求了。