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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.09.2003, 11:06   #1  
Andronov is offline
Andronov
Участник
 
108 / 10 (1) +
Регистрация: 10.11.2002
Адрес: г. Пермь
Вопрос про транзакции и исключения
Добрый день!
В документации написано:
1. Блоки транзакций могут быть вложенными
2. Исключение автоматически прерывает текущую транзакцию
Исходя из этого я написал такой код:
PHP код:
        CanPerform false;
        
ttsbegin;
        try {
            
ttsbegin;
                
select forupdate mt where mt.Name == 'ООО "Электролюкс"';
                
mt.Name 'First updated record';
                
mt.update();
                if (!
CanPerform)
                    throw 
Exception::Error;
            
ttscommit;
        }
        catch (
Exception::Error){
            
CanPerform true;
        }

        
select forupdate mt where mt.Name == 'ООО "Мирный атом"';
        
mt.Name 'Second updated record';
        
mt.update();
    
ttscommit
Писал исключительно для примера, поэтому логику прошу не обсуждать. Имел ввиду, что транзакция в try/catch откатится и управление перейдет в catch-блок, потом оставшиеся операторы нормально выполнятся и внешняя транзакция успешно завершится. Практика показала, что в базе не происходит НИКАКИХ изменений.
Может мне кто-нибудь объяснить ход выполнения программы? Почему изменения не проходят в базу? В модели MTS/Component services используется подход, очень похожий на аксаптовский, но там подобный код будет отрабатывать именно так, как я того ожидаю.
Старый 18.09.2003, 11:32   #2  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
ttsabort
Опыт показывает, что ttsabort и exception срубают транзакции всех уровней.
Почему - не знаю, почему об этом скромно умалчивается в руководстве разработчика - тоже не знаю.
Старый 18.09.2003, 11:40   #3  
Andronov is offline
Andronov
Участник
 
108 / 10 (1) +
Регистрация: 10.11.2002
Адрес: г. Пермь
Это я уже заметил.
Интересует ход выполнения программы. По идее, если после выхода из catch транзакция отменена, то select/update должны отработать вне транзакции, а если не отменена, то в рамках нее. Или как-нить сругаться, хотя бы. А на деле возникает ощущение, что после throw управление передается за последний ttscommit.
Старый 18.09.2003, 12:24   #4  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
try & ttsbegin
Для такого кода
PHP код:
    try
    {
        
ttsbegin;

        try
        {
            
ttsbegin;
            
select forupdate aa where aa.== 9;
            
aa.1;
            
aa.update();

            
info("До error");
            throw 
Exception::error;

            
info("После error");
            
ttscommit;
        }
        catch (
Exception::Error)
        {
            
info("catch 1");
        }

        
info("После catch");

        
select forupdate aa where aa.== 9;
        
aa.2;
        
aa.update();

        
ttscommit;

        
info("После ttscommit");
    }
    catch (
Exception::Error)
    {
        
info("catch 2");
    }

    
info("После всего"); 
получается следущее
До error
catch 2
После всего


Т.е. управление передается в catch, который следует за блоком try, в котором была открыта первая транзакция.
Старый 18.09.2003, 12:26   #5  
Andronov is offline
Andronov
Участник
 
108 / 10 (1) +
Регистрация: 10.11.2002
Адрес: г. Пермь
Большое спасибо!
Стало яснее.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вопрос по перегрузке лукапа поля прям на таблице HorrR DAX: Программирование 3 03.06.2008 18:02
Вопрос по Проектам PSA DAX: Функционал 35 19.01.2007 22:26
расчеты с персоналом. НДФЛ. вопрос чайника shumelka DAX: Функционал 2 25.03.2004 11:36
Вопрос к пользователю при сохранении данных в таблице Anais DAX: Программирование 1 23.03.2004 19:46
Вопрос к пользователю при сохранении данных в таблице Anais DAX: Программирование 1 19.03.2004 10:28

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

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

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