此异常通常在批处理运行或警报过快进入Salesforce实例时发生。在插入案例时,我们会尝试在插入案例之前锁定与案例相关联的联系人和帐户,以防止发生“UNABLE_TO_LOCK_ROW”异常。
这是一个确切的例外:
'System.QueryException:记录当前不可用:您尝试编辑的记录或其相关记录之一当前正由另一个用户修改。请再试一次。'
Class.Utility.DoCaseInsertion:第98行,第1列
我对'UNABLE_TO_LOCK_ROW'异常和'记录当前不可用'异常进行了大量研究,我似乎无法找到解决此问题的好方法。
我试图完成的是一个循环尝试插入10次,但我仍然得到“记录当前不可用”的异常。有没有人对此提出建议?
以下是代码:
Public static void DoCaseInsertion(case myCase) {
try
{
insert myCase;
}
catch (System.DmlException ex)
{
boolean repeat = true;
integer cnt = 0;
while (repeat && cnt < 10)
{
try
{
repeat = false;
List<Contact> contactList = [select id from Contact where id =: myCase.ContactId for update]; // Added for related contact to overcome the 'UNABLE_TO_LOCK_ROW issues'
List<Account> accountList = [select id from Account where id =: myCase.AccountId for update]; // Added for related account to overcome the 'UNABLE_TO_LOCK_ROW issues'
insert myCase;
}
catch (System.DmlException e)
{
repeat = true;
cnt++;
}
}
}
}
答案 0 :(得分:0)
当其他用户/进程对您尝试访问的特定记录进行冲突的修改时,基本上会发生这种情况。通常,它将在后台运行任何类型的批处理并锁定您尝试访问的特定记录(在您的帐户中)时发生。要解决此问题,您需要检查“帐户/案例”后台是否有任何预定的顶点类在运行,并查看是否可以做一些优化代码以避免行为冲突的事情。