Весь ваш контекст является атомарной транзакцией. К моменту запуска кода Apex SF уже запущен, будь то нажатие кнопки Visualforce, триггер или любая другая точка входа. Если вы столкнулись с ошибкой проверки, нулевым указателем ссылочным исключением, попыткой делить на ноль, сгенерированным исключением и т. Д. - все будет откатано.
update myList;
работает в режиме «все или ничего». Если одна из записей завершится с ошибкой в пропущенном поле правила проверки и т. Д., Вы получите исключение. Вы можете заключить его в блок try-catch, но все же - весь список просто не удалось загрузить.
Если вам нужно поведение "сохранить то, что вы можете" (u) r - прочитайте о Database.update()
версии этого вызова. Он принимает необязательный параметр, который позволяет вам сделать именно это.
Последнее, но не менее важное, если вы вставляете сложные сценарии (вставьте учетную запись, вставьте контакты, один из контактов потерпел неудачу, но у вас это было в try-catch, так что учетная запись сохранена, и что теперь вам нужно вручную удалить? Слабые ...) у вас есть Database.setSavepoint()
и Database.rollback()
звонки.
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/langCon_apex_dml_database.htm
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/langCon_apex_transaction_control.htm
https://salesforce.stackexchange.com/questions/9410/rolling-back-dml-operation-in-apex-method