System.QueryException: запись в настоящее время недоступна

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

person user3272686    schedule 03.02.2017    source источник
comment
Это не имеет никакого смысла, вы не должны этого делать. Что вы пытаетесь сделать?   -  person EricSSH    schedule 06.02.2017
comment
пытаюсь вставить запись   -  person user3272686    schedule 07.02.2017
comment
Вам нужно посмотреть, что вы делаете до этого, вы не должны ловить ошибку, а затем пытаться вставить   -  person EricSSH    schedule 07.02.2017


Ответы (1)


В основном это происходит, когда другой пользователь/процесс вносит конфликтующие изменения в конкретную запись, к которой вы пытаетесь получить доступ. В основном это происходит, когда какой-либо пакетный процесс выполняется в фоновом режиме и блокирует конкретную запись, к которой вы пытаетесь получить доступ (в вашем случае Учетная запись). Чтобы избавиться от этой проблемы, вам нужно проверить, есть ли какие-либо запланированные апекс-классы, работающие в фоновом режиме в учетных записях/делах, и посмотреть, можно ли что-нибудь сделать для оптимизации кода, чтобы избежать конфликтного поведения.

person Nikunj Sabhaya    schedule 17.12.2018