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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.04.2011, 13:20   #1  
Андрей К. is offline
Андрей К.
Постигающий
 
152 / 10 (1) +
Регистрация: 09.04.2007
Можно ли запретить пользовательский фильтр на форме?
поскольку все необходимые пользователю фильтры были "вынесены" на форму, нужда в кнопке с воронкой отпала (в том числе и фильтр по выделенному полю)

Точнее необходима защита от дурака , чтоб пользователь не мог фильтровать как ему захочется, кроме как используя вынесенный на форму функционал фильтрации

используется Ax 2009
спасибо
Старый 28.04.2011, 13:25   #2  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
Что сразу приходит в голову, так это запретить редактирование
X++:
actDate.status(RangeStatus::Locked);
или скрыть из показа в фильтре.
X++:
 actDate.status(RangeStatus::Hidden);
__________________
Axapta book for developer
Старый 28.04.2011, 13:25   #3  
d&m is offline
d&m
MCT
Аватар для d&m
MCP
Manzana Group
MCBMSS
 
459 / 186 (7) ++++++
Регистрация: 11.09.2007
Записей в блоге: 6
если у вас RU5 или старше посмотрите как такая задача решена на стандартной форме
Банк / Импортированная выписка.

Там и фильтры вынесены отдельно и филтр по сетке доуступен
__________________
Sometimes there is a moment as you are awakening - when you become aware of the real world around you, - but you are still dreaming. - You may think you can fly but you do better not try.
Старый 28.04.2011, 13:30   #4  
Maximin is offline
Maximin
NavAx
NavAx Club
 
412 / 346 (12) ++++++
Регистрация: 09.10.2002
Адрес: Москва
Если надо закрыть только расширенный фильтр, а фильтрацию по полям оставить, то можно попробовать закомментировать вызов super() в методе prompt() нужного datasource.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...
За это сообщение автора поблагодарили: Андрей К. (1).
Старый 28.04.2011, 13:31   #5  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Как вариант, если надо чтобы только конкретная кнопка не работала, можно перекрыть метод task:

X++:
public int task(int _taskId)
{
    int ret;

    if (_taskId != 2837 && _taskId != 2844)
        ret = super(_taskId);

    return ret;
}
Старый 28.04.2011, 13:37   #6  
Андрей К. is offline
Андрей К.
Постигающий
 
152 / 10 (1) +
Регистрация: 09.04.2007
Цитата:
Сообщение от MikeR Посмотреть сообщение
Что сразу приходит в голову, так это запретить редактирование
X++:
actDate.status(RangeStatus::Locked);
или скрыть из показа в фильтре.
X++:
 actDate.status(RangeStatus::Hidden);
нужно не скрыть(заблочить) созданные ренджи а запретить возможность добавлять новые ренджи
Цитата:
Сообщение от Maximin Посмотреть сообщение
Если надо закрыть только расширенный фильтр, а фильтрацию по полям оставить, то можно попробовать закомментировать вызов super() в методе prompt() нужного datasource.
годится! но конечно хотелось бы залочить возможность фильтровать из контекстного меню полей

Последний раз редактировалось Андрей К.; 28.04.2011 в 13:41.
Старый 28.04.2011, 13:43   #7  
Андрей К. is offline
Андрей К.
Постигающий
 
152 / 10 (1) +
Регистрация: 09.04.2007
Цитата:
Сообщение от d&m Посмотреть сообщение
если у вас RU5 или старше посмотрите как такая задача решена на стандартной форме
Банк / Импортированная выписка.

Там и фильтры вынесены отдельно и филтр по сетке доуступен
что-то найти не могу, можно полный путь начиная с главного меню ?
Старый 28.04.2011, 13:48   #8  
d&m is offline
d&m
MCT
Аватар для d&m
MCP
Manzana Group
MCBMSS
 
459 / 186 (7) ++++++
Регистрация: 11.09.2007
Записей в блоге: 6
Цитата:
Сообщение от Андрей К. Посмотреть сообщение
что-то найти не могу, можно полный путь начиная с главного меню ?
это и есть полный путь, начиная с главное меню
Цитата:
Сообщение от d&m Посмотреть сообщение
Банк / Импортированная выписка.
название формы BankClientImportedStatement_RU
она была добавлена в ru5
__________________
Sometimes there is a moment as you are awakening - when you become aware of the real world around you, - but you are still dreaming. - You may think you can fly but you do better not try.
Старый 28.04.2011, 13:57   #9  
Андрей К. is offline
Андрей К.
Постигающий
 
152 / 10 (1) +
Регистрация: 09.04.2007
Цитата:
Сообщение от d&m Посмотреть сообщение
это и есть полный путь, начиная с главное меню


название формы BankClientImportedStatement_RU
она была добавлена в ru5
эта формочка хоть и есть у нас, но расширенный фильтр в ней не обрублен. я могу лазить в нем, менять, добавлять
Старый 28.04.2011, 14:02   #10  
d&m is offline
d&m
MCT
Аватар для d&m
MCP
Manzana Group
MCBMSS
 
459 / 186 (7) ++++++
Регистрация: 11.09.2007
Записей в блоге: 6
Цитата:
Сообщение от Андрей К. Посмотреть сообщение
эта формочка хоть и есть у нас, но расширенный фильтр в ней не обрублен. я могу лазить в нем, менять, добавлять
согласен, но реализация следующая:

невозможно перекрыть те фильтры, которые заданы в "вынесенных" фильтрах.

т.е. если я задал фильтры по дате в верхней части формы в вынесенных фильтрах, я уже не смогу перекрыть этот фильтр ни фильтром по полю, ни фильтром по выделению, ни расширенным фильтром.

а вот добавить другой фильтр, в дополнение к "вынесенным" фильтрам,к примеру фильтр по контрагенту, я могу - это как раз и кажется мне правильным и удобным
__________________
Sometimes there is a moment as you are awakening - when you become aware of the real world around you, - but you are still dreaming. - You may think you can fly but you do better not try.
Старый 03.05.2011, 14:19   #11  
mayk is offline
mayk
Участник
Аватар для mayk
 
43 / 65 (3) ++++
Регистрация: 07.03.2008
Андрей К.
X++:
public void executeQuery()
{
    if(this.queryRun())
    {
        this.queryRun().query().dataSourceNo(1).clearRanges();
        //TODO: восстановление фильтров из контролов на форме
    }    
    super();
}
d&m, #6
Старый 03.05.2011, 18:00   #12  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (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   #13  
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   #14  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от mazzy Посмотреть сообщение
если пользователь изменит фильтр нормальными средствами (Ctrl+F3), то нужно корректно отобразить этот фильтр в контролах на форме (иначе будет очень досадное расхождение, которое приводит к очень досадным недоразумениям с пользователями). но программисты часто выставляют на форме не критерий (с запятыми, звездочками, восклицательными знаками и пр.), а одно контрол с одним значением. Даже если программист выставит на форму критерий, то часто не занимаются обновлением критериев из query. и т.д.
Эта задача в общем случае, по-моему, не решается: даже если на форме сделать для фильтрации контрол не для одного-единственного значения поля, а контрол на базе range, пользователи через расширенный фильтр (Ctrl-F3) ведь могут задать несколько range'ей для одного и того же поля, причем таких, которые вместить в один range на форме просто не получится из-за совокупной длины условий фильтрации. Не добавлять же из-за этого на форму новые контролы для фильтрации с той лишь целью, чтобы корректно отобразить все то, что пользователь навводил через форму расширенного фильтра? Тут все-таки нужен разумный компромисс: хочешь пользоваться расширенным фильтром - пожалуйста, но не жди, что все условия фильтрации, введенные с его помощью, будут визуально отражены в контролах-фильтрах, вынесенных на форму.
Старый 04.05.2011, 11:41   #15  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Не добавлять же из-за этого на форму новые контролы для фильтрации с той лишь целью, чтобы корректно отобразить все то, что пользователь навводил через форму расширенного фильтра?
пользователь всего-лишь должен понимать, что контролы на форме НЕ соответствуют реально действующему фильтру.

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

но ведь и этого не делается.
__________________
полезное на axForum, github, vk, coub.
Старый 04.05.2011, 11:46   #16  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Отсюда напрашивается вывод: не надо вообще делать контролы-фильтры на форме, за исключением, разве что, простейших случаев (журналы открытые/разнесенные/все) Потому что иначе получается неоправданно сложное и дорогое решение частной задачи, которая в системе уже решена в общем случае как минимум двумя способами: за счет расширенного фильтра и фильтра по grid'у.
За это сообщение автора поблагодарили: mazzy (2).
Старый 04.05.2011, 12:08   #17  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Не помню где читал такое мнение:
Цитата:
Сделай систему, в которой сможет работать даже дурак, и только дурак захочет в ней работать.
Мне кажется, что это как раз этот случай. Просто обучайте пользователей, не программируйте.
За это сообщение автора поблагодарили: S.Kuskov (1).
Теги
как правильно, фильтр, форма

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как настроить 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, время: 22:14.