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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.10.2020, 22:58   #1  
Aleksey2020 is offline
Aleksey2020
Участник
 
14 / 10 (1) +
Регистрация: 25.02.2020
Try Catch в методе update на таблице
Добрый вечер. Если в коде Update таблицы возникло исключение, но оно в блоке try после super(), то изменится ли запись и выполнится код из catch?
Старый 08.10.2020, 23:18   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,427 / 1771 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Блок try catch бесполезен если он расположен внутри транзакции. Исключение не будет перехвачено таким блоком. Исключение всегда откатит все уровни транзакций до самого верхнего и будет поймано только тем блоком try catch который находится вне транзакции.
Старый 08.10.2020, 23:39   #3  
Aleksey2020 is offline
Aleksey2020
Участник
 
14 / 10 (1) +
Регистрация: 25.02.2020
Но хотя бы в catch попадет вообще, даже если в итоге откатит?
Старый 08.10.2020, 23:51   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,427 / 1771 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Нет. Пролетит мимо всех catch, если они внутри транзакции. Попадёт в ближащий подходящий catch стоящий снаружи самой верхней транзакции
За это сообщение автора поблагодарили: Sergey Petrov (1), skuull (-6), Aleksey2020 (1).
Старый 09.10.2020, 00:01   #5  
Aleksey2020 is offline
Aleksey2020
Участник
 
14 / 10 (1) +
Регистрация: 25.02.2020
А если в update, который внутри транзакции добавить транзакции следующего уровня и прописать там в другую таблицу лог , а потом произойдет ошибка, то запись в лог тоже откатиться? Задача отследить на update, который в свою очередь внутри транзакции, ошибку, не текст, а факт присутствия
Старый 09.10.2020, 06:46   #6  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,427 / 1771 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Параллельная транзакция
Старый 09.10.2020, 07:51   #7  
Aleksey2020 is offline
Aleksey2020
Участник
 
14 / 10 (1) +
Регистрация: 25.02.2020
Спасибо , то что нужно
Старый 09.10.2020, 08:37   #8  
michel1971 is offline
michel1971
Участник
 
76 / 63 (3) ++++
Регистрация: 14.01.2011
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Блок try catch бесполезен если он расположен внутри транзакции. Исключение не будет перехвачено таким блоком. Исключение всегда откатит все уровни транзакций до самого верхнего и будет поймано только тем блоком try catch который находится вне транзакции.
Всегда, да не всегда
X++:
static void TryCatchTest(Args _args)
{
    ttsBegin;
    
    try
    {
        ttsBegin;
        
        try
        {
            ttsBegin;
            
            info(strFmt("ttslevel %1", appl.ttsLevel()));
            
            throw Exception::DuplicateKeyException;

            ttsCommit;
        }
        catch 
        {
            error(strFmt("catch 2 ttslevel %1", appl.ttsLevel()));
        }
        
        ttsCommit;
        
    }
    catch
    {
        info(strFmt("catch  ttslevel %1", appl.ttsLevel()));
    }
    
    ttsCommit;
}

Последний раз редактировалось michel1971; 09.10.2020 в 08:41.
За это сообщение автора поблагодарили: S.Kuskov (2), A_BAS (1).
Старый 09.10.2020, 09:44   #9  
A_BAS is offline
A_BAS
Участник
Аватар для A_BAS
 
77 / 48 (2) +++
Регистрация: 19.04.2012
Цитата:
Всегда, да не всегда
Прикольно! Я так понимаю, это только для DuplicateKeyException работает? Любопытно, это было специально сделано или это баг/фича?
Старый 09.10.2020, 10:20   #10  
michel1971 is offline
michel1971
Участник
 
76 / 63 (3) ++++
Регистрация: 14.01.2011
Цитата:
Сообщение от A_BAS Посмотреть сообщение
Прикольно! Я так понимаю, это только для DuplicateKeyException работает? Любопытно, это было специально сделано или это баг/фича?
Для UpdateConflict так же работает. Поэтому нужно правильно обрабатывать исключение, как в \Classes\Tutorial_RunbaseBatch\run например, плюс добавить в него обработку исключения DuplicateKeyException
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axforum blogs: X++, the catch Michael Fruergaard PontoppidanNovember 24, 2016 Blog bot DAX Blogs 0 10.06.2019 17:12
dynamicsaxse: November 2018 Release – Dynamics AX2012 R3 update Blog bot DAX Blogs 0 15.11.2018 09:11
try - catch и InfoLog RVS DAX: Программирование 9 20.09.2013 01:16
ChangeCompany Try...Catch Владимир Максимов DAX: Программирование 10 12.01.2009 17:19
Глупый вопрос про try .. catch Vadik DAX: База знаний и проекты 6 12.03.2003 18:04
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 13:53.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.