09.07.2003, 19:13 | #1 |
Гость
|
TTS и try..catch
почему try..catch не работает внутри ttsbegin..ttscommit ?
|
|
09.07.2003, 19:48 | #2 |
Banned
|
Потому. Стоит принять как данность. Хотя эффект чертовски неприятный.
|
|
09.07.2003, 21:11 | #3 |
Гость
|
а как в 3-й Аксапте с этим?
|
|
09.07.2003, 21:38 | #4 |
Banned
|
Цитата:
а как в 3-й Аксапте с этим?
|
|
14.02.2009, 01:28 | #5 |
MCTS
|
Небольшой уточняющий комментарий, чтобы удостовериться
правильно ли я понимаю данную ситуацию (если где не прав - прошу поправить/дополнить): 1. В DAX 4.0 перехват ошибки в try/catch подразумевает неявный вызов ttsabort (кроме перехвата исключения Exception::UpdateConflict). 2. В DAX 4.0 "откат" любой вложенной транзакции всегда означает откат всей цепочки транзакций. 3. Учитывая вышесказанное имеем текущую реализацию: при возникновении исключения оно эскалируется "не перехваченным" вплоть до обработчика исключений самой внешней транзакции. При этом все транзакции, включая вложенные, откатываются. X++: static void Test_TTS_1(Args _args) { ; try { ttsbegin; //tts level 1 //Action block level 1 //.. try { ttsbegin; //tts level 2 try { throw error("my exception"); } catch //implicit ttsabort { error("level 3 catched"); } ttscommit; info("level 3 completed"); } catch //implicit ttsabort { error("level 2 catched"); } //Action block level 2 //.. ttscommit; info("level 2 completed"); } catch //implicit ttsabort { error("level 1 catched"); } info("level 1 completed"); } Error Сообщение (01:26:29) my exception Error Сообщение (01:26:29) level 1 catched Info Сообщение (01:26:29) level 1 completed |
|
|
За это сообщение автора поблагодарили: Товарищ ♂uatr (1). |
14.02.2009, 03:16 | #6 |
Участник
|
Правильно. То есть exception будет обработан первым блоком catch после последнего (внешнего) ttscommit;
Исключением, как вы уже сказали, является UpdateConflict |
|
|
За это сообщение автора поблагодарили: alex55 (1), Товарищ ♂uatr (1). |
14.02.2009, 14:19 | #7 |
MCITP
|
Не совсем понятна только фраза:
Цитата:
перехват ошибки в try/catch подразумевает неявный вызов ttsabort
........... catch //implicit ttsabort Хотя вероятно, вы именно это и имели ввиду.. А так вообще всё верно. Дополню цитатами из Inside Microsoft Dynamics AX 4.0: Цитата:
Исключение (кроме конфликта обновления), генерируемое внутри транзакции, останавливает исполнение этого блока, после чего происходит откат всех вставок и обновлений, выполненных после первого оператора ttsBegin.
........... Исполнение кода не может продолжаться внутри области действия транзакции, поэтому среда времени выполнения игнорирует операторы try и catch внутри транзакции. Это означает, что исключение, сгенерированное внутри транзакции, может быть перехвачено только за пределами транзакции. ........... Исключение UpdateConflict - это единственное исключение, которое может быть перехвачено и внутри и снаружи действия транзакции.
__________________
Zhirenkov Vitaly |
|
|
За это сообщение автора поблагодарили: alex55 (1). |
14.02.2009, 15:52 | #8 |
MCTS
|
|
|
|
Похожие темы | ||||
Тема | Ответов | |||
ChangeCompany Try...Catch | 10 | |||
staticsax: Real world processing: TTS and exceptions | 0 | |||
catch | 3 | |||
try...catch при операциях с таблицей | 1 | |||
Глупый вопрос про try .. catch | 6 |
|