Показать сообщение отдельно
Старый 29.02.2024, 15:44   #1  
online
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,876 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Багофича qbds.cacheAddMethod() для _updateOnWrite = true
Привет всем.

Заметил особенность кеширования дисплей методов для параметра _updateOnWrite = true метода cacheAddMethod().

Обновление значений дисплей методов идет при вызове super() в табличном методе update. (А лучше бы шло после отработки update.)

Последствия :
Если есть форма, шапка - строки (например SalesTable c двумя датасорсами - SalesTable_ds и SalesLine_ds)
На шапке есть дисплей методы отображающие агрегированные суммы из строк. Меняем в шапке скидку, это влияет на сумму по строке. Но при сохранении шапки, дисплей методы шапки обновляются до того как обновятся строки (обновление строк стоит после super() в методе update шапки). - Т.е. дисплей методы показывают неактуальные, старые значения сумм по строкам. Нужно сохранить шапку повторно, и только тогда обновятся дисплей методы. Для таких ситуаций (весьма часто встречающихся)) параметр _updateOnWrite = true бесполезен. Приходится его явно ставить в false и на write датасорса вызывать для каждого дисплей метода cacheCalculateMethod

Либо скопом один раз вызывать salesTable.executeCachedDisplayMethods()

(Ax 2012 R3)
За это сообщение автора поблагодарили: gl00mie (10).