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