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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.05.2011, 18:00   #1  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Андрей К. Посмотреть сообщение
поскольку все необходимые пользователю фильтры были "вынесены" на форму, нужда в кнопке с воронкой отпала (в том числе и фильтр по выделенному полю)
Это вам сами пользователи сказали, или вы за них решили? А если появится продвинутый пользователь, который хорошо знаком с расширенным фильтром, который, может, знает про такие вещи, как SysQueryRangeUtil, про возможность сохранения запросов и последующего их применения, то он будет вынужден мучиться с вашими кургузыми контролами на форме, которые дергают executeQuery() после каждого изменения, вместо того, чтобы дернуть его один раз, когда установлены все необходимые фильтры, сужающие выборку?
Цитата:
Сообщение от Андрей К. Посмотреть сообщение
Точнее необходима защита от дурака , чтоб пользователь не мог фильтровать как ему захочется, кроме как используя вынесенный на форму функционал фильтрации
По-моему, вы пытаетесь прикрыть, скажем так, кривоватую реализацию тех фильтров, которые вы вынесли в виде контролов на форму; обычно при корректной их реализации никакая "защита от дурака" не нужна. Корректная же реализация заключается в следующем:
  • фильтры применяются на executeQuery() до super(), причем как к form_ds.query(), так и к form_qr.query() (он же form_ds.queryRun().query()), если последний существует (при самом первом вызове executeQuery() до super() соотв. QueryRun еще не инициализирован);
  • при изменении значения фильтра дергается research(), а не executeQuery(), чтобы не слетали пользовательские фильтры по другим полям.
  • если значение фильтра по полю задано, то удалить все другие фильтры по этому полю и потом сделать фильтр со статусом RangeStatus::Locked, если же не задано, задать SysQuery::valueUnlimited() со статусом RangeStatus::Open, чтобы пользователь мог использовать поле в расширенном фильтре.
  • при необходимости реализовать в классе управления формой (или у вас вся логика обработки фильтров реализована прямо на форме?) интерфейс SysSaveable и сохранять значения фильтров между вызовами формы.
В общем ничего сложного, и, главное, никакой насущной необходимости отрубать возможность расширенной фильтрации.

Последний раз редактировалось gl00mie; 03.05.2011 в 19:32. Причина: пропустил одно слово
За это сообщение автора поблагодарили: mazzy (5).
Старый 04.05.2011, 07:19   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
полностью согласен.

хочу только добавить:
Цитата:
Сообщение от gl00mie Посмотреть сообщение
В общем ничего сложного, и, главное, никакой насущной необходимости отрубать возможность расширенной фильтрации.
сложности есть.
если пользователь изменит фильтр нормальными средствами (Ctrl+F3), то нужно корректно отобразить этот фильтр в контролах на форме (иначе будет очень досадное расхождение, которое приводит к очень досадным недоразумениям с пользователями).

но программисты часто выставляют на форме не критерий (с запятыми, звездочками, восклицательными знаками и пр.), а одно контрол с одним значением. Даже если программист выставит на форму критерий, то часто не занимаются обновлением критериев из query. и т.д.

кроме того, бывают стандартные формы (зачастую из локализации), которые страдают болезнью контролы-как-фильтры.

в результате и возникает задача "запретить".
хотя конечно лучше переделать так, чтобы пользователи могли использовать расширенные фильтры.
__________________
полезное на axForum, github, vk, coub.
Старый 04.05.2011, 11:37   #3  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от mazzy Посмотреть сообщение
если пользователь изменит фильтр нормальными средствами (Ctrl+F3), то нужно корректно отобразить этот фильтр в контролах на форме (иначе будет очень досадное расхождение, которое приводит к очень досадным недоразумениям с пользователями). но программисты часто выставляют на форме не критерий (с запятыми, звездочками, восклицательными знаками и пр.), а одно контрол с одним значением. Даже если программист выставит на форму критерий, то часто не занимаются обновлением критериев из query. и т.д.
Эта задача в общем случае, по-моему, не решается: даже если на форме сделать для фильтрации контрол не для одного-единственного значения поля, а контрол на базе range, пользователи через расширенный фильтр (Ctrl-F3) ведь могут задать несколько range'ей для одного и того же поля, причем таких, которые вместить в один range на форме просто не получится из-за совокупной длины условий фильтрации. Не добавлять же из-за этого на форму новые контролы для фильтрации с той лишь целью, чтобы корректно отобразить все то, что пользователь навводил через форму расширенного фильтра? Тут все-таки нужен разумный компромисс: хочешь пользоваться расширенным фильтром - пожалуйста, но не жди, что все условия фильтрации, введенные с его помощью, будут визуально отражены в контролах-фильтрах, вынесенных на форму.
Старый 04.05.2011, 11:41   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Не добавлять же из-за этого на форму новые контролы для фильтрации с той лишь целью, чтобы корректно отобразить все то, что пользователь навводил через форму расширенного фильтра?
пользователь всего-лишь должен понимать, что контролы на форме НЕ соответствуют реально действующему фильтру.

чтобы дать ему понять не обязательно делать обратный парсинг.
достаточно задисейблить контролы.

но ведь и этого не делается.
__________________
полезное на axForum, github, vk, coub.
Теги
как правильно, фильтр, форма

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как настроить DynaLink или фильтр в форме s.alex DAX: Программирование 9 31.08.2009 14:54
Можно ли в своей форме перехватить событие по изменению текущей компании HorrR DAX: Программирование 4 03.06.2009 00:50
Фильтр для сгруппированного значения в форме M.Ruslan DAX: Программирование 4 13.02.2007 13:28
Можно запретить вход пользователям в Аксапту более одного раза? Hidden DAX: Администрирование 13 30.07.2006 18:00
Что и как можно резать? George Nordic DAX: Администрирование 1 11.05.2004 18:44

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

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

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