Salesforce 开发整理(四)记录锁定

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

一般会在提交审批,或者项目进行到某个阶段的情况下,由后台进行判断要不要锁定记录,或者管理员在某种情况下选择手动锁定记录。

在代码开发之前,需要在系统中进行配置,设置==>工作流和批准==>流程自动设置==>在Apex中启用记录锁定和解锁

加下来看下通过Apex加锁的代码

 1 String id='0067F000003oTQu';//传入一条记录id
 2 if(!Approval.isLocked(id)){//Approval.isLocked(id) 判断记录是否加锁
 3      Approval.lockResult ur = Approval.lock(id);//给一条记录加锁
 4      if (ur.isSuccess()) {//方法执行状态
 5           System.debug('成功锁定记录,ID为:' + id);
 6      } else {
 7           for(Database.Error err : ur.getErrors()) { 
 8             System.debug('锁定失败'); 
 9             System.debug('=============失败消息:' + err.getStatusCode() + ': ' + err.getMessage());
10           }
11      }
12 }

可以看到日志显示:成功锁定记录,ID为:0067F000003oTQu

但是去到记录页面发现并没有出现加锁的那把“锁”图标

但是我们后台再次执行Approval.isLocked()方法进行判断可以看到返回值是true,也就是说系统判断这条记录应该是被锁上的状态,那么问题在哪里呢?

要处理的地方在于配置审批流,如果没有一个启用的审批流,在记录页面上是不会有加锁的标记出现的,我在系统中配置了一条无效审批流,没有任何操作,仅仅为了记录上的那把锁

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

 知道了如何加锁,同样的解锁也很简单了

 1 String id='0067F000003oTQu';
 2 if(Approval.isLocked(id)) {
 3        Approval.UnlockResult ur = Approval.unlock(Id);
 4        if (ur.isSuccess()) {
 5                System.debug('成功解锁记录,ID为:' + id);
 6         } else {
 7                 for(Database.Error err : ur.getErrors()) { 
 8                    System.debug('解锁失败'); 
 9                    System.debug('=============失败消息:' + err.getStatusCode() + ': ' + err.getMessage());
10                 }
11             }
12         }

 记录被锁定的情况下使用代码去修改,如果执行用户的权限不够则会报错,所以在有锁定的情况,先判断一手是否记录被锁定是很有必要的操作

最后,Salesforce也提供了批量锁定的方法

1 //方法名相同,返回值是一个数组
2 Approval.UnlockResult[] lrList = Approval.unlock(ListObject, true);//解锁
3 Approval.LockResult[] lrList = Approval.lock(ListObject, false);//加锁

如上,关于使用代码实现对记录的锁定与解锁操作,如有遗漏,欢迎指正,有问题欢迎留言

猜你喜欢

转载自www.cnblogs.com/luqinghua/p/9097206.html