Регистрация  |  Вход

Частичное сохранение, обновление и удаление записей

Решил тут давеча воспользоваться методами insert, update, delete класса Database. Возвращают они одинаковую структуру - SaveResult или DeleteResult. Одного только я не знал (я не мог себе этого представить) метод getId() в классах SaveResult и DeleteResult возвращают null в случае ошибки.
Ну, в случае ошибки с созданием записи я еще могу понять. Но зачем зажимать Id завалившейся записи при обновлении или удаления я не опнимаю.
В чем смысл такой обработки ошибок, если я не могу пользователю сказать, какая запись по какой причине не отработала?

Как обработать частичное сохранение, обновление, удаление записей и получать Id упавших записей?

Решил тут давеча воспользоваться методами insert, update, delete класса Database. Возвращают они одинаковую структуру - SaveResult или DeleteResult. Одного только я не знал (я не мог себе этого представить) метод getId() в классах SaveResult и DeleteResult возвращают null в случае ошибки.
Ну, в случае ошибки с созданием записи я еще могу понять. Но зачем зажимать Id завалившейся записи при обновлении или удаления я не опнимаю.
В чем смысл такой обработки ошибок, если я не могу пользователю сказать, какая запись по какой причине не отработала?

Как обработать частичное сохранение, обновление, удаление записей и получать Id упавших записей?

по индексу в исходном массиве sObjects

по индексу в исходном массиве sObjects

Это если сделать

try {
insert List<Account>;
} catch (DmlException de) {
de.getDmlId(i);
}

Но в этом случае вся транзакция откатывается.

Это если сделать 
[code]
try {
  insert List<Account>;
} catch (DmlException de) {
  de.getDmlId(i);
}
[/code]
Но в этом случае вся транзакция откатывается.

List<Account> accounts = new List<Account>{a1, a2, ...};

Database.SaveResult[] srList = Database.insert(accounts, false);

Integer i = 0;
for (Database.SaveResult sr : srList) {
if (!sr.isSuccess()) {
System.debug(accounts[i]);
System.debug(sr.getErrors());
}
++i;
}

[code]List<Account> accounts = new List<Account>{a1, a2, ...};

Database.SaveResult[] srList = Database.insert(accounts, false);

Integer i = 0;
for (Database.SaveResult sr : srList) {
    if (!sr.isSuccess()) {
		System.debug(accounts[i]);
		System.debug(sr.getErrors());
    }
	++i;
}
[/code]


О! Спасибо!
А я сделал метод, в который передаю только srList и ессесно только из этой информации пытался вытащить Id.

О! Спасибо!
А я сделал метод, в который передаю только srList и ессесно только из этой информации пытался вытащить Id.