Apex, язык программирования, используемый в платформе Salesforce, предоставляет мощные инструменты для взаимодействия с базой данных. Одной из распространенных задач является вставка записей в базу данных с помощью оператора insert
. Однако иногда не все записи вставляются успешно, и становится крайне важно определить, какие записи оказались неудачными. В этой статье мы рассмотрим несколько методов определения того, какие записи не удалось выполнить во время операции вставки базы данных Apex.
Метод 1: использование результатов сохранения базы данных
Когда вы выполняете вставку в базу данных с помощью оператора insert
в Apex, вы можете использовать класс Database.SaveResult
для получения подробной информации об успехе или неудаче каждой записи. Класс Database.SaveResult
предоставляет методы для проверки того, была ли запись успешно вставлена или возникли ли какие-либо ошибки во время операции.
Account[] accounts = new Account[]{ new Account(Name = 'Account 1'), new Account(Name = 'Account 2') };
Database.SaveResult[] saveResults = Database.insert(accounts, false);
for (Integer i = 0; i < saveResults.size(); i++) {
if (saveResults[i].isSuccess()) {
// Record inserted successfully
} else {
// Record failed to insert
Database.Error error = saveResults[i].getErrors()[0];
System.debug('Failed record: ' + error.getStatusCode() + ' - ' + error.getMessage());
}
}
Метод 2: использование DMLException
Другой подход — перехватить DMLException
, который может быть выброшен во время операции вставки. Класс DMLException
предоставляет список ошибок базы данных, произошедших во время операции. Вы можете перебирать список, чтобы выявить неудавшиеся записи.
Account[] accounts = new Account[]{ new Account(Name = 'Account 1'), new Account(Name = 'Account 2') };
try {
Database.insert(accounts, false);
} catch (DMLException e) {
for (Integer i = 0; i < e.getNumDml(); i++) {
System.debug('Failed record: ' + accounts[i].Name + ' - ' + e.getDmlMessage(i));
}
}
Метод 3. Пользовательская обработка ошибок
Вы можете реализовать собственную логику обработки ошибок, создав собственный объект или настраиваемое поле во вставляемом объекте. Перед операцией вставки установите флаг или сообщение об ошибке для записей, которые не удалось вставить. Позже вы можете запросить записи, чтобы выявить сбои.
Account[] accounts = new Account[]{ new Account(Name = 'Account 1'), new Account(Name = 'Account 2') };
List<Account> failedAccounts = new List<Account>();
for (Account acc : accounts) {
try {
insert acc;
} catch (Exception e) {
// Record failed to insert
failedAccounts.add(acc);
}
}
for (Account failedAcc : failedAccounts) {
System.debug('Failed record: ' + failedAcc.Name);
}
При вставке в базу данных Apex важно определить, какие записи не удалось выполнить во время операции. Используя класс Database.SaveResult
, перехватывая DMLException
или реализуя собственную обработку ошибок, вы можете точно определить ошибочные записи и предпринять соответствующие действия. Понимание этих методов поможет вам эффективно устранять неполадки и отлаживать код Apex.