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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.10.2008, 10:37   #1  
chanchala is offline
chanchala
Участник
Аватар для chanchala
 
113 / 10 (1) +
Регистрация: 14.05.2008
Адрес: СПб
? фильтры, которые не видны через 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  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
А сделать недоступным для редактирования пойдет?
X++:
qbr.status(RangeStatus::Locked);
__________________
Axapta book for developer
Старый 07.10.2008, 10:59   #3  
chanchala is offline
chanchala
Участник
Аватар для chanchala
 
113 / 10 (1) +
Регистрация: 14.05.2008
Адрес: СПб
Мне совсем наоборот надо, чтобы пользователь мог убрать свои фильтры, если нужно, но чтобы, в определенных случаях, они не слетели при запуске метода executeQuery.
Старый 07.10.2008, 11:18   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от chanchala Посмотреть сообщение
Мне совсем наоборот надо, чтобы пользователь мог убрать свои фильтры, если нужно, но чтобы, в определенных случаях, они не слетели при запуске метода executeQuery.
вы просто неправильно юзаете executeQuery.
Вы пересоздаете в этом методе Query (где то внутри есть q = new Query(); ... this.query(q); )

А должны брать уже существующие query и модифицировать.
что-то вроде

q = this.queryrun().query();
...
this.query(q);
__________________
полезное на axForum, github, vk, coub.
Старый 07.10.2008, 11:27   #5  
chanchala is offline
chanchala
Участник
Аватар для chanchala
 
113 / 10 (1) +
Регистрация: 14.05.2008
Адрес: СПб
Цитата:
Сообщение от mazzy Посмотреть сообщение
вы просто неправильно юзаете executeQuery.
Вы пересоздаете в этом методе Query (где то внутри есть q = new Query(); ... this.query(q); )

А должны брать уже существующие query и модифицировать.
что-то вроде

q = this.queryrun().query();
...
this.query(q);
Вы не правы, Mazzy. new Query() я не делаю. Только что вместо q = this.queryrun().query() я делаю q = this.query().
Старый 07.10.2008, 11:29   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от chanchala Посмотреть сообщение
Вы не правы, Mazzy. new Query() я не делаю. Только что вместо q = this.queryrun().query() я делаю q = this.query().
Хорошо. Но вы все равно пересоздаете query, теряя пользовательские настройки. .
__________________
полезное на axForum, github, vk, coub.
Старый 07.10.2008, 10:58   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
или даже qbr.status(RangeStatus::hidden);

Цитата:
Сообщение от chanchala Посмотреть сообщение
Table1_ds.query().dataSourceName("Table1").addRange(fieldname2id(Table1.TableId, "Field1"));
Совет: никогда не используйте в коде названия объектов в качестве строковых констант.

вместо ...dataSourceName("Table1")...
лучше написать ...dataSourceTable(tablenum(Table1))...

а вместо ...fieldname2id(Table1.TableId, "Field1")...
лучше написать fieldnum(Table1,field1);

Если вдруг переименуете таблицу или поле, то будут ошибки компиляции, а не runtime.
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: chanchala (1).
Старый 07.10.2008, 11:01   #8  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
Используйте ds.research() вместо executeQuery(), тогда фильтры пользователя не сбросятся
Старый 07.10.2008, 11:19   #9  
zelibobis is offline
zelibobis
Участник
 
71 / 24 (1) +++
Регистрация: 15.10.2007
Адрес: Kiev
для получения запроса с пользовательскими рейнджами вместо
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  
chanchala is offline
chanchala
Участник
Аватар для chanchala
 
113 / 10 (1) +
Регистрация: 14.05.2008
Адрес: СПб
Цитата:
Сообщение от zelibobis Посмотреть сообщение
для получения запроса с пользовательскими рейнджами вместо
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   #11  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
Получается так, если хотите использоавать executeQuery(), то после вызова, накладывайте заново ваши фильтры, или не используйте его
__________________
Axapta book for developer
Старый 07.10.2008, 11:45   #12  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
зеленая кнопка ждет нажатия
__________________
Axapta book for developer
Старый 07.10.2008, 11:46   #13  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
Не понимаю, зачем так коверкать метод executeQuery? Ядро Аксапты устроено так, что при вызове этого метода автоматически убирается пользовательский фильтр. Если вам нужно сохранить пользовательский фильтр при перевыборке данных необходимо использовать метод research()!!!
Старый 07.10.2008, 11:50   #14  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
Цитата:
Сообщение от CDR Посмотреть сообщение
Не понимаю, зачем так коверкать метод executeQuery? Ядро Аксапты устроено так, что при вызове этого метода автоматически убирается пользовательский фильтр. Если вам нужно сохранить пользовательский фильтр при перевыборке данных необходимо использовать метод research()!!!
я много раз сталкивался, что на перегруженных формах он не отрабатывает, к сожалению
__________________
Axapta book for developer
Старый 07.10.2008, 11:56   #15  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
Цитата:
Сообщение от MikeR Посмотреть сообщение
я много раз сталкивался, что на перегруженных формах он не отрабатывает, к сожалению
research() отлично отрабатывает в подавляющем большинстве случаев. Если метод не отрабатывает, то это как раз таки дело вот таких вот "извращений" .

Не стоит забывать, что чем меньше кода, тем стабильнее работает приложение и тем проще его сопровождать.
За это сообщение автора поблагодарили: chanchala (1).
Старый 07.10.2008, 12:02   #16  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от CDR Посмотреть сообщение
Не стоит забывать, что чем меньше кода, тем стабильнее работает приложение и тем проще его сопровождать.
А вот с этим абсолютно согласен.
__________________
полезное на axForum, github, vk, coub.
Старый 07.10.2008, 12:07   #17  
chanchala is offline
chanchala
Участник
Аватар для chanchala
 
113 / 10 (1) +
Регистрация: 14.05.2008
Адрес: СПб
Цитата:
Сообщение от CDR Посмотреть сообщение
research() отлично отрабатывает в подавляющем большинстве случаев. Если метод не отрабатывает, то это как раз таки дело вот таких вот "извращений" .

Не стоит забывать, что чем меньше кода, тем стабильнее работает приложение и тем проще его сопровождать.
А так еще лучше И впрямь без извращений!
Старый 07.10.2008, 12:15   #18  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
Цитата:
Сообщение от mazzy Посмотреть сообщение
Если штатный ExecuteQuery не корежить, то ядро сохраняет пользовательские фильтры.
Зачем гадать, если можно взять и проверить . На любой форме сделать две кнопочки: одна - ds.executeQuery(), другая - ds.research(). А потом провести следственный эксперимент.

Цитата:
Сообщение от chanchala Посмотреть сообщение
А так еще лучше И впрямь без извращений!
- Спасибо.
- Пожалуйста.
Старый 07.10.2008, 12:01   #19  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от CDR Посмотреть сообщение
Не понимаю, зачем так коверкать метод executeQuery? Ядро Аксапты устроено так, что при вызове этого метода автоматически убирается пользовательский фильтр. Если вам нужно сохранить пользовательский фильтр при перевыборке данных необходимо использовать метод research()!!!
Не думаю.
По-моему это так программисты его коряво используют.

Если штатный ExecuteQuery не корежить, то ядро сохраняет пользовательские фильтры.
__________________
полезное на axForum, github, vk, coub.
Старый 07.10.2008, 12:30   #20  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
ExecuteQuery() в любом случае вызывается. Только после вызова research() устанавливается внутренний флаг, по которому ExecuteQuery() во вновь создаваемый QueryRun передает Query() из предыдущего экземпляра QueryRun

А сам этот вопрос с такой завидной периодичностью возникает, что его, по-моему, надо вывесить на главной странице
__________________
Axapta v.3.0 sp5 kr2
Теги
ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axaptapedia: Filter-by-Grid Blog bot DAX Blogs 2 30.05.2012 13:39
Dynamics AX: DAX 4.0 Filter by Grid [Update] Blog bot DAX Blogs 0 27.04.2007 17:10
Advanced programming: Grid data and view manipulations batiskaf_new DAX: Программирование 15 21.06.2006 11:44
Сохранение настроек GRID (ширина и порядок колонок) liza DAX: Программирование 1 25.07.2003 22:20

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

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

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