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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.04.2012, 04:47   #1  
offenmeier is offline
offenmeier
HAI; CAN HAS STDIO?
Аватар для offenmeier
Соотечественники
 
77 / 36 (2) +++
Регистрация: 17.02.2005
Адрес: Auckland, NZ
? сохранение фильтра в портале AX2012
делаю апгрейд с 2009 на 2012. у клиента было требование сохранять состояние фильтра на датасорсе одной из страниц с гридом. открываешь например эту страницу, фильтруешь данные по какому-то критерию, работаешь с ними. возвращаешься на ту же страницу, а фильтр применяется такой же, не надо фильтровать снова. из коробки аксапта так не делает.

в 2009 мы делали так: переопределяли метод pack() датасета (не датасорса, именно датасета), и прятали туда состояние запроса:

X++:
sysLastValue.RecId = 0;
        sysLastValue.Company      = curext();
        sysLastValue.UserId       = curuserid();
        sysLastValue.RecordType   = UtilElementType::DataSet;
        sysLastValue.ElementName  = smmActivities_ds.name();
        sysLastValue.DesignName   = smmActivities_ds.name();
        sysLastValue.value = SysQuery::packRangeAndSortorder(smmActivities_ds.queryRun().query());
        //sysLastValue.value = smmActivities_ds.queryRun().query().pack();
        sysLastValue.insert();
а для того, чтобы подхватить изменения, когда в следующий раз откроют страницу, переопределили init() на датасорсе:

X++:
SysQuery::unpackRangeAndSortorder(this.query(), sysLastValue.value)
всё хорошо, работает и в 2012. но не полностью

потому что в 2009 на таблице smmActivities было поле ResponsibleEmployee, оно содержало в себе EmplId, поэтому фильтр по работнику относился напрямую к таблице smmActivities (SELECT * FROM smmActivities WHERE smmActivities.ResponsibleEmployee и т.д.).

в 2012 теперь вместо этого поля есть ResponsibleWorker, который содержит RecId работника, и фильтр по работнику теперь выглядит вот так: SELECT * FROM smmActivities OUTER JOIN FROM HcmWorker ON blablabla WHERE HcmWorker.PersonnelNumber и т.д.

проблема в том, что после отработки super() метода init() датасорса, дополнительные датасорсы ещё не привязаны к smmActivities, их просто нет, поэтому вызов unpackRangeAndSortorder не возвращает фильтр по работнику: его некуда привязать.

я решил проблему переносом кода из метода init() датасорса в метод run() датасета, это первое место, где дополнительные датасорсы привязаны, и можно восстановить состояние запроса целиком.

мне всё же кажется, что run() датасета не лучшее для этого место. что подскажете?

P.S. вот порядок вызова методов при запуске (только запуске, до начала работы с пользователем) страницы на портале (датасет и датасорс), нигде не нашёл, поэтому решил сам посмотреть:

datasource.init() - изначально пытался восстанавливать фильтры здесь
dataset.run() - перенёс сюда
datasource.executeQuery()
datasource.leaveRecord()
datasource.leave()
datasource.leaveRecord()
datasource.executeQuery()
datasource.leaveRecord()
datasource.leave()
datasource.leaveRecord()
dataset.pack() - здесь сохраняю состояние фильтра (этот метод вызывается после каждого изменения фильтра пользователем)
__________________
our sharp bitter vitriol is not that of the vulgar.
Старый 24.04.2012, 08:41   #2  
pedrozzz is offline
pedrozzz
Молодой, подающий надежды
Аватар для pedrozzz
MCBMSS
Лучший по профессии 2015
 
164 / 218 (8) ++++++
Регистрация: 18.02.2010
Адрес: Краснодар
а dataset.init() после super() разве не подходит?
Старый 26.04.2012, 01:10   #3  
offenmeier is offline
offenmeier
HAI; CAN HAS STDIO?
Аватар для offenmeier
Соотечественники
 
77 / 36 (2) +++
Регистрация: 17.02.2005
Адрес: Auckland, NZ
пробовал, почему-то не работает. уже не помню, почему. надо посмотреть.
__________________
our sharp bitter vitriol is not that of the vulgar.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
AX2012 CU2, разработка Enterprise Portal в Visual Studio 2010 - как убить кэш? offenmeier DAX: Программирование 5 23.04.2012 06:35
emeadaxsupport: AX2012 and AX2009 or AX4 side by side - AOS performance counters overwritten Blog bot DAX Blogs 0 13.03.2012 18:11
sumitax: AX2012 – One stop for all documentation released my Microsoft Blog bot DAX Blogs 0 26.09.2011 19:13
ukax: Microsoft Dynamics AX2012 - Partner Update Briefing Blog bot DAX Blogs 0 23.07.2011 20:15
mfp: Seeing is believing - AX2012 Type Hierarchies Blog bot DAX Blogs 0 02.02.2011 14:11

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 14:06.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.