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

来源:互联网 发布:交易数据和交互数据 编辑:程序博客网 时间:2024/05/16 08:58
场景描述:为了卡业务流程,避免在业务的某个阶段禁止业务人员对记录有更新/删除的权限,经常会使用代码锁定记录。

以下是使用的代码片段:

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中没有配置允许使用apex代码对记录进行加锁,解锁。设置如下:
Setup->Build->Create->Workflow & Approvals->Process Automation Settings。将Enable record locking and unlocking in Apex这一项checkbox设置为true。

注释: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