«Список не имеет строк для присвоения объекту» — это сообщение об ошибке, которое часто встречается при разработке 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.