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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.04.2008, 12:38   #1  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Функция BOX::yesAllNoAllCancel
Нажатие кнопки в этом окне вызывает следующую ошибку:

---------------------------
Ошибка отслеживания операций (TTS)
---------------------------
Обнаружены непарные операции X++ TTSBEGIN/TTSCOMMIT.Причиной могут являться: (а) вызов (отсутствие) операторов TTSBEGIN или TTSCOMMIT,
(б) возврат изнутри пары TTSBEGIN/TTSCOMMIT или(в) влияние пользователя на выполнение TTSBEGIN/TTSCOMMIT.

Текущий уровень контроля TTS - "1".

---------------------------
ОК
---------------------------

если функция лежит внутри транзакции. Причем другие функции отрабатывают нормально (BOX::YesNo(), например).

Выглядит все следующим образом:
X++:
    try
    {
        ttsbegin;

        while select HRMSkillResonsible
            while select hrmSkill
                where hrmSkill.hrmSkillTypeId == HRMSkillResonsible.HRMSkillTypeId
                {
                 ...
                 switch (Box::yesAllNoAllCancel)
                 {
                 case DialogButton::No:
                            break;
                 ...
                 default:
                            throw exception::Break;
                 ...
                }
        ttscommit;
    }
    catch (exception::Break)
    {
        checkFailed("@SYS70800");
    }
    catch (exception::Error)
    {
        checkFailed("@SYS79625");
    }

В чем может быть дело?
Старый 16.04.2008, 12:44   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Внутри транзакции нельзя вызывать диалоговые окна.
То, что у вас отрабатывает в этой ситуации box::YesNo вызывает сомнения и опасения
За это сообщение автора поблагодарили: Eldar9x (1).
Старый 16.04.2008, 12:46   #3  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Внутри транзакции нельзя вызывать диалоговые окна.
Кстати, предлагаю Eldar9x, в качестве упражнения, подумать почему.
Старый 16.04.2008, 12:50   #4  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
почему, понятно - что бы надолго не блокировать базу. Но все же как это побороть?
Старый 16.04.2008, 12:52   #5  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
почему, понятно - что бы надолго не блокировать базу. Но все же как это побороть?
Не вызывать диалоги внутри транзакции
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
Старый 16.04.2008, 12:53   #6  
SolNik is offline
SolNik
Участник
 
58 / 36 (2) +++
Регистрация: 22.10.2003
Использование диалогов\форм в транзакции не есть гуд (причем не только в Аксапте) по многим причинам.
Вот основные:
1) Таблицы, участвующие в транзакции блокируются на время пока пользователь размышляет, какую бы ему кнопочку нажать.
2) Такой подход противоречит принципам ООП. Логика и интерфейс должны быть реализованы в разных слоях, иначе код становится трудносопровождаемым и тормознутым.
Старый 16.04.2008, 13:03   #7  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Понятно. Придется в два прохода со сбором статистики ответов. Всем большое спасибо.
Может быть, разработчики увидев, что сообщение вызывается внутри транзакции, решили вызвать это исключение специально... И тем не менее, для остальных функций BOX это работает, правда, там и код различный.
Старый 23.10.2013, 11:21   #8  
Murlin is offline
Murlin
Возьми свет!!!
Аватар для Murlin
Самостоятельные клиенты AX
Злыдни
 
291 / 32 (2) +++
Регистрация: 22.09.2008
Адрес: Тюмень, Рашан Федерашан
Дайте плз кто-нибудь ссылку что-то навроде Best Practice.
Кстати я проверя уровень транзакции методом application.ttslevel(), я все правильно сделал? наверное это тоже потребуется подтвердить.
__________________
Axapta 3.0 sp 5 Oracle
Диплом Интернет-Университета Информационных Технологий: Основы бухгалтерского учета
Я могу взорвать вам мозг!!!
Старый 23.10.2013, 12:55   #9  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Вот, например: Microsoft Dynamics AX 2009 Development Best Practices
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axaptapedia: Box Blog bot DAX Blogs 0 30.06.2008 16:05
Kashperuk Ivan: Dynamics AX Tutorials - Tutorial 2 - Classes\Box Blog bot DAX Blogs 0 25.04.2007 22:23
Функция "Удалить строки" Oks DAX: Функционал 1 03.07.2002 18:09
Функция RunBuf Maxim Gorbunov DAX: База знаний и проекты 0 27.11.2001 17:15
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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