AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

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

Инфы в интернете не нашел.
В общем вопрос такой - кто нибудь знает как правильно делать динамические фильтры на лист страницах?
__________________
С уважением, Dozer
Alt 23.10.2013, 19:40   #2  
Sada ist offline
Sada
Программатор
Benutzerbild von Sada
 
1.450 / 153 (8) ++++++
Registriert seit: 29.03.2005
Ort: Толи Барнаул, толи Москва
В свойствах формы - есть InteractionClass. попробуйте туда посмотреть
Alt 24.10.2013, 10:39   #3  
plumbum ist offline
plumbum
Участник
Соотечественники
 
182 / 86 (3) ++++
Registriert seit: 07.12.2007
Ort: Vienna, AT
А где главный проект указывается? Это и есть значение фильтра? И по какому полю фильтруются дочерние строки?
Или вводя номер главного проекта Вы хотите получить все его дочерние проекты?
__________________
http://www.axdevposts.blogspot.com
Пришел, уведел.... отойди, дай другому увидеть!
Alt 24.10.2013, 18:43   #4  
Dozer ist offline
Dozer
Участник
AxAssist
Соотечественники
 
107 / 24 (1) +++
Registriert seit: 16.11.2004
Ort: г. Калгари, Канада
Главный проект определяется текущей выбраной строкой в гриде, а фильтрация может производиться по ParentId полю. Но это всё легко решается если есть возможность исполнить код который будет иметь доступ к курсору грида. И вот это-то пока не получается. Точнее один способ я нашел - выполнять код на контроле, но это совсем не красиво. Должен быть способ лучше и правильней.
__________________
С уважением, Dozer
Alt 24.10.2013, 18:56   #5  
plumbum ist offline
plumbum
Участник
Соотечественники
 
182 / 86 (3) ++++
Registriert seit: 07.12.2007
Ort: Vienna, AT
Вы можете создать под главным гридом InfoPart (посмотрите SalesTableListPageOpenPreviewPart на SalesTableListPage) и показывать в нем дочерние проекты в зависимости от выбранного:
__________________
http://www.axdevposts.blogspot.com
Пришел, уведел.... отойди, дай другому увидеть!
Alt 24.10.2013, 19:04   #6  
Dozer ist offline
Dozer
Участник
AxAssist
Соотечественники
 
107 / 24 (1) +++
Registriert seit: 16.11.2004
Ort: г. Калгари, Канада
Хорошая мысль. Надо обсудить с начальством.
Спасибо.
Правда вопрос про фильтр не снимается - хочу всётаки понять как это сделать для собственного развития.
__________________
С уважением, Dozer
Alt 25.10.2013, 02:31   #7  
griefon ist offline
griefon
Участник
 
131 / 52 (2) ++++
Registriert seit: 07.12.2010
Ort: down under
Zitat:
Zitat von Dozer Beitrag anzeigen
В общем вопрос такой - кто нибудь знает как правильно делать динамические фильтры на лист страницах?
Все что вам нужно находится и модифицируется в классе 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"));
}
This post has been rated by: Dozer (1), wolfstein (2).
Alt 25.10.2013, 02:34   #8  
griefon ist offline
griefon
Участник
 
131 / 52 (2) ++++
Registriert seit: 07.12.2010
Ort: down under
Еще добавлю, что в этом же классе (в методе selectionChange или в своих методах) можно включать/выключать кнопки в зависимости от выбранной записи, примерно таким образом:
X++:
this.listPage().actionPaneControlEnabled(formControlStr(ProjProjectsListPage, SubProjectNew), false);
Alt 25.10.2013, 17:09   #9  
plumbum ist offline
plumbum
Участник
Соотечественники
 
182 / 86 (3) ++++
Registriert seit: 07.12.2007
Ort: Vienna, AT
Я вот только не понимаю одного:

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

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

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

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

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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
При возвращении на 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

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 08:49 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.