Показать сообщение отдельно
Старый 03.05.2011, 18:00   #12  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5803 (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).