在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中没有配置允许使用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上一篇: 再看Lock