• 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);//加锁

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

  • 相关阅读:
    《高性能MySQL》读书笔记--Schema与数据类型优化
    小程序从零开始 新手必看(2)
    小程序从零开始 新手必看(1)
    Web 前端
    摒弃 react-redux: 非侵入式状态共享实现
    Web 前端
    Web 前端
    Web 前端
    vue实现打印、批量打印
    JS脱敏带表情的字符串
  • 原文地址:https://www.cnblogs.com/luqinghua/p/9097206.html
Copyright © 2020-2023  润新知