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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.10.2009, 09:01   #1  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
! Баг формы в АХ связанный с колесом прокрутки мышью
Kernel AX 4.0.2501.116

Обнаружил неприятный баг в АХ:
На форме в методе modified поля вызывается метод таблицы с диалоговым окном Box:NoYes. Если на форме изменить значение этого поля и сразу прокрутить колесо мыши, то АХ зависает наглухо, пожирая при этом ресурсы одного проца (ядра). С наскока решить или обойти проблему не удалось.Перенос вызова из метода формы в метод таблицы modifiedField ничего не дает. По сути АХ уходит в бесконечное активирование/деактивирование окон Info/formNotify.

Для воспроизведения бага примера приложил проектик.
Вложения
Тип файла: xpo SharedProject_FormBag.xpo (5.1 Кб, 229 просмотров)
Старый 07.10.2009, 11:38   #2  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Сообщение от Alexius Посмотреть сообщение
Kernel AX 4.0.2501.116
...
По сути АХ уходит в бесконечное активирование/деактивирование окон Info/formNotify.
...
На самом деле, проблема в самом BOX. При таком способе вызова (из modified\validate) BOX банально не успевает отрисоваться на экране (не проверял, но может связано с его модальностью), хотя он активен и успешно опрашивает клавиатуру. Попробуйте, нажать дефолтовую клавишу бокса во время такого "повисания". Можно вместо BOX'а испольховать Dialog, тогда проблемы не возникает, хотя форма неприятно мельтешит, создавая эффект повисания.

Вообще говоря, не часто встречаются боксы на методах-событиях, так что сложно это отнести к багу, скорее всего это bad practice. Попробуйте повернуть реализацию задачи в сторону традиционных проверок validateField\Write.
Старый 07.10.2009, 13:09   #3  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
Цитата:
Сообщение от DSPIC Посмотреть сообщение
На самом деле, проблема в самом BOX. При таком способе вызова (из modified\validate) BOX банально не успевает отрисоваться на экране (не проверял, но может связано с его модальностью), хотя он активен и успешно опрашивает клавиатуру. Попробуйте, нажать дефолтовую клавишу бокса во время такого "повисания".
У меня не появляется сам бокс и АХ перестает реагировать на все "раздражители", не помогают ни Ctrl-Break, Ctrl-F4, Alt-F4, ни попытки закрыть окно мышкой (наугад).
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Можно вместо BOX'а испольховать Dialog, тогда проблемы не возникает, хотя форма неприятно мельтешит, создавая эффект повисания.
Да, диалог можно закрыть, но исходная форма зависает, хотя кажется, что кроме "мельтешения" все ОК: можно ходить по строкам, но при изменении поля окно диалога не вызывается, значения в поле не сохраняются и загрузка проца никуда не делась. В голом виде не вариант решения.
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Вообще говоря, не часто встречаются боксы на методах-событиях, так что сложно это отнести к багу, скорее всего это bad practice.
Нашел один из "Bad Practices" на слое SYS: Form/SalesQuickQuote. Там такой-же зависон.
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Попробуйте повернуть реализацию задачи в сторону традиционных проверок validateField\Write.
Пробовал и туда переносить, не помогло.

Отказаться от бокса увы нельзя, вопрос каким "огородом" обежать или чем заменить ?
Старый 07.10.2009, 13:52   #4  
e@gle is offline
e@gle
MCTS
MCBMSS
 
164 / 72 (3) ++++
Регистрация: 11.04.2005
Адрес: Минск
А Вы залочьте форму на время вызова BOX.
Например так:
X++:
public void modified()
{
    super();

    element.lock();

    Table1.box();

    element.unLock();
}
__________________
С уважением, Павел Цераниди.
На пути к совершенству нет конца. Каждое новое достижение является отправной точкой для следующего крупного шага.
За это сообщение автора поблагодарили: Alexius (1).
Старый 07.10.2009, 14:41   #5  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Сообщение от Alexius Посмотреть сообщение
...
Да, диалог можно закрыть, но исходная форма зависает, хотя кажется, что кроме "мельтешения" все ОК: можно ходить по строкам, но при изменении поля окно диалога не вызывается, значения в поле не сохраняются и загрузка проца никуда не делась.
...
Мельтешит, жрет процессор, но у меня отрабатывает корректно

Нажмите на изображение для увеличения
Название: FormBug.png
Просмотров: 490
Размер:	73.4 Кб
ID:	5221
Старый 07.10.2009, 15:08   #6  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
Цитата:
Сообщение от e@gle Посмотреть сообщение
А Вы залочьте форму на время вызова BOX.
Отлично, спасибо !!!
Старый 07.10.2009, 15:31   #7  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008


Цитата:
Сообщение от Alexius Посмотреть сообщение
... но исходная форма зависает...
...и загрузка проца никуда не делась...
Теги
ax4.0, form, баг, ядро

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Зачем 2 формы транспортировки паллет и 2 формы маршрутов комплектации? twilight DAX: Функционал 2 15.02.2008 11:24
Создание Lookup формы Maxim Gorbunov DAX: База знаний и проекты 9 26.06.2007 16:44
Баг, связанный с функциональностью договоров AlexUnik DAX: Функционал 8 18.08.2004 10:13
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38
Динамические Lookup формы. Андрей Василюк DAX: База знаний и проекты 0 07.12.2001 07:07

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

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

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