16.04.2008, 12:38 | #1 |
MCTS
|
Функция 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 |
Участник
|
Внутри транзакции нельзя вызывать диалоговые окна.
То, что у вас отрабатывает в этой ситуации box::YesNo вызывает сомнения и опасения |
|
|
За это сообщение автора поблагодарили: Eldar9x (1). |
16.04.2008, 12:46 | #3 |
Axapta
|
|
|
16.04.2008, 12:50 | #4 |
MCTS
|
почему, понятно - что бы надолго не блокировать базу. Но все же как это побороть?
|
|
16.04.2008, 12:52 | #5 |
Участник
|
Не вызывать диалоги внутри транзакции
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
16.04.2008, 12:53 | #6 |
Участник
|
Использование диалогов\форм в транзакции не есть гуд (причем не только в Аксапте) по многим причинам.
Вот основные: 1) Таблицы, участвующие в транзакции блокируются на время пока пользователь размышляет, какую бы ему кнопочку нажать. 2) Такой подход противоречит принципам ООП. Логика и интерфейс должны быть реализованы в разных слоях, иначе код становится трудносопровождаемым и тормознутым. |
|
16.04.2008, 13:03 | #7 |
MCTS
|
Понятно. Придется в два прохода со сбором статистики ответов. Всем большое спасибо.
Может быть, разработчики увидев, что сообщение вызывается внутри транзакции, решили вызвать это исключение специально... И тем не менее, для остальных функций BOX это работает, правда, там и код различный. |
|
23.10.2013, 11:21 | #8 |
Возьми свет!!!
|
Дайте плз кто-нибудь ссылку что-то навроде Best Practice.
Кстати я проверя уровень транзакции методом application.ttslevel(), я все правильно сделал? наверное это тоже потребуется подтвердить.
__________________
Axapta 3.0 sp 5 Oracle Я могу взорвать вам мозг!!! |
|
23.10.2013, 12:55 | #9 |
Участник
|
Вот, например: Microsoft Dynamics AX 2009 Development Best Practices
|
|
|
Похожие темы | ||||
Тема | Ответов | |||
axaptapedia: Box | 0 | |||
Kashperuk Ivan: Dynamics AX Tutorials - Tutorial 2 - Classes\Box | 0 | |||
Функция "Удалить строки" | 1 | |||
Функция RunBuf | 0 |
|