Это исключение обычно возникает, когда запускается пакет или оповещения поступают в наш экземпляр 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++;
}
}
}
}