|
07.10.2008, 10:37 | #1 |
Участник
|
фильтры, которые не видны через Grid
Доброе утро, уважаемые посетители форума!
У меня к вам такой вопрос. Обрабатывала метод executeQuery источника данных для того, чтобы пользовательские фильтры не слетали после того, как я этот метод запускаю. Делаю это при помощи следующей строки кода: X++: if (useSaveFilter) Table1_ds.query().dataSourceName("Table1").addRange(fieldname2id(Table1.TableId, "Field1")); Недостатки решения: пользователь уже не видит этих фильтров через Grid и снять их может только после того, как поставит и удалит другой фильтр. Приучать его к такому шаманству совсем не хочется. Что делать? P. S. AX 3.0, Build #9.3, |
|
07.10.2008, 10:53 | #2 |
MCT
|
А сделать недоступным для редактирования пойдет?
X++: qbr.status(RangeStatus::Locked);
__________________
Axapta book for developer |
|
07.10.2008, 10:59 | #3 |
Участник
|
Мне совсем наоборот надо, чтобы пользователь мог убрать свои фильтры, если нужно, но чтобы, в определенных случаях, они не слетели при запуске метода executeQuery.
|
|
07.10.2008, 11:18 | #4 |
Участник
|
Цитата:
Вы пересоздаете в этом методе Query (где то внутри есть q = new Query(); ... this.query(q); ) А должны брать уже существующие query и модифицировать. что-то вроде q = this.queryrun().query(); ... this.query(q); |
|
07.10.2008, 11:27 | #5 |
Участник
|
Вы не правы, Mazzy. new Query() я не делаю. Только что вместо q = this.queryrun().query() я делаю q = this.query().
|
|
07.10.2008, 11:29 | #6 |
Участник
|
Хорошо. Но вы все равно пересоздаете query, теряя пользовательские настройки. .
|
|
07.10.2008, 10:58 | #7 |
Участник
|
или даже qbr.status(RangeStatus::hidden);
Цитата:
вместо ...dataSourceName("Table1")... лучше написать ...dataSourceTable(tablenum(Table1))... а вместо ...fieldname2id(Table1.TableId, "Field1")... лучше написать fieldnum(Table1,field1); Если вдруг переименуете таблицу или поле, то будут ошибки компиляции, а не runtime. |
|
|
За это сообщение автора поблагодарили: chanchala (1). |
07.10.2008, 11:01 | #8 |
MCTS
|
Используйте ds.research() вместо executeQuery(), тогда фильтры пользователя не сбросятся
|
|
07.10.2008, 11:19 | #9 |
Участник
|
для получения запроса с пользовательскими рейнджами вместо
Table1_ds.query().dataSourceName("Table1").addRange(fieldname2id(Table1.TableId, "Field1")) используйте this.queryRun().query().dataSourceName("Table1").addRange(fieldname2id(Table1.TableId, "Field1")) |
|
07.10.2008, 11:42 | #10 |
Участник
|
Цитата:
Спасибо за советы всем участвовавшим. |
|
07.10.2008, 11:42 | #11 |
MCT
|
Получается так, если хотите использоавать executeQuery(), то после вызова, накладывайте заново ваши фильтры, или не используйте его
__________________
Axapta book for developer |
|
07.10.2008, 11:45 | #12 |
MCT
|
зеленая кнопка ждет нажатия
__________________
Axapta book for developer |
|
07.10.2008, 11:46 | #13 |
MCTS
|
Не понимаю, зачем так коверкать метод executeQuery? Ядро Аксапты устроено так, что при вызове этого метода автоматически убирается пользовательский фильтр. Если вам нужно сохранить пользовательский фильтр при перевыборке данных необходимо использовать метод research()!!!
|
|
07.10.2008, 11:50 | #14 |
MCT
|
я много раз сталкивался, что на перегруженных формах он не отрабатывает, к сожалению
__________________
Axapta book for developer |
|
07.10.2008, 11:56 | #15 |
MCTS
|
Цитата:
Не стоит забывать, что чем меньше кода, тем стабильнее работает приложение и тем проще его сопровождать. |
|
|
За это сообщение автора поблагодарили: chanchala (1). |
07.10.2008, 12:02 | #16 |
Участник
|
А вот с этим абсолютно согласен.
|
|
07.10.2008, 12:07 | #17 |
Участник
|
А так еще лучше И впрямь без извращений!
|
|
07.10.2008, 12:15 | #18 |
MCTS
|
Цитата:
- Спасибо. - Пожалуйста. |
|
07.10.2008, 12:01 | #19 |
Участник
|
Цитата:
По-моему это так программисты его коряво используют. Если штатный ExecuteQuery не корежить, то ядро сохраняет пользовательские фильтры. |
|
07.10.2008, 12:30 | #20 |
Участник
|
ExecuteQuery() в любом случае вызывается. Только после вызова research() устанавливается внутренний флаг, по которому ExecuteQuery() во вновь создаваемый QueryRun передает Query() из предыдущего экземпляра QueryRun
А сам этот вопрос с такой завидной периодичностью возникает, что его, по-моему, надо вывесить на главной странице
__________________
Axapta v.3.0 sp5 kr2 |
|