AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search

 
 
Thread Tools Search this Thread Display Modes
Old 29.08.2012, 12:36   #1  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Join Date: 11.10.2011
Перехват Error в открытой транзакции
Здравствуйте! Нужно перехватить ошибки при условии открытой транзакции, что-то типа такого:

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

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

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

но в целом не советую. потребуются модификации там где throw error..
Old 29.08.2012, 13:35   #7  
Maximin is offline
Maximin
NavAx
NavAx Club
 
415 / 361 (13) ++++++
Join Date: 09.10.2002
Location: Москва
Quote:
Alexanderis.ua
Исключение обрывает ВСЕ транзакции. Независимо от вложенности.
Есть типы исключений, которые НЕ обрывают транзакции.
Это UpdateConflict, DuplicateKeyException. Тогда catch внутри ttsbegin сработает.
Посмотрите например стандартный импорт данных - там это достаточно широко используется.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...
This post has been rated by: Alexanderis.ua (1).
Old 29.08.2012, 13:48   #8  
Alexanderis.ua is offline
Alexanderis.ua
Участник
 
53 / 40 (2) +++
Join Date: 25.12.2008
Location: Киев, Украина
Quote:
Originally Posted by Maximin View Post
Есть типы исключений, которые НЕ обрывают транзакции.
Это UpdateConflict, DuplicateKeyException. Тогда catch внутри ttsbegin сработает.
Посмотрите например стандартный импорт данных - там это достаточно широко используется.
Да, конечно. Ответы на бегу - зло. Я имел в виду конкретный упомянутый throw Exception::Error.

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

 

Similar Threads
Thread Thread Starter Forum Replies Last Post
Остатки по номенклатуре в разрезе складов внутри транзакции 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

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 04:33.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.