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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.08.2009, 15:56   #1  
ktrn is offline
ktrn
Участник
 
29 / 10 (1) +
Регистрация: 28.01.2009
кеширование и вычисление display метода
Помогите понять и разъяснить ситуацию.
В шапке журнала есть дисплейные методы, которые вычисляются на основе некоторых полей из строк.
Эти дисплейные методы закешированы на ините источника данных. Но хочется, чтоб при изменении значений полей в строках , визуально и изменялось значение дисплейных полей, а не только при нажатии F5 или сохранении записи. Что-то refresh источника данных не помогает. В чем может быть загвоздка?
Старый 21.08.2009, 16:17   #2  
Bober is offline
Bober
Участник
 
311 / 104 (4) +++++
Регистрация: 29.05.2007
попробуйте executeQuery вместо refresh
Старый 21.08.2009, 16:25   #3  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Цитата:
Сообщение от Bober Посмотреть сообщение
попробуйте executeQuery вместо refresh
лучше research с findrecord.

p.s. В AX2009 в методе research появился дополнительный параметр _retainPosition. Так что в Ax2009 вместо связки research с findrecord можно просто использовать research(true).
За это сообщение автора поблагодарили: S.Kuskov (1).
Старый 21.08.2009, 16:36   #4  
in.dc is offline
in.dc
Участник
 
29 / 53 (2) ++++
Регистрация: 09.04.2009
? reread()
Возможно в данном случае подойдет принудительное чтение текущей записи данных шапки журнала методом reread() (DataSource.reread()) ?

Upd: вдогонку - а если так DataSource_ds.cacheCalculateMethod( tablemethodstr(DataSourceTable,methodName)); ?
__________________
Dynamics AX 4.0 SP2

Последний раз редактировалось in.dc; 21.08.2009 в 16:44. Причина: cacheCalculateMethod
Старый 21.08.2009, 16:37   #5  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Ради интереса - попробуйте вместо datasource.refresh() вызывать datasource.refreshEx(-1);
Старый 21.08.2009, 16:40   #6  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008

А ещё можно сэмулировать нажатие F5 на форме:

X++:
void clicked()
{
    super();

    #define.TaskF5(0x0B17)

    element.task(#TaskF5);
}
За это сообщение автора поблагодарили: kashperuk (1).
Старый 21.08.2009, 18:46   #7  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
375 / 562 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Цитата:
Сообщение от ktrn Посмотреть сообщение
... Что-то refresh источника данных не помогает. В чем может быть загвоздка?
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Ради интереса - попробуйте вместо datasource.refresh() вызывать datasource.refreshEx(-1);
Ни DataSource_ds.refresh(), ни dataSource.refreshEx(-1) в данном случае не помогут Вам, поскольку эти методы только перерисовывают текущую запись.

Для обновления значения кеша используйте другие методы датасорса, к примеру, те, что были предложены участником in.dc
__________________
Sergey Nefedov
Старый 21.08.2009, 19:35   #8  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Цитата:
Сообщение от in.dc Посмотреть сообщение
Возможно в данном случае подойдет принудительное чтение текущей записи данных шапки журнала методом reread() (DataSource.reread()) ?
Цитата:
Сообщение от SRF Посмотреть сообщение
Для обновления значения кеша используйте другие методы датасорса, к примеру, те, что были предложены участником in.dc
Не подойдет. Проверьте сами.
Старый 21.08.2009, 21:18   #9  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от SRF Посмотреть сообщение
Ни DataSource_ds.refresh(), ни dataSource.refreshEx(-1) в данном случае не помогут Вам, поскольку эти методы только перерисовывают текущую запись.
Обратите внимание на описание метода refreshEx на том же MSDN:
Цитата:
X++:
public void refreshEx([anytype pos])
pos - The number of the record to refresh; optional. If a value of -1 is specified, all records are refreshed.
Старый 22.08.2009, 13:09   #10  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от ktrn Посмотреть сообщение
Но хочется, чтоб при изменении значений полей в строках , визуально и изменялось значение дисплейных полей, а не только при нажатии F5 или сохранении записи. Что-то refresh источника данных не помогает. В чем может быть загвоздка?
Можно обойти с другой стороны и создать метод modified() на поле источника данных; при изменении этого поля мы будем записывать в другие поля необходимые значения, например вот так:
X++:
public void modified()
{
    super();

    MyTable.Field = AnotherTable::find(MyTable.ModifiedField).Field;
    MyTable_ds.refresh();
}
__________________
// no comments
Старый 23.08.2009, 14:32   #11  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
375 / 562 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Цитата:
Ни DataSource_ds.refresh(), ни dataSource.refreshEx(-1) в данном случае не помогут Вам, поскольку эти методы только перерисовывают текущую запись.
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Обратите внимание на описание метода refreshEx на том же MSDN:
Имелось ввиду, что refreshEx(-1) только перерисовывает значения, в том числе и текущую запись, извините, если ввел в заблуждение.
Цитата:
Сообщение от _scorp_ Посмотреть сообщение
Цитата:
Сообщение от in.dc Возможно в данном случае подойдет принудительное чтение текущей записи данных шапки журнала методом reread() (DataSource.reread()) ?
Цитата:
Сообщение от _scorp_ Посмотреть сообщение
Не подойдет. Проверьте сами.
Для начала, уточним о каком методе reread() идет речь. Я так понимаю, что речь шла о методе reread() объекта FormDataSource, поэтому данный способ (dataSource.reread()) подойдет, если нужно, готов выложить проект на DAX 4.0, если же речь идет о методе common.reread(), то такой вариант, конечно же, не подойдет.
__________________
Sergey Nefedov
Старый 04.05.2012, 12:56   #12  
alvares is offline
alvares
Участник
 
45 / 12 (1) ++
Регистрация: 27.10.2011
Так как же всетаки нужно обновлять кеш display методов?
Столкнулся с тем что проще не использовать кеширование display методов, чем возиться с обновлением грида..

А задача простая - обновлять сумму по строкам в гриде, при добавлении, удалении и измении строк..
Старый 04.05.2012, 14:05   #13  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
не пойму в чем проблема. по крайней мере для 2009 и для исходной задачи. cacheCalculateMethod уже упоминался в теме
X++:
ds.cacheCalculateMethod();
ds.refresh();
да и раньше вроде то же работало
За это сообщение автора поблагодарили: gl00mie (1), alvares (1).
Старый 04.05.2012, 15:31   #14  
alvares is offline
alvares
Участник
 
45 / 12 (1) ++
Регистрация: 27.10.2011
Слона то я и не приметил, хотя все остальное предложенное в теме попробовал
Спасибо, работает!
Теги
display метод, кэширование

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Значение display метода по его названию Андрей К. DAX: Программирование 41 25.11.2020 06:52
получить label display - метода NetBus DAX: Программирование 2 05.06.2009 19:08
Вызов display метода Ashir DAX: Программирование 4 08.12.2005 16:32
Не копирует из display-метода в буфер обмена akvi DAX: Программирование 6 08.12.2005 13:14
кэширование display метода macklakov DAX: Программирование 6 03.12.2005 14:58

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

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

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