Salesforce中使用For Update实例 - 自动编号最佳实践

背景介绍】:做过Java开发的同学,都知道有资源锁这一概念,那Salesforce也会存在在“同一时刻”(sf为单线程)访问同一资源,导致访问失败的用例。为了解决这一点sf在soql中提供了FOR Update来处理这样问题。

理论知识】:Salesforce soql 悲观锁For Update
1. 在Apex中,您可以使用FOR UPDATE在更新时锁定sObject记录,以防止竞争条件等线程安全问题;
2. 当sObject记录被锁定时,不允许其他客户或用户通过代码或Salesforce用户界面进行更新;
3. 锁定记录的客户端可以在记录上执行逻辑并进行更新,并保证锁定的记录不会被锁定;
4. 在锁定期间由另一个客户端改变。 事务完成后,锁被释放;
5. 要在Apex中锁定一组sObject记录,在任何内联SOQL语句之后嵌入关键字FOR UPDATE。

项目实战】:
我们以项目中常用Custom Setting来解决自动编号的问题为例,来看下For Update的用法详情:
公共方法:

public with sharing class SequenceNumberDao {
    public static List getSequenceNumbersByNameWithLock(List names){
        return [SELECT Name ,Sequence__c
                FROM Sequence_Number__c
                WHERE Name in :names
                LIMIT :names.size() FOR UPDATE];
    }
}

调用方法:

List seq = SequenceNumberDao.getSequenceNumbersByNameWithLock(
    new List{CaseConstants.NORMAL_CASE, CaseConstants.CED_COMPLAINT_CASE, CaseConstants.LCD_COMPLAINT_CASE, CaseConstants.CCC_ENQUIRY_CASE, CaseConstants.YEAR, CaseConstants.YYYYMMDD});

 

你可能感兴趣的:(Sales,Cloud)