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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.11.2008, 10:34   #10  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2494 (89) +++++++++
Регистрация: 20.08.2005
Воспроизвести можно на любой форме с датасорсами и дисплейными методами.
Достаточно вызвать форму фильтров и сделать, как написал petergunn

Происходит это, на мой взгляд, из-за того, что форма не отслеживает в каком контексте выполняются вызовы.
Т.е., при открытом из формы диалоговом окне обработка событий происходит внутри метода wait(). При нажатии на ESC на форме отрабатывает стандартная последовательность закрытия формы. При этом, во внутренние флаги записывается информация, что форма готова к закрытию. Но, так как управление возвращается в метод wait(), то закрытие окна с формой и уничтожения класса формы не происходит.
Внешне это проявляется в запрете вызова дисплейных методов для датасорса (и сбросе их из кэша) - в результате чего, данные просто не отоборажаются или отображаются неверно. Есть еще одно проявление - если закрыть диалоговое окно и внести изменение в какое-либо поле не сохраняя эти изменения, то по ESC форма закроется без запроса на сохранение изменений - метод CanClose() вообще не будет вызван.

Помимо изменений в ядре - что бы оно отслеживало эту ситуация, единственное, что мне приходит в голову для исправления - это перекрыть метод CanClose() в классе SysSetupFormRun и в нем отслеживать наличие в стеке вызовов метода Wait().
X++:
public boolean canClose()
{
    boolean     ret;
    container   c;
    int         i;
    ;

    ret = super();
    c = xSession::xppCallStack();
    i = 1;
    while (i <= conLen(c))
    {
        if (typeof(conpeek(c, i)) == Types::String)
        {
            if (match(@"\\FormRun\\wait>", conpeek(c, i)))
            {
                ret = false;
                break;
            }
        }
        i++;
    }

    return ret;
}
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: ZVV (1), DocSerzh (1), Logger (2), vc (1).
Теги
blockimage, lockimage, баг, журнал

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Denis Fedotenko: Новые поля в складских проводках Blog bot DAX: База знаний и проекты 10 24.05.2007 11:57
Лукап, содержащий поля нескольких таблиц matew DAX: Программирование 4 30.11.2006 16:02
Получение из поля Map кода поля реальной таблицы, к ней привязанной (Mappings) vey DAX: Функционал 5 16.03.2005 11:16
Получить значение поля таблицы по номеру (Id) поля Anais DAX: Программирование 2 15.04.2004 13:00
Недопустимая комбинация поля/поля ссылки Berty Wooster DAX: Программирование 2 29.05.2003 16:31

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

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

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