Операции SalesForce DML на основе множеств и атомарные транзакции - PullRequest
0 голосов
/ 31 августа 2018

Я только начал читать о Salesforce APEX и его DML. Кажется, что вы можете выполнять массовые обновления, создавая список, добавляя элементы, которые должны быть обновлены, и затем вызывая вызов update myList.

Создает ли такой вызов update атомарную транзакцию, так что если по какой-либо причине обновление одного из элементов в списке не будет выполнено, откат всей операции обновления будет выполнен? Если нет, есть ли способ обернуть обновление в атомарной транзакции?

1 Ответ

0 голосов
/ 31 августа 2018

Весь ваш контекст является атомарной транзакцией. К моменту запуска кода 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...