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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.10.2013, 19:16   #1  
Dozer is offline
Dozer
Участник
AxAssist
Соотечественники
 
107 / 24 (1) +++
Регистрация: 16.11.2004
Адрес: г. Калгари, Канада
Динамический фильтр на ListPage
Добрый день.
Возникла задача добавления нового фильтра на форму ProjProjectListPage в аксапте 2012. Начальство хочет дополнительный контрол, по которому будут фильтроваться только дочерние строки конкретного главного проекта. До этого я ни разу не трогал аксапту 2012 и не подозревал что тривиальная задача по добавлению фильтра решается не совсем так как я привык.
Неожиданно выяснил что добавлять методы в форму и на датасоурсы нет возможности. При исследовании уже существующих фильтров понял что это нечто новое работающее через свойства котролов FilterDataSource, FilterField и FilterExpression.
Придумано конечно здорово, и со статичными фильтрами работает вообще на ура, но в моём случае надо передать в функцию, или наложить на поле не конкретное значение а неизвестное заранее - значение надо взять из текущей строки.
Провозился вчера весь день, так ни к чему и не пришел. Вроде как можно решить брутально через код на контроле, но получается не красиво и неизвестно к чему приведёт при возможной интеграции с веб порталом.

Инфы в интернете не нашел.
В общем вопрос такой - кто нибудь знает как правильно делать динамические фильтры на лист страницах?
__________________
С уважением, Dozer
Старый 23.10.2013, 19:40   #2  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
В свойствах формы - есть InteractionClass. попробуйте туда посмотреть
Старый 24.10.2013, 10:39   #3  
plumbum is offline
plumbum
Участник
Соотечественники
 
182 / 86 (3) ++++
Регистрация: 07.12.2007
Адрес: Vienna, AT
А где главный проект указывается? Это и есть значение фильтра? И по какому полю фильтруются дочерние строки?
Или вводя номер главного проекта Вы хотите получить все его дочерние проекты?
__________________
http://www.axdevposts.blogspot.com
Пришел, уведел.... отойди, дай другому увидеть!
Старый 24.10.2013, 18:43   #4  
Dozer is offline
Dozer
Участник
AxAssist
Соотечественники
 
107 / 24 (1) +++
Регистрация: 16.11.2004
Адрес: г. Калгари, Канада
Главный проект определяется текущей выбраной строкой в гриде, а фильтрация может производиться по ParentId полю. Но это всё легко решается если есть возможность исполнить код который будет иметь доступ к курсору грида. И вот это-то пока не получается. Точнее один способ я нашел - выполнять код на контроле, но это совсем не красиво. Должен быть способ лучше и правильней.
__________________
С уважением, Dozer
Старый 24.10.2013, 18:56   #5  
plumbum is offline
plumbum
Участник
Соотечественники
 
182 / 86 (3) ++++
Регистрация: 07.12.2007
Адрес: Vienna, AT
Вы можете создать под главным гридом InfoPart (посмотрите SalesTableListPageOpenPreviewPart на SalesTableListPage) и показывать в нем дочерние проекты в зависимости от выбранного:
__________________
http://www.axdevposts.blogspot.com
Пришел, уведел.... отойди, дай другому увидеть!
Старый 24.10.2013, 19:04   #6  
Dozer is offline
Dozer
Участник
AxAssist
Соотечественники
 
107 / 24 (1) +++
Регистрация: 16.11.2004
Адрес: г. Калгари, Канада
Хорошая мысль. Надо обсудить с начальством.
Спасибо.
Правда вопрос про фильтр не снимается - хочу всётаки понять как это сделать для собственного развития.
__________________
С уважением, Dozer
Старый 25.10.2013, 02:31   #7  
griefon is offline
griefon
Участник
 
131 / 52 (2) ++++
Регистрация: 07.12.2010
Адрес: down under
Цитата:
Сообщение от Dozer Посмотреть сообщение
В общем вопрос такой - кто нибудь знает как правильно делать динамические фильтры на лист страницах?
Все что вам нужно находится и модифицируется в классе ProjProjectsListPageInteraction.

Для доступа к выбранной записи (записям) нужно перекрыть метод selectionChanged.

Вот пример, который пробегает через все выбранные записи (могут быть ошибки, так как изначально мой код был не для проектов):
X++:
public void selectionChanged()
{
    MultiSelectionHelper helper = MultiSelectionHelper::construct();
    ProjTable projTableCurrent = this.listPage().activeRecord(queryDataSourceStr(ProjProjectsListPage, ProjTable_NoFilter));
    ProjTable projTableSelected;

    super();

    helper.parmDatasource(projTableCurrent .dataSource());
    projTableSelected= helper.getFirst();

    while (projTableSelected)
    {
        //вставить логику
        projTableSelected= helper.getNext();
    }
}
Далее в методе initializeQuery правите фильтр как вам надо.

X++:
public void initializeQuery(Query _query)
{
    ProjTable projTable;

    super(_query);
       _query.dataSourceNo(1).addRange(fieldNum(ProjTable,ProjId)).value(SysQuery::value("PRJ-00001"));
}
За это сообщение автора поблагодарили: Dozer (1), wolfstein (2).
Старый 25.10.2013, 02:34   #8  
griefon is offline
griefon
Участник
 
131 / 52 (2) ++++
Регистрация: 07.12.2010
Адрес: down under
Еще добавлю, что в этом же классе (в методе selectionChange или в своих методах) можно включать/выключать кнопки в зависимости от выбранной записи, примерно таким образом:
X++:
this.listPage().actionPaneControlEnabled(formControlStr(ProjProjectsListPage, SubProjectNew), false);
Старый 25.10.2013, 17:09   #9  
plumbum is offline
plumbum
Участник
Соотечественники
 
182 / 86 (3) ++++
Регистрация: 07.12.2007
Адрес: Vienna, AT
Я вот только не понимаю одного:

Если Вы работаете с ListPage, то результатом вывода на экран является плоская таблица (пускай и сформированная из разных источников данных). Теперь, двигаясь по этой таблице Вы её же хотите и фильтровать, так? Как система должна реагировать, если Вы выбрали очередной проект: показывать в том же гриде его подпроекты? А как тогда убрать этот фильтр?

Логичнее сделать вид: главные-подчиненные.
__________________
http://www.axdevposts.blogspot.com
Пришел, уведел.... отойди, дай другому увидеть!
Старый 25.10.2013, 18:39   #10  
Dozer is offline
Dozer
Участник
AxAssist
Соотечественники
 
107 / 24 (1) +++
Регистрация: 16.11.2004
Адрес: г. Калгари, Канада
griefon - спасибо за код! По крайней мере теперь понятно куда и как копать.

plumbum - для того чтобы показывать в одном гриде идея для фильтра была "вкл/выкл" - тоесть сперва имеем список только голов, а при переключении контрола для фильтра показываем строки того проекта который был выбран.

Мне кажется что теперь у меня есть всё чтобы сделать правильно. Похоже это будет комбинированый подход. Главные-подчинённые это правильно. Но так же и фильтр на подчинённых не может быть простым и должен генерироваться через код который дал griefon.

Большое спасибо.
__________________
С уважением, Dozer
Старый 25.10.2013, 20:07   #11  
plumbum is offline
plumbum
Участник
Соотечественники
 
182 / 86 (3) ++++
Регистрация: 07.12.2007
Адрес: Vienna, AT
Цитата:
а при переключении контрола для фильтра показываем строки того проекта который был выбран.
А как Вы будете управлять фильтром (включением и отклюением)?
Для этого на контрол фильтра надо будет перевести в режим Client и перекрыть метод modified, тоесть теряется возможность этот фильтр применять при интеграции с EnterprisePortal, а этого Вы хотели избежать.
__________________
http://www.axdevposts.blogspot.com
Пришел, уведел.... отойди, дай другому увидеть!
Старый 25.10.2013, 20:18   #12  
Dozer is offline
Dozer
Участник
AxAssist
Соотечественники
 
107 / 24 (1) +++
Регистрация: 16.11.2004
Адрес: г. Калгари, Канада
Именно!
Поэтому я рассматривал способ вызова кода фильтра через FilterExpression свойство контрола фильтра. Но к сожалению похоже что там можно передать в код только одно значение - текущее состояние самого контрола, и при этом код находится во внешнем специальном классе. Тоесть в коде не будет известно какая строка в гриде выбрана.
__________________
С уважением, Dozer
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
При возвращении на ListPage сбивается сортировка developerplus DAX: Программирование 2 31.03.2013 10:14
Как программно снять "фильтр по выделению" GR-VI DAX: Программирование 7 11.08.2010 10:11
ERP-BLOG: Axapta, фильтр по сетке Blog bot DAX Blogs 26 05.02.2009 15:56
Исполнить сформированный фильтр radya DAX: Программирование 14 26.07.2007 20:47
фильтр по связанной таблице mick_777 DAX: Программирование 13 21.08.2002 16:00

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

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

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