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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.03.2016, 19:06   #1  
Start is offline
Start
Участник
 
39 / 9 (1) +
Регистрация: 21.07.2015
Адрес: Москва
дисплей-метод не срабатывает
Добрый день!
Есть форма, на ней датасорс. На форме есть контролы, подвязанные к датасорсу. В таблице есть display-метод, который должен срабатывать при смене значения в некотором поле.

На форме есть грид. В гриде том есть контрол, через который меняется значение. И есть контрол, привязанный к дисплей-методу. В гриде все работает, все сменяется, дисплей метод отрабатывает.

НО (!) если контролы оформить не в грид, а отдельно - дисплей-метод не срабатывает автоматически! срабатывает только если щелкнуть в контрол с дисплей-методом.... в гриде, повторюсь, все работает...

Поиском по форуму нашлось подобное, но к сожалению мою проблему ответы не решили.
Старый 30.03.2016, 19:32   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Start Посмотреть сообщение
В таблице есть display-метод, который должен срабатывать при смене значения в некотором поле.
ошибка в этом утверждении.

display-метод срабатывает при попытке отрисовать поля записи.
display-метод не срабатывает и не вызывается ядром при смене значения.

винда очень сильно кэширует отображаемые участки экрана и не дает команду перерисовать их, если нет грида. а грид отрисовывается очень часто, слишком часто.
Старый 30.03.2016, 19:39   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Start Посмотреть сообщение
display-метод, который должен срабатывать при смене значения в некотором поле.
убедитесь что в вашей форме не вызваны методы element.lockWindowUpdate, myControl.lockWindowUpdate
эти методы позволяет запретить перерисовку формы и контрола.

делайте element.redraw или myControl.updateWindow
чтобы принудительно заставить аксапту перерисовать окно или контрол
Старый 30.03.2016, 20:21   #4  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Сообщение от mazzy Посмотреть сообщение
убедитесь что в вашей форме не вызваны методы element.lockWindowUpdate, myControl.lockWindowUpdate
эти методы позволяет запретить перерисовку формы и контрола.

делайте element.redraw или myControl.updateWindow
чтобы принудительно заставить аксапту перерисовать окно или контрол

Если уж стучать в бубен, то лучше так:
P.S.: Да, если ничего не путаю, для версии AX < 2009, "нажимать" нужно F5, для тех что по-выше "Ctrl+F5".

Последний раз редактировалось DSPIC; 30.03.2016 в 20:31.
За это сообщение автора поблагодарили: mazzy (2).
Старый 30.03.2016, 20:29   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Если уж стучать в бубен, то лучше так:
можно и так. но F5 делает запрос в базу. скорее всего, это лишнее в данном случае.
Старый 30.03.2016, 20:50   #6  
Start is offline
Start
Участник
 
39 / 9 (1) +
Регистрация: 21.07.2015
Адрес: Москва
После redraw у меня форма не прорисовывается полностью, странно работает...

myControl.updateWindow не отработал вообще.

А F5 если "нажимаю" на методе modified поля, то оно возвращает прежнее значение этого поля , сперва надо write принудительно сделать?

При том если я сворачиваю-разворачиваю даже группу с этим полем или щелкая по названию группы даже, то все перерисовывается отлично. Какую-то правильную надо перерисовку.
Старый 30.03.2016, 21:34   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Start Посмотреть сообщение
После redraw у меня форма не прорисовывается полностью, странно работает...
а какая версия аксапты и виндов? странно.

можно конечно начать обновлять датасорс при помощи table_ds.refresh() или table_ds.refreshEx()
https://msdn.microsoft.com/en-us/lib...e.refresh.aspx
эти методы вроде даже к базе не обращаются.
но они действует на все поля датасорса.

+ про обновление с данными (прикольный комментарий)
https://msdn.microsoft.com/en-us/library/hh812104.aspx
Старый 30.03.2016, 21:49   #8  
Start is offline
Start
Участник
 
39 / 9 (1) +
Регистрация: 21.07.2015
Адрес: Москва
Цитата:
Сообщение от mazzy Посмотреть сообщение
а какая версия аксапты и виндов? странно.

можно конечно начать обновлять датасорс при помощи table_ds.refresh() или table_ds.refreshEx()
https://msdn.microsoft.com/en-us/lib...e.refresh.aspx
эти методы вроде даже к базе не обращаются.
но они действует на все поля датасорса.

+ про обновление с данными (прикольный комментарий)
https://msdn.microsoft.com/en-us/library/hh812104.aspx
ax 12, винда 7
Старый 31.03.2016, 13:21   #9  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
По ссылке, приведенной DSPIC в конце той темы кеширование и вычисление display метода

X++:
MyTable_ds.cacheCalculateMethod(tablemethodstr(MyTable, methodName));
MyTable_ds.refresh();

PS:
MyTable_ds - это стандартное имя, которое формируется автоматически, путем добавления окончания "_ds" к имени указанному как DataSource формы

Например, если у Вас в DataSource в качестве имени указано InventTable, то в методах формы к этому DataSource можно обращаться через переменную InventTable_ds.
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 04.04.2016, 21:29   #10  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
674 / 512 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
можно взглянуть на сам метод?
__________________
Felix nihil admirari
Старый 05.04.2016, 21:12   #11  
Start is offline
Start
Участник
 
39 / 9 (1) +
Регистрация: 21.07.2015
Адрес: Москва
public display QTY ()
{
qty ret ;

ret = this.MaxVolume - this.MinVolume

return ret;
}

в гриде сразу отрабатывает, в отдельном поле на методе после принудительного ds_write().
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как узнать контрол вызвавший дисплейный метод? Perc DAX: Программирование 33 25.09.2014 14:30
Не срабатывает display-метод Vasiliusis DAX: Программирование 7 23.04.2014 15:03
Дисплей метод таблицы который вызывается из ГРИДА 3oppo DAX: Программирование 10 23.05.2006 06:47
Не срабатывает метод status на QueryBuildRange Pavlo AKA Panok DAX: Программирование 0 13.02.2004 17:37
Передача массива VARIANTов в Automation метод Maximin DAX: Программирование 0 09.10.2002 19:31
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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