Обработка ошибки «в списке нет строк для присвоения объекту» в Salesforce Apex Development

«Список не имеет строк для присвоения объекту» — это сообщение об ошибке, которое часто встречается при разработке Salesforce Apex, когда запрос не возвращает результатов и предпринимается попытка присвоить результат одной переменной sObject. Эта ошибка возникает, когда ожидается, что запрос вернет одну запись, но записи не найдены.

Чтобы справиться с этой ошибкой, вы можете использовать несколько методов, каждый из которых имеет собственный пример кода. Давайте рассмотрим эти методы ниже:

Метод 1: использование блока try-catch

try {
    // Query
    Account acc = [SELECT Id, Name FROM Account WHERE Id = :recordId LIMIT 1];
    // Process the record
    // ...
} catch (QueryException e) {
    // Handle the exception
    // This block will be executed if no records are found
}

Метод 2. Использование проверки размера списка

// Query
List<Account> accList = [SELECT Id, Name FROM Account WHERE Id = :recordId LIMIT 1];
if (!accList.isEmpty()) {
    Account acc = accList[0];
    // Process the record
    // ...
} else {
    // Handle the case when no records are found
}

Метод 3: использование метода Database.query()

String query = 'SELECT Id, Name FROM Account WHERE Id = \'' + recordId + '\' LIMIT 1';
List<Account> accList = Database.query(query);
if (!accList.isEmpty()) {
    Account acc = accList[0];
    // Process the record
    // ...
} else {
    // Handle the case when no records are found
}

Метод 4: использование метода SObject isSet()

Account acc = new Account();
acc.Id = recordId;
if (acc.isSet('Id')) {
    // Query
    acc = [SELECT Id, Name FROM Account WHERE Id = :recordId LIMIT 1];
    // Process the record
    // ...
} else {
    // Handle the case when no records are found
}

Метод 5: использование метода Database.querySingle() (доступно только в версии API 40.0 и более поздних версиях)

String query = 'SELECT Id, Name FROM Account WHERE Id = \'' + recordId + '\' LIMIT 1';
Account acc = (Account) Database.querySingle(query);
if (acc != null) {
    // Process the record
    // ...
} else {
    // Handle the case when no records are found
}

Использование любого из этих методов должно помочь вам справиться с ошибкой «в списке нет строк для присвоения объекту» при разработке Salesforce Apex.