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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.04.2012, 15:43   #1  
uskutus is offline
uskutus
Участник
 
28 / 10 (1) +
Регистрация: 04.04.2012
Фильтрация Datasource с использованием внешних таблиц
Добрый день.

Передо мной следующая задача:
Имеется форма, одна из колонок формы представлена не datafield, а datamethod.

Требуется, ввести следующую функциональность: фильтрация datasource на основе колонки, заполняемой датаметодом.
Т.е., ставим на форму элемент управления, если в нем есть значение критерия, отфильтровать по этой колонке с соответствующим значением.
***
На сколько мне известно, класс QueryBuildDataSource не имеет методов, позволяющих сортировать по датаметодам. Отсюда, я собираюсь запомнить где-то изначальный query, если критерий в элементе задан, программно соединить с таблицей, из которой берутся данные для датаметода и отфильтровать по ней. А если критерий не задан, восстановить первоначальный запрос.

Поэтому у меня 2 вопроса:

1. Как мне сохранить значение первоначального query, а не ссылку? Если я напишу Query q1 = this.query() будет ссылка.

2. Нет ли возможности использовать в качестве datasource хранимые процедуры? Корявый аксаптовский недоSQL слабоват.
Старый 26.04.2012, 15:49   #2  
pedrozzz is offline
pedrozzz
Молодой, подающий надежды
Аватар для pedrozzz
MCBMSS
Лучший по профессии 2015
 
164 / 218 (8) ++++++
Регистрация: 18.02.2010
Адрес: Краснодар
Цитата:
Сообщение от uskutus Посмотреть сообщение
1. Как мне сохранить значение первоначального query, а не ссылку? Если я напишу Query q1 = this.query() будет ссылка.
X++:
Query q1 = new Query(this.query());
За это сообщение автора поблагодарили: Player1 (1), uskutus (1).
Старый 26.04.2012, 15:57   #3  
uskutus is offline
uskutus
Участник
 
28 / 10 (1) +
Регистрация: 04.04.2012
Цитата:
Сообщение от pedrozzz Посмотреть сообщение
X++:
Query q1 = new Query(this.query());
Спс, привык пользоваться методами клонирования, не сообразил.
Старый 26.04.2012, 16:23   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от uskutus Посмотреть сообщение
я собираюсь запомнить где-то изначальный query, если критерий в элементе задан, программно соединить с таблицей, из которой берутся данные для датаметода и отфильтровать по ней. А если критерий не задан, восстановить первоначальный запрос
А почему бы на постоянно не заменить display-метод на соединение с таблицей? Для чего возвращаться к display-методу обратно?
Старый 26.04.2012, 16:25   #5  
uskutus is offline
uskutus
Участник
 
28 / 10 (1) +
Регистрация: 04.04.2012
Еще вопрос возник, я сначала подумал, что если вызвать this.query в методе datasource Table1, вернется запрос для datasource. Но потом увидел конструкцию QueryBuildDataSource qbds = this.query().dataSourceTable(tablenum(Table1));

Получается это общий для всех datasource запрос? И мне надо использовать Table1_ds.query() ? Или это одно и тоже?
Старый 26.04.2012, 16:28   #6  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от uskutus Посмотреть сообщение
Или это одно и тоже?
Если на форме запрос один одно и тоже

this.query() подчинённого источника данных также возвращает общий запрос, а не только свою часть.

Последний раз редактировалось S.Kuskov; 26.04.2012 в 16:35.
За это сообщение автора поблагодарили: uskutus (1).
Старый 26.04.2012, 16:28   #7  
uskutus is offline
uskutus
Участник
 
28 / 10 (1) +
Регистрация: 04.04.2012
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
А почему бы на постоянно не заменить display-метод на соединение с таблицей? Для чего возвращаться к display-методу обратно?
Такая мысль была, но я подумал, что если постоянно не нужна эта таблица, может быть быстрее окажется приплюсовывать запрос. Хотя теперь еще раз подумал, наверное не быстрее)

Последний раз редактировалось uskutus; 26.04.2012 в 16:31.
Старый 26.04.2012, 16:31   #8  
uskutus is offline
uskutus
Участник
 
28 / 10 (1) +
Регистрация: 04.04.2012
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Если на форме запрос один, то одно и тоже
Нет, на форме несколько datasource/
Старый 26.04.2012, 16:38   #9  
uskutus is offline
uskutus
Участник
 
28 / 10 (1) +
Регистрация: 04.04.2012
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Если на форме запрос один одно и тоже

this.query() подчинённого источника данных также возвращает общий запрос, а не только свою часть.
Тогда наверно придется отказаться от сохранения первоначального запроса. Все изменения не отследишь. И зачем так сделали?
Старый 26.04.2012, 16:43   #10  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Честно? не понимаю что именно вы собираетесь сохранять?
Если нужна фильтрация, то добавляйте новый источник данных прописывайте связи и накладывайте на него фильтр. Если фильтр не нужен то отключайте добавленный источник и всё. Зачем запоминать исходный query?
За это сообщение автора поблагодарили: Taker1796 (1).
Старый 26.04.2012, 17:03   #11  
uskutus is offline
uskutus
Участник
 
28 / 10 (1) +
Регистрация: 04.04.2012
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Честно? не понимаю что именно вы собираетесь сохранять?
Если нужна фильтрация, то добавляйте новый источник данных прописывайте связи и накладывайте на него фильтр. Если фильтр не нужен то отключайте добавленный источник и всё. Зачем запоминать исходный query?
А как отключить добавленный источник? Еще хотелось узнать, как действует фильтр. Фильтруется набор данных в оперативной памяти или выполняется новый запрос к базе данных? Если первоначально фильтр был один, затем его изменили, видимо новый запрос.

Последний раз редактировалось uskutus; 26.04.2012 в 17:05.
Старый 26.04.2012, 18:10   #12  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от uskutus Посмотреть сообщение
А как отключить добавленный источник?
Если я ничего не путаю, то DataSource.enable(false)
Цитата:
Сообщение от uskutus Посмотреть сообщение
Еще хотелось узнать, как действует фильтр. Фильтруется набор данных в оперативной памяти или выполняется новый запрос к базе данных? Если первоначально фильтр был один, затем его изменили, видимо новый запрос.
В обоих случаях новый запрос. Дело в том что вообще говоря клиент никогда не тянет на себя весь результат запроса. Оперативно он получает от сервера только ту часть, которую необходимо отобразить, остальное подгружается по мере необходимости.
Старый 04.05.2012, 09:38   #13  
uskutus is offline
uskutus
Участник
 
28 / 10 (1) +
Регистрация: 04.04.2012
Спс.

Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Если я ничего не путаю, то DataSource.enable(false)
Такого свойства не нашел. Свою проблему решил так: qbds.relations(false);
Старый 04.05.2012, 10:33   #14  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от uskutus Посмотреть сообщение
Такого свойства не нашел...
Программное удаление data source из query
Старый 04.05.2012, 12:17   #15  
uskutus is offline
uskutus
Участник
 
28 / 10 (1) +
Регистрация: 04.04.2012
Цитата:
Не знаю почему, но так пропадают все записи из грида.

С qbds.relations(false); такой проблемы нет.

Зато есть другая проблема: по неизвестной причине строка qbds.relations(false); отрабатывает только при вызове executecuery из элемента грида.
При автоматическом вызове после инициализации и проч. не отрабатывает.

Проверил с помощью info(qbds.toString());

P.S.
Разобрался. qbds.relations(false); работает только после того, как сначала вызвана qbds.relations(true); )))

Последний раз редактировалось uskutus; 04.05.2012 в 12:40.
Старый 07.05.2012, 12:25   #16  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от uskutus Посмотреть сообщение
Не знаю почему, но так пропадают все записи из грида.
Значит отключили что-то не то...
Не вздумайте отключать первый датасорс с квере

Вообще тут никто не видит ни вашей структуры квери ни что вы пытаетесь в ней отключать, поэтому и сказать что-то конкретное сложно.

Цитата:
Сообщение от uskutus Посмотреть сообщение
С qbds.relations(false); такой проблемы нет.
Вообще-то relations() это включение/выключение связей между датасорсами на основании имеющихся связей между таблицами(EDT) в АОТ.
С включением/выключением источника данных это ничего общего не имеет (не должно иметь) - датасорс всё равно остался (должен был остаться в кросс джоине). Либо вы чего-то не договариваете. Или не там смотрите...
Проверьте запросы уходящие к БД на всякий случай с помощью трассировки SQL. Возможно увидите много нового и интересного.
__________________
Zhirenkov Vitaly

Последний раз редактировалось ZVV; 07.05.2012 в 12:26. Причина: грамматика
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
AX 2012 Наследование таблиц. Краткое описание механизма sukhanchik DAX: Программирование 32 21.09.2018 17:56
Datasource временных таблиц maze DAX: Программирование 5 15.01.2010 14:30
C# and AX Development: Updating the caller Form/DataSource Blog bot DAX Blogs 0 18.07.2009 02:28
Связи таблиц в datasource отчета Пагер Маяковский DAX: Программирование 1 02.07.2005 09:43
Кто нибудь делал просмотр/редактирование внешних DBF таблиц? edd DAX: Программирование 13 06.02.2003 17:43

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

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

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