AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.08.2012, 12:36   #1  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Перехват Error в открытой транзакции
Здравствуйте! Нужно перехватить ошибки при условии открытой транзакции, что-то типа такого:

X++:
ttsbegin;
 try
        {
            throw Exception::Error;
        }
        catch (Exception::Deadlock)
            info('Deadlock');
        catch (Exception::Error)
            info('Error');
ttscommit;
Не перехватывает. Поискал на форуме, нашёл только перехват для Exception::Updateconflict, может кто на данный момент нашёл как это делается? Спасибо!
Старый 29.08.2012, 12:42   #2  
Alexanderis.ua is offline
Alexanderis.ua
Участник
 
53 / 40 (2) +++
Регистрация: 25.12.2008
Адрес: Киев, Украина
Исключение обрывает ВСЕ транзакции. Независимо от вложенности.
Соответственно вылет будет на внешний catch, который вне транзакции (если он есть конечно).
__________________
If it ain't broke, take it apart and find out why (с)
За это сообщение автора поблагодарили: Cardagant (1).
Старый 29.08.2012, 12:44   #3  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,738 / 404 (17) +++++++
Регистрация: 23.03.2006
какую задачу решаете?
Старый 29.08.2012, 12:51   #4  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Цитата:
Сообщение от Alexanderis.ua Посмотреть сообщение
Исключение обрывает ВСЕ транзакции. Независимо от вложенности.
Соответственно вылет будет на внешний catch, который вне транзакции (если он есть конечно).
Спасибо большое за помощь! И почему так не попробовал?) Поставил блоки catch после ttscommit и всё верно заработало!
Старый 29.08.2012, 12:55   #5  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Цитата:
Сообщение от ice Посмотреть сообщение
какую задачу решаете?
Запускаю процедурку в цикле в транзакции, которая включает в себя запуск вручную функционала "Завершение" из периодических операций Производства, который в свою очередь может вылетать с ошибками. Вот хотелось их на верхних уровнях верно обрабатывать, чтоб цикл не завершался, а выдавал ошибку на данной записи, если она вылетела с ошибкой и продолжал цикл дальше
Старый 29.08.2012, 13:29   #6  
Evgeniy2020 is offline
Evgeniy2020
Участник
 
309 / 68 (3) ++++
Регистрация: 10.04.2007
Адрес: Москва, САО, СЗАО
это нужно хитро писать (добавить обработку перед ошибками, собирать в коллекцию те данные на которых вылетает, подавлять throw error, выходить на уровень цикла.

в конце проверять если были ошибки, то запускать транзакцию как TTSRETRY.
(при этом транзакция начнется заново, а в коллекции уже будут данные на которых вылетают ошибки)

при этом из коллекции пропускать в обработке те данные которые вызывали ошибку. так в ttsretry система обработает данные без ошибок.
а ошибочные можно вывести в отчет.

но в целом не советую. потребуются модификации там где throw error..
Старый 29.08.2012, 13:35   #7  
Maximin is offline
Maximin
NavAx
NavAx Club
 
412 / 346 (12) ++++++
Регистрация: 09.10.2002
Адрес: Москва
Цитата:
Alexanderis.ua
Исключение обрывает ВСЕ транзакции. Независимо от вложенности.
Есть типы исключений, которые НЕ обрывают транзакции.
Это UpdateConflict, DuplicateKeyException. Тогда catch внутри ttsbegin сработает.
Посмотрите например стандартный импорт данных - там это достаточно широко используется.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...
За это сообщение автора поблагодарили: Alexanderis.ua (1).
Старый 29.08.2012, 13:48   #8  
Alexanderis.ua is offline
Alexanderis.ua
Участник
 
53 / 40 (2) +++
Регистрация: 25.12.2008
Адрес: Киев, Украина
Цитата:
Сообщение от Maximin Посмотреть сообщение
Есть типы исключений, которые НЕ обрывают транзакции.
Это UpdateConflict, DuplicateKeyException. Тогда catch внутри ttsbegin сработает.
Посмотрите например стандартный импорт данных - там это достаточно широко используется.
Да, конечно. Ответы на бегу - зло. Я имел в виду конкретный упомянутый throw Exception::Error.

Спасибо за уточнение
__________________
If it ain't broke, take it apart and find out why (с)
Теги
try/catch, транзакции

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Остатки по номенклатуре в разрезе складов внутри транзакции Ace of Database DAX: Программирование 21 04.06.2017 09:02
Временные таблицы и транзакции Lemming DAX: Программирование 11 13.10.2009 12:16
Откат транзакции за вчерашний день??? Возможно в SQL2000??? director DAX: Администрирование 5 16.12.2005 11:26
Axapta ComConnector и распределенные транзакции pASkuda DAX: Прочие вопросы 0 12.04.2005 19:28
Проверка на наличие открытой транзакции Pavlo AKA Panok DAX: Программирование 3 06.04.2004 13:17

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 19:48.