29.08.2012, 12:36 | #1 |
Участник
|
Перехват Error в открытой транзакции
Здравствуйте! Нужно перехватить ошибки при условии открытой транзакции, что-то типа такого:
X++: ttsbegin; try { throw Exception::Error; } catch (Exception::Deadlock) info('Deadlock'); catch (Exception::Error) info('Error'); ttscommit; |
|
29.08.2012, 12:42 | #2 |
Участник
|
Исключение обрывает ВСЕ транзакции. Независимо от вложенности.
Соответственно вылет будет на внешний catch, который вне транзакции (если он есть конечно).
__________________
If it ain't broke, take it apart and find out why (с) |
|
|
За это сообщение автора поблагодарили: Cardagant (1). |
29.08.2012, 12:44 | #3 |
Участник
|
какую задачу решаете?
|
|
29.08.2012, 12:51 | #4 |
Участник
|
Спасибо большое за помощь! И почему так не попробовал?) Поставил блоки catch после ttscommit и всё верно заработало!
|
|
29.08.2012, 12:55 | #5 |
Участник
|
Запускаю процедурку в цикле в транзакции, которая включает в себя запуск вручную функционала "Завершение" из периодических операций Производства, который в свою очередь может вылетать с ошибками. Вот хотелось их на верхних уровнях верно обрабатывать, чтоб цикл не завершался, а выдавал ошибку на данной записи, если она вылетела с ошибкой и продолжал цикл дальше
|
|
29.08.2012, 13:29 | #6 |
Участник
|
это нужно хитро писать (добавить обработку перед ошибками, собирать в коллекцию те данные на которых вылетает, подавлять throw error, выходить на уровень цикла.
в конце проверять если были ошибки, то запускать транзакцию как TTSRETRY. (при этом транзакция начнется заново, а в коллекции уже будут данные на которых вылетают ошибки) при этом из коллекции пропускать в обработке те данные которые вызывали ошибку. так в ttsretry система обработает данные без ошибок. а ошибочные можно вывести в отчет. но в целом не советую. потребуются модификации там где throw error.. |
|
29.08.2012, 13:35 | #7 |
NavAx
|
Цитата:
Alexanderis.ua
Исключение обрывает ВСЕ транзакции. Независимо от вложенности. Это UpdateConflict, DuplicateKeyException. Тогда catch внутри ttsbegin сработает. Посмотрите например стандартный импорт данных - там это достаточно широко используется.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты... |
|
|
За это сообщение автора поблагодарили: Alexanderis.ua (1). |
29.08.2012, 13:48 | #8 |
Участник
|
Цитата:
Спасибо за уточнение
__________________
If it ain't broke, take it apart and find out why (с) |
|
Теги |
try/catch, транзакции |
|
|