Был уверен, что хорошо понимаю порядок и логику работы try-catch.
Ан нет, вот только что неприятно удивилсё!
есть try-catch.
в трае есть один инсерт, а за ним второй инсерт с дочерними записями, которые между инсертами успевают получить родительное айди в нужное поле.
затем отрправка письма счастья
а в catchе отравляется письмо несчастья.
так вот я был уверен, что если второй инсерт не пройдет и код уйдет на кетч, то первый инсерт "само-выпилится" (все операции трая полностью "откатятся").
а вот и нет - вижу письмо об ошибке и то же время в Орге запись первого инсерта.
я прям напуган. это чтож на каждый инсерт нужно делать свой трай-кетч...
Был уверен, что хорошо понимаю порядок и логику работы try-catch. Ан нет, вот только что неприятно удивилсё! есть try-catch. в трае есть один инсерт, а за ним второй инсерт с дочерними записями, которые между инсертами успевают получить родительное айди в нужное поле. затем отрправка письма счастья а в catchе отравляется письмо несчастья. так вот я был уверен, что если второй инсерт не пройдет и код уйдет на кетч, то первый инсерт "само-выпилится" (все операции трая полностью "откатятся"). а вот и нет - вижу письмо об ошибке и то же время в Орге запись первого инсерта. я прям напуган. это чтож на каждый инсерт нужно делать свой трай-кетч...
А что тебя смущает?
[quote="Den Brown"]Был уверен, что хорошо понимаю порядок и логику работы try-catch. Ан нет, вот только что неприятно удивилсё! есть try-catch. в трае есть один инсерт, а за ним второй инсерт с дочерними записями, которые между инсертами успевают получить родительное айди в нужное поле. затем отрправка письма счастья а в catchе отравляется письмо несчастья. так вот я был уверен, что если второй инсерт не пройдет и код уйдет на кетч, то первый инсерт "само-выпилится" (все операции трая полностью "откатятся"). а вот и нет - вижу письмо об ошибке и то же время в Орге запись первого инсерта. я прям напуган. это чтож на каждый инсерт нужно делать свой трай-кетч...[/quote] А что тебя смущает?
я думал, что Трай секция работает по принципу "все или ничего", т.е. при уходе в Кетч с любой строки Трая все содержимое Трая откатывается к изначальному состоянию...
[quote="wilder"]А что тебя смущает?[/quote] я думал, что Трай секция работает по принципу "все или ничего", т.е. при уходе в Кетч с любой строки Трая все содержимое Трая откатывается к изначальному состоянию...
А чего оно будет откатываться. Откатывается глобальная транзакция если падает вся страница. Если страница выполнилась, независимо от того что у тебя произошло в try блоке, все изменения сохранятся.
Если хочешь, можешь сам создавать транзакции вручную:
перед try - Savepoint sp = Database.setSavepoint();
в catch - Database.rollback(sp);
но там есть какие-то проблемы. Помню сталкивался. Вроде нельзя что-то после Savepoint sp = Database.setSavepoint(); делать. Callouts наверное? Надо уточнять.
вот на эту тему Transaction Control
А чего оно будет откатываться. Откатывается глобальная транзакция если падает вся страница. Если страница выполнилась, независимо от того что у тебя произошло в try блоке, все изменения сохранятся. Если хочешь, можешь сам создавать транзакции вручную: перед try - Savepoint sp = Database.setSavepoint(); в catch - Database.rollback(sp); но там есть какие-то проблемы. Помню сталкивался. Вроде нельзя что-то после Savepoint sp = Database.setSavepoint(); делать. Callouts наверное? Надо уточнять. вот на эту тему [url=https://www.salesforce.com/us/developer/docs/apexcode/Content/langCon_apex_transaction_control.htm]Transaction Control[/url]