salesforce在opportunity的opportunity products页面增加一个按钮,可以批量删除products

在 Salesforce 中,如果想在「Opportunity > Opportunity Products」列表页面上增加一个“批量删除产品”的按钮,并实现勾选多条产品后统一删除,大体可以考虑以下几种实现思路。由于环境和版本(Classic / Lightning)不同,具体操作也略有差异,下面分别做介绍。


一、在 Lightning 环境中实现

1. 使用 Flow + 自定义按钮/自定义操作(推荐做法)

  1. 创建 Flow(屏幕流 Screen Flow)

    • 在 Flow 中先添加一个“获取记录”(Get Records)元素,用于获取 Opportunity Product(即 OpportunityLineItem)的数据。
    • 在界面上提供一个可供多选的列表控件(可以使用 Data Table 或者 Checkbox 的方式),让用户勾选需要删除的 Opportunity Products。
    • 用户确认后,调用“删除记录”(Delete Records)元素删除选中的记录。
  2. 创建自定义按钮/操作(Action)

    • 在「对象管理 > Opportunity > Buttons, Links, and Actions」中,点击“New Action”或“New Button or Link”。
    • 如果使用的是 Lightning Action,则可以选择调用刚才创建好的 Flow(Screen Flow)。
    • 将此按钮/操作添加到页面布局(Page Layout)或 Lightning Record Page 中,让用户能够在 Opportunity 的页面上点击打开。
  3. 效果

    • 用户在 Opportunity Record Page 里点击该自定义操作(或按钮),弹出 Flow 屏幕,看到与该 Opportunity 相关的所有 Products 列表,勾选需要删除的产品,确认后执行删除。
注意要点
  • Flow 中最好先做一下权限或错误处理,比如如果没有选择任何产品,也要提示用户。
  • 如果列表数据量非常大,使用可分页的方式或者限制查询的数量也是值得考虑的。

2. 使用 LWC / Aura Component + 自定义按钮

如果需求更复杂,或对交互有更高要求,可以创建一个自定义 Lightning Web Component (LWC) 或 Aura Component,放到 Opportunity Record Page 上,具体步骤如下:

  1. 创建 LWC / Aura Component

    • 在组件中编写逻辑,从后台(Apex Controller)查询当前 Opportunity 的所有 OpportunityLineItem。
    • 在前端显示一个可多选的列表供用户勾选。
    • 提供一个“Delete”按钮来执行批量删除的 Apex 方法。
  2. Apex Controller

    • 创建一个带 @AuraEnabled 的 Apex 方法,接收要删除的 OpportunityLineItem Id 列表。
    • 在方法中执行 delete 语句或 Database.delete() 方法,完成删除操作,并处理可能的异常。
  3. 页面布局

    • 将该自定义组件添加到 Lightning Record Page 的相关位置(例如使用 App Builder)中。
  4. 效果

    • 用户可以在组件中多选 Opportunity Products,然后点击“Delete”按钮,实现批量删除。

二、在 Classic 环境中实现

如果仍在使用 Salesforce Classic,可以使用自定义列表按钮和 JavaScript 的方式来实现批量删除。需要注意,官方已不再推荐使用 JavaScript 按钮,但在 Classic 中依然是常见方案。

1. 创建自定义列表按钮(Custom List Button)

  1. 进入「对象管理 > Opportunity > Buttons, Links, and Actions」

    • 点击“New Button or Link”。
  2. 按钮类型

    • 在“Display Type”选择“List Button”。
    • 在“Behavior”中选择“Display in existing window without sidebar or header”或者“Display in new window”皆可。
    • 在“Content Source”中选择“OnClick JavaScript”。
  3. 编写 OnClick JavaScript 代码

    • 代码功能大致包括:
      1. 获取 Opportunity Product 列表页面中选中的记录(!REQUIRESCRIPT("/soap/ajax/xx/connection.js") 通常用在 Classic 中)。
      2. 若没有选中记录,弹窗提示需要先选择。
      3. 若有选择记录,弹窗确认后调用 sforce.connection.deleteIds() 或调用自定义 Apex Web Service 来删除。

    下面是一段示例 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 列表。
  4. 将此按钮添加到相关的 Related List

    • 打开「对象管理 > Opportunity > Page Layout」,找到“Related List”配置。
    • 在 Opportunity Page Layout 的“Opportunity Product”列表配置中,将刚才创建的 List Button 加进“Custom Buttons”区域。
  5. 效果

    • 在 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」页面,批量勾选并删除多条产品记录的需求了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/67383.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

卷积神经网络的底层是傅里叶变换

1 卷积神经网络的底层是傅里叶变换,傅里叶变换的底层是希尔伯特空间坐标变换_哔哩哔哩_bilibili 卷积神经网络的底层是傅里叶变换,傅里叶变换的底层是希尔伯特空间坐标变换_哔哩哔哩_bilibili从“卷积”、到“图像卷积操作”、再到“卷积神经网络”&…

攻防世界_SQL注入

inget 尝试万能钥匙。 输入?id1or11# supersqli 1.找注入点 输入框 2.判断字符型,数字型 输入1 and 11 和1 and 12,发现两次提交后页面一样,判断出为字符型注入 3.判断闭合符号 输入1,回显正常 输入1,报错 加上…

怎么把文章发表到网上?在平台上投稿文章会有哪些常见问题?

怎么把文章发表到网上?在发表文章的过程中,我们可能会碰到各种各样的问题。这些问题要么导致发表时间被拖长,要么可能导致文章被拒稿。 就让我们来了解下文章发表过程中需要注意的一些细节,知晓怎么顺利地把文章发表到网上。 一、…

检验统计量与p值笔记

一、背景 以雨量数据为例,当获得一个站点一年的日雨量数据后,我们需要估计该站点的雨量的概率分布情况,因此我们利用有参估计的方式如极大似然法估计得到了假定该随机变量服从某一分布的参数,从而得到该站点的概率密度函数&#x…

【Flink系列】6. Flink中的时间和窗口

6. Flink中的时间和窗口 在批处理统计中,我们可以等待一批数据都到齐后,统一处理。但是在实时处理统计中,我们是来一条就得处理一条,那么我们怎么统计最近一段时间内的数据呢?引入“窗口”。 所谓的“窗口”&#xff…

C#轻松实现条形码二维码生成及识别

一、前言 大家好!我是付工。 今天给大家分享一下,如何基于C#来生成并识别条形码或者二维码。 二、ZXing.Net 实现二维码生成的库有很多,我们这里采用的是http://ZXing.Net。 ZXing是一个开放源码的,用Java实现的多种格式的一…

OpenCV实现Kuwahara滤波

Kuwahara滤波是一种非线性的平滑滤波技术,其基本原理在于通过计算图像模板中邻域内的均值和方差,选择图像灰度值较为均匀的区域的均值来替代模板中心像素的灰度值。以下是Kuwahara滤波的详细原理说明: 一、基本思想 Kuwahara滤波的基本思想…

24-25-1-单片机开卷部分习题和评分标准

依据相关规定试卷必须按评分标准进行批改。 给分一定是宽松的,能给分一定给,如有疑问也可以向学院教务办申请查卷。 一部分学生期末成绩由于紧张或其他原因导致分数过低,也是非常非常遗憾的。 个人也是非常抱歉的。 开卷考试 简答题 第一…

linux之进程信号(初识信号,信号的产生)

目录 引入一、初识信号(信号预备知识)1.生活中的信号2.Linux中的信号3.信号进程得出的初步结论 二、信号的产生1.通过终端输入产生信号拓展: 硬件中断2.调用系统函数向进程发信号3.硬件异常产生信号4.软件条件产生信号拓展: 核心转储技术总结一下: 引入 一、初识信…

【工具类】获取日出日落时间的Java工具类

博主介绍:✌全网粉丝22W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…

Open FPV VTX开源之betaflight配置

Open FPV VTX开源之betaflight配置 1. 源由2. 配置3. 总结4. 参考资料5. 补充 - 飞控固件版本 1. 源由 飞控嵌入式OSD - ardupilot配置使用betaflight配套OSD图片。 Choose correct font depending on Flight Controller SW. ──> /usr/share/fonts/├──> font_btfl…

Python从0到100(八十三):神经网络-使用残差网络RESNET识别手写数字

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、 计算机视觉、机器学习、神经网络以及人工智能…

docker安装和测试redis步骤

docker安装和测试redis步骤 一、官方推荐安装方式: 1、执行 docker pull redis:4.0.1 命令,下载 redis 镜像,如下所示: 2、执行命令,创建并启动redis容器 docker run - -rm -d - -name redis6379 -p 6379:6379 r…

微信小程序原生与 H5 交互方式

在微信小程序中,原生与 H5 页面(即 WebView 页面)之间的交互通常有以下几种方式: 1. 使用 postMessage 进行通信 微信小程序的 WebView 页面和原生小程序页面可以通过 postMessage 来进行数据传递。 WebView 页面向原生小程序发…

vue3学习日记5 - 项目起步

最近发现职场前端用的框架大多为vue,所以最近也跟着黑马程序员vue3的课程进行学习,以下是我的学习记录 视频网址: Day2-11.项目起步-静态资源引入和ErrorLen安装_哔哩哔哩_bilibili 学习日记: vue3学习日记1 - 环境搭建-CSDN博…

计算机组成原理--笔记一

目录 一.计算机硬件的基本组成 1.早期冯诺依曼机的结构 2.现代计算机的结构 二.各个硬件的工作原理 1.主存储器 i. 读取数据 ii. 写入数据 1.1 基本组成 2.运算器 3.控制器 一.计算机硬件的基本组成 1.早期冯诺依曼机的结构 “存储程序”,将指令以二进制的形式输入…

漫话架构师|什么是系统架构设计师(开篇)

~犬📰余~ “我欲贱而贵,愚而智,贫而富,可乎? 曰:其唯学乎” 关注犬余,共同进步 技术从此不孤单

CV(10)--目标检测

前言 仅记录学习过程,有问题欢迎讨论 目标检测 object detection,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别;输出的是分类类别label物体的外框(x, y, width, height)。 目标检测算法&#xff1a…

【Qt】01-了解QT

踏入QT的殿堂之路 前言一、创建工程文件1.1 步骤介绍1.2 编译介绍方法1、方法2、编译成功 二、了解框架2.1 main.cpp2.2 .Pro文件2.2.1 注释需要打井号。2.2.2 F1带你进入帮助模式2.2.3 build文件 2.3 构造函数 三、编写工程3.1 main代码3.2 结果展示 四、指定父对象4.1 main代…

【深度学习】关键技术-激活函数(Activation Functions)

激活函数(Activation Functions) 激活函数是神经网络的重要组成部分,它的作用是将神经元的输入信号映射到输出信号,同时引入非线性特性,使神经网络能够处理复杂问题。以下是常见激活函数的种类、公式、图形特点及其应…