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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.02.2024, 11:28   #1  
kitty is offline
kitty
Участник
 
370 / 30 (2) +++
Регистрация: 24.05.2005
Lookup: Combobox и String - когда можно использовать методы контролов
D365
Нужно было сделать 2 фильтра на форме.
1) по: "All" + набору значений стандартного enum.
Сделала как видела в стандарте - забиваю значения Combobox в init формы, а потом selectionChange контрола (то есть, по сути, метод на коде форме) вызываю executeQuery. Прекрасно работает.

2) Для второго фильтра нужно было сделать кастомный query (через SysTableLookup).
Я сделала контрол combobox и переписала метод lookup контрола ... Но вот только он не вызывается(дебагила). ...Cделала контрол типа String и переписала его метод lookup(), но та же проблема, код . В итоге сделать контрола String и переписала onLookup eventHandler ...
Работает

Теперь мучают вопросы
a) Почему второй фильтр с query невозможно сделать, если контрол типа Combobox
a) Как понять, когда можно использовать методы контролов, а когда только eventHandler?

Спасибо

Последний раз редактировалось kitty; 10.02.2024 в 11:47.
Старый 10.02.2024, 19:22   #2  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Не скажу за 365, но в младших версиях ComboBox - это объект для отображения фиксированных, заранее известных списков из Base Enum (или набранных вручную в init).

Соответственно, перекрытие LookUp для них никакого смысла не имеет. Здесь просто не может быть динамического формирования списка элементов. Список элементов определен заранее и не меняется на протяжении жизни объекта. Насколько я понимаю, по той причине, что обычно это очень небольшой список из нескольких элементов. Что здесь фильтровать-то?

С другой стороны, объект String - это обычно ссылка на внешний справочник. И вот тут уместно предоставить возможность накладывать фильтр на этот внешний справочник. Т.е. можно перекрыть lookUp

Это ответ на первый вопрос про отличие ComboBox. Про eventHendler - не в курсе. Это уже специфика 365
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: Lankey (1).
Старый 12.02.2024, 13:47   #3  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Делали что-то подобное, правда для 2012-й. Но возможно сработает и для 365-й.
https://github.com/KozlovPavel677/AxTunedCombobox

Основное использование - добавить к енуму в фильтре дополнительное значение (как правило All). Но в общем случае можно резвиться как хочешь. Добавлять, убирать итп.
Старый 13.02.2024, 07:30   #4  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Для того, чтобы не загаживать AOT паскудными дублями Enum'ов с доп. значением "Все", делали в свое время класс-обертку, которому в init() формы передавались потребные контролы ComboBox и их Enum'ы. Он хранил в себе Map (int, class) для соответствия ID контрола и вложенной map(int, int) соответствия индекса элементов тек. контрола числовым значениям элемента используемого enum. Потом в modified() контрола из такого класса легко вытаскивалось, что выбрано
__________________
Мы летаем, кружимся, нагоняем ужасы ...
Старый 13.02.2024, 09:03   #5  
michel1971 is offline
michel1971
Участник
 
78 / 78 (3) ++++
Регистрация: 14.01.2011
есть стандартные классы
\Classes\SysFormEnumComboBox
\Classes\DialogEnumComboBox
прикрутить в них "Все" не составляет труда
За это сообщение автора поблагодарили: Logger (1).
Старый 13.02.2024, 18:54   #6  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,322 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Один из вариантов решения исходной задачи по добавлению значения "Все" в енум для целей фильтрации

Интерфейс правда из 2012 (просто под рукой), однако эта же идея применима и к D365FO (с поправкой на паттерны конечно - если они дают так сделать).
Название: SNAG_Program-0166.png
Просмотров: 88

Размер: 5.0 Кб
Каждый фильтр помещается в свою группу (Group), у которой FrameOptionButton = Check
Ну и в коде производится анализ - если флажок стоит на группе - значит фильтр применим. Если нет - значит неприменим. Является весьма неплохой альтернативой енумам.
Из минусов:
- Необходимо использовать как минимум 2 переменные (на группу и на сам фильтр)
- Много места "отъедает" на форме, если сравнивать с обычным полем.
- Для установки фильтра надо сделать 2 клика - на группу и уже на поле
Плюсы:
- Универсальность для любого типа критерия, в т.ч. для енумов со значащими нулевыми значениями
- Эффектная визуализация (сразу очевидно - что если поле недоступно - значит фильтр в нем не задан), причем за счет ядра
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: Logger (3).
Теги
d365

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Модуль Проекты можно ли использовать Aquarius DAX: Функционал 1 27.02.2015 18:35
Как можно использовать join Query как DataSource для формы ? AndrianG DAX: Программирование 2 10.03.2009 10:25
Методы контролов формы matew DAX: Программирование 2 06.05.2008 11:41
Создание Lookup формы Maxim Gorbunov DAX: База знаний и проекты 9 26.06.2007 16:44
Можно вывести в lookup пересечение двух query? Hidden DAX: Программирование 14 14.07.2006 10:02

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

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

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