Salesforce 开发整理(四)记录锁定
如果一个对象的记录在满足某个条件的情况下,希望能对其进行锁定,即普通用户没有权限对其进行编辑操作,记录页面显示如下图

一般会在提交审批,或者项目进行到某个阶段的情况下,由后台进行判断要不要锁定记录,或者管理员在某种情况下选择手动锁定记录。
在代码开发之前,需要在系统中进行配置,设置==>工作流和批准==>流程自动设置==>在Apex中启用记录锁定和解锁

加下来看下通过Apex加锁的代码
String id='0067F000003oTQu';//传入一条记录id
if(!Approval.isLocked(id)){//Approval.isLocked(id) 判断记录是否加锁
Approval.lockResult ur = Approval.lock(id);//给一条记录加锁
if (ur.isSuccess()) {//方法执行状态
System.debug('成功锁定记录,ID为:' + id);
} else {
for(Database.Error err : ur.getErrors()) {
System.debug('锁定失败');
System.debug('=============失败消息:' + err.getStatusCode() + ': ' + err.getMessage());
}
}
}
可以看到日志显示:成功锁定记录,ID为:0067F000003oTQu
但是去到记录页面发现并没有出现加锁的那把“锁”图标

但是我们后台再次执行Approval.isLocked()方法进行判断可以看到返回值是true,也就是说系统判断这条记录应该是被锁上的状态,那么问题在哪里呢?
要处理的地方在于配置审批流,如果没有一个启用的审批流,在记录页面上是不会有加锁的标记出现的,我在系统中配置了一条无效审批流,没有任何操作,仅仅为了记录上的那把锁

当启用了审批流后,记录上就能看到如下被锁上的记录了

知道了如何加锁,同样的解锁也很简单了
String id='0067F000003oTQu';
if(Approval.isLocked(id)) {
Approval.UnlockResult ur = Approval.unlock(Id);
if (ur.isSuccess()) {
System.debug('成功解锁记录,ID为:' + id);
} else {
for(Database.Error err : ur.getErrors()) {
System.debug('解锁失败');
System.debug('=============失败消息:' + err.getStatusCode() + ': ' + err.getMessage());
}
}
}
记录被锁定的情况下使用代码去修改,如果执行用户的权限不够则会报错,所以在有锁定的情况,先判断一手是否记录被锁定是很有必要的操作
最后,Salesforce也提供了批量锁定的方法
//方法名相同,返回值是一个数组
Approval.UnlockResult[] lrList = Approval.unlock(ListObject, true);//解锁
Approval.LockResult[] lrList = Approval.lock(ListObject, false);//加锁
如上,关于使用代码实现对记录的锁定与解锁操作,如有遗漏,欢迎指正,有问题欢迎留言
Salesforce 开发整理(四)记录锁定的更多相关文章
- Salesforce 开发整理(八)PDF打印相关
一:基础设置 Salesforce中的PDF页面本质上还是Visualforce[简称VF]页面,所以只需要给VF页面加上一个属性[renderAs="pdf"] 即可生成一个PD ...
- Salesforce 开发整理(五)代码开发最佳实践
在Salesforce项目实施过程中,对项目代码的维护可以说占据极大的精力,无论是因为项目的迭代,还是需求的变更,甚至是项目组成员的变动,都不可避免的需要维护之前的老代码,而事实上,几乎没有任何一个项 ...
- Salesforce 开发整理(七)配置审批流
salesforce提供了比较强大的可配置审批流功能,在系统中翻译为“批准过程”.所以需要配置审批时,选择创建 ——> 工作流和批准 ——> 批准过程,然后选择管理批准过程,选择需要配置 ...
- Salesforce 开发整理(二)报表开发学习
Salesforce提供了强大的报表功能,支持表格.摘要.矩阵以及结合共四种形式,本文探讨在站在开发的角度要如何理解报表. 一:查询报表基本信息报表在Sales force中是Report对象,基本的 ...
- Salesforce 开发整理(一)测试类最佳实践
在Sales force开发中完善测试类是开发者必经的一个环节,代码的部署需要保证至少75%的覆盖率,那么该如何写好测试类呢. 测试类定义格式如下: @isTest private class MyT ...
- Salesforce 开发整理(九) 开发中使用的一些小技巧汇总[持续更新]
1.查询一个对象下所有字段 当需要查询一个对象所有字段进行复制或其他操作,可以使用一段拼接的语句来查询 String query = 'select '; for(String fieldApi : ...
- Salesforce 开发整理(十)项目部署总结
项目部署顺序 全局值集 小组 自定义字段-对象-设置(SF1 紧凑布局要和记录类型在这里要一起部署) 邮件模板-静态资源 角色 工作流-流定义(包含进程生成器) 批准过程 开发部署<Apex类, ...
- Salesforce 开发整理(六) Visualforce分页
分页的实现总体上分真分页和假分页. 所谓真分页指页面上列出来的数据就是实际查询的数据,假分页则是无论页面上一次显示多少条记录,实际上后台已经加载了所有的记录,分页只是为了展示给用户查看.今天分享一个V ...
- Salesforce 开发整理(三)权限共享
Salesforce提供对象的访问权限可以通过 安全性控制 → 共享设置,可以查看每个对象在系统内部默认的访问权限 共用读写:对象的记录任何用户都可以进行读写操作 公用只读:对象的记录任何用户都可以查 ...
随机推荐
- 在Button样式中添加EventSetter,理解路由事件
XML <Window.Resources> <Style x:Key="ButtonStyle2" TargetType="{x:Type Butto ...
- 【BZOJ4942】[NOI2017]整数(分块)
[BZOJ4942][NOI2017]整数(分块) 题面 BZOJ 洛谷 题解 暴力就是真正的暴力,直接手动模拟进位就好了. 此时复杂度是模拟的复杂度加上单次询问的\(O(1)\). 所以我们需要优化 ...
- php-fpm解读-进程管理的三种模式
php-fpm进程管理一共有三种模式:ondemand.static.dynamic,我们可以在同一个fpm的master配置三种模式,看下图1.php-fpm的工作模式和nginx类似,都是一个ma ...
- PHP中,json汉字编码
当用json与js或者其它客户端交互时,如果有中文,则会变成unicode.虽然能使用,但是影响观看.不好调试呀.从网上找到了几个方法 一,用下面这个函数,需要编码时,直接调用这个函数就成 funct ...
- springmvc4 mybatis 整合 框架源码 bootstrap html5 mysql oracle sqlsever spring SSM
A 调用摄像头拍照,自定义裁剪编辑头像 [新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统]B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,开发利器)+快速构建表单; 技 ...
- RabbitMQ如何实现高可用
RabbitMQ一共具有三种模式:单机.普通集群.镜像集群 单机模式 单机模式,就是我们平常玩的demo,生产上肯定不能用.具体安装部署过程可以参考我的这篇文章:CentsOS原生RabbitMQ安装 ...
- 设计模式之(十一)代理模式(Proxy)
软件开发行业有一个观点:任务问题都可以添加一个中间层来解决.代理模式也是这个思想下的产物. 首先看下代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问.就是把类委托给另外一个类,用这个类来控 ...
- webpack详细介绍以及配置文件属性!
1.webpack简单介绍 (1)webpack是一个用于实现前端模块化开发工具,可帮助我们自动打包编译成浏览器能够识别的代码 :同时支持commonjs规范 以及es6的import规范: 同时具备 ...
- node+express修改代码会自动重新运行
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/weixin_40822305/artic ...
- day 48
目录 js BOM(浏览器对象模型) window对象 window子对象 弹出框 计时事件 DOM(文档对象模型) 查找标签 节点操作 事件 常用事件 绑定方式 jQuery jQuery介绍 jQ ...