场景描述:为了卡业务流程,避免在业务的某个阶段禁止业务人员对记录有更新/删除的权限,经常会使用代码锁定记录。
以下是使用的代码片段:
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);
【备注】:有时候当使用Approval.lock()锁住记录后,Lock icon没有出现,我们可以点击Edit查看是否具体被锁定。
参考资料:https://developer.salesforce/docs/atlas.en-us.apexcode.meta/apexcode/apex_methods_system_approval.htm
场景描述:为了卡业务流程,避免在业务的某个阶段禁止业务人员对记录有更新/删除的权限,经常会使用代码锁定记录。
以下是使用的代码片段:
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);
【备注】:有时候当使用Approval.lock()锁住记录后,Lock icon没有出现,我们可以点击Edit查看是否具体被锁定。
参考资料:https://developer.salesforce/docs/atlas.en-us.apexcode.meta/apexcode/apex_methods_system_approval.htm