欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

在Salesforce中使用Code Lock记录或判断记录是否被锁定及异常处理

程序员文章站 2022-05-05 09:52:55
...
场景描述:为了卡业务流程,避免在业务的某个阶段禁止业务人员对记录有更新/删除的权限,经常会使用代码锁定记录。

以下是使用的代码片段:

try{
    quote.Status = 'Abandoned';
    update quote;
    // lock the record
    Approval.LockResult lockResult = Approval.lock(quoteId, false);
    if(lockResult.isSuccess()) {
        result.code = '0';
        result.msg = Label.ACC_Abandon_Quote_Success; 
    }
}catch (Exception e) {
    System.debug('update status error: ' + e.getMessage());
    result.code = '1';
    result.msg = Label.ACC_Abandon_Quote_Failed;
}
在执行该代码时,出现如下异常:System.UnexpectedException: Apex approval lock/unlock api preference not enabled.

在Salesforce中使用Code Lock记录或判断记录是否被锁定及异常处理

解决方案:

此种问题原因是因为在salesforce中没有配置允许使用apex代码对记录进行加锁,解锁。设置如下:
Setup->Build->Create->Workflow & Approvals->Process Automation Settings。将Enable record locking and unlocking in Apex这一项checkbox设置为true。
在Salesforce中使用Code Lock记录或判断记录是否被锁定及异常处理

注释:master-detail关系的记录,锁定master记录,detail记录也会随之被锁定。

补充:通常对于主详细关系的记录,如果使用自定义按钮控制详细记录的创建,那么一旦主详细记录被lock后,需要对该自定义按钮做是否锁定的校验,所以以下提供判断记录是否被锁定的方法。

Boolean isLocked = Approval.isLocked(recId);
参考资料:https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_methods_system_approval.htm

相关标签: Lock Record