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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.03.2007, 19:26   #1  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
saveUserSettings/loadUserSettings на форме
Понадобилось мне сохранять/восстанавливать кое-какие настройки, которые пользователь меняет на форме. В tutorial_SysLastValue настройки сохраняются в методе close(), а загружаются и применяются в методе run(). Непонятно, конечно, почему бы не восстанавливать настройки в методе init(), но это мелочи. Между тем у FormRun есть два метода - loadUserSettings() и saveUserSettings(), которые логично было бы использовать для загрузки и сохранения различных параметров с использованием SysLastValue.
При создании экземпляра формы, если посмотреть в отладчике, видно, что this на самом деле указывает на экземпляр SysSetupFormRun, производный от FromRun. Таким образом, класс SysSetupFormRun делает какую-то свою работу и, вызывая в нужных местах super(), выполняет, помимо прочего, соотв. методы нашей формы. SysSetupFormRun.init() вызывает init() формы, SysSetupFormRun.loadUserSetting() loadUserSetting() формы и т.д.
Метод формы loadUserSettings() вызывается из метода init() примерно в такой последовательности:
PHP код:
SysSetupFormRun.init()
    
super() == Form.init()
        
super()
            
SysSetupFormRun.loadUserSettings()
                
super() == Form.loadUserSettings() 
метод формы saveUserSettings() по идее должен вызываться из метода close(), точнее даже из SysSetupFormRun.saveUserSettings() в вызове super() - но почему-то не вызывается
PHP код:
SysSetupFormRun.task()
    
super() == FormRun.task()
        
FormRun.closeOk()
            
Form.close()
                
FormRun.close()
                    
SysSetupFormRun.saveUserSettings()
                        
super()  // тут Form.saveUserSettings() не вызывается 
С одной стороны, конечно, можно плюнуть на это и сделать так, как в tutorial_SysLastValue, но с другой - интересно, откуда растут ноги такой половинчатой работы SysSetupFormRun Кто-нить с этим сталкивался?.. Для проверки достаточно создать пустую форму, перегрузить у нее saveUserSettings() и поставить на него точку останова - у меня не срабатывает ни разу
Axapta 3.0 KR2
Старый 17.03.2007, 09:56   #2  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Причина проста. В классе sysSaveSetup в методе Pack() есть такой вызов
X++:
return setupRunForm.design().packUserSetting();
При этом в нем происходит генерация эксепшена Exception::Warning (судя по всему, просто вызов trow Exception::Warning; ).
По-этому происходит вываливание из метода SysSetupFormRun.saveUserSettings() без вызова super().
В принципе, для обхода этой проблемы достаточно просто обрабатывать эксепшен. Единственно, придется править системные классы (SysSetupFormRun или sysSaveSetup).
Почему вызывается эксепшен сказать не могу, пока не разобрался

PS Разобрался.
В общем, ошибка вызвана режимом отладки. Когда в форме стоит брейкпойнт не грузятся и не сохраняются пользовательские настройки. Но, при этом, метод design().hasUserSettings() возвращает TRUE. При вызове design().packUserSettings() происходит вызов эксепшена WARNING.
Достаточно просто убрать точки останова из формы и вставить, к примеру, в перекрытом saveUserSettings() info, чтобы убедиться, что метод вызывается нормально

PPS В четверка это проблема не воспроизводится. Там пользовательские настройки работают и с брейкпойнтами
__________________
Axapta v.3.0 sp5 kr2

Последний раз редактировалось AndyD; 17.03.2007 в 10:42.
За это сообщение автора поблагодарили: _AnK_ (1), gl00mie (4).
Теги
ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как мне обновить Grid расположенный на другой форме? Yuri Safronov DAX: Программирование 17 22.01.2013 14:18
Использование семейства InventDimCtrl_Frm_* - 2 DS InventDim на одной форме Pavlo AKA Panok DAX: База знаний и проекты 5 22.12.2008 17:15
executeQuery на Форме Arahnid DAX: Программирование 12 03.11.2007 23:25
Название полей в форме запроса PavelSR DAX: Программирование 4 11.07.2007 17:19
Добавление источника к запросу на форме Lucky13 DAX: Программирование 1 21.05.2007 17:12
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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