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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.01.2003, 15:17   #1  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
? Свой диалог фильтра
Кто-нибудь перекрывал диалог стандартного фильтра?

Что мне надо: по "фильтрации записей" (Ctrl+F3) вывалить собственный диалог, так как связанных таблиц много и "расширенный" фильтр ну никак не устраивает. Смотрел filter для datasource, для грида, для полей в гриде, ставил брэкпойнты - не попадаю в них никак Отдельную кнопку для фильтра лепить тоже некрасиво.

Оно в принципе реализуется или нет?
Старый 27.01.2003, 15:25   #2  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Варианты
Можно перекрыть task() на форме
Можно поставить breakpoin в init() формы sysQueryForm и уже там смотреть, что нравится
Старый 31.01.2003, 14:57   #3  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
task() перекрыл. Заработало, но теперь не перерисовываются кнопки "Фильтрация записей" и "Удалить фильтр". Кто за них отвечает, так и не понял.

раньше работало
ds = T1_ds.query().datasourceno(1);
br = ds.addRange(fieldnum(Implementations, ClientId));
br.value(queryvalue("Вася"));
T1_ds.research();

но после того как для datasource перекрыл executeQuery() как
select *
from T1
join T2 where ()
join T3 where ()
и т.д.

- кнопки перерисывываться перестали. Шаманство, одним словом
Старый 31.01.2003, 15:14   #4  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Не понятно, но здорово

За кнопочки отвечает активный DS формы. Если в его запросе [queryRun().query()] есть ограничения [ranges], то соответственно меняются кнопочки. А если не меняются, значит что-то сделали не так... и никаких чудес.
Старый 31.01.2003, 17:51   #5  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Вот такой у меня executeQuery

select *
from Implementations
where
(Implementations.ProviderID==filter.ProviderId() || filter.ProviderId()=="") &&
(Implementations.ClientID==filter.ClientId() || filter.ClientId()=="") &&
(Implementations.InfSystemID==filter.InfSystemId() || filter.InfSystemId()=="") &&
(Implementations.StageID==filter.StageId() || filter.StageId()=="")
exists join is where Implementations.InfSystemID==is.SystemID && is.SystemTypeID==filter.infSystemTypeId() || filter.infSystemTypeId()==""
exists join is2 where Implementations.InfSystemID==is2.SystemID && is2.VendorID==filter.VendorId() || filter.VendorId()==""
exists join iss where Implementations.InfSystemID==iss.InfSystemID && iss.AutomationSubjectID==filter.InfSystemSubjectId() || filter.InfSystemSubjectId()==""
exists join im where Implementations.ImplementationID==im.ImplementationID && im.ModuleID==filter.ModuleId() || filter.ModuleId()==""
exists join ias where Implementations.ImplementationID==ias.ImplementationID && ias.AutomationSubjectID==filter.ImplementationSubjectId() || filter.ImplementationSubjectId()==""
exists join ca where Implementations.ClientID==ca.FirmID && filter.ClientActivityId()==ca.ActivityId || filter.ClientActivityId()==""
exists join pa where Implementations.ProviderID==pa.FirmID && filter.ProviderActivityId()==pa.ActivityId || filter.ProviderActivityId()==""

Выходит, что никаких ranges[] как бы и нет, хотя они в where очень даже подразумеваются. Мне это нравится тем, что уходит на сервер одним запросом, одно плохо - кнопка фильтра не отрисовывается. Мне бы сюда какой-нибудь фиктивный фильтр прикрутить - и было бы щастье
Старый 31.01.2003, 18:09   #6  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Если бы удалось всё это выразить через QBE, тогда и кнопочки бы работали.
А так DS.queryRun().query() не меняется... хотя работал бы он с таким кол-вом exist join неизвестно.
Старый 31.01.2003, 18:22   #7  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
А так DS.queryRun().query() не меняется... хотя работал бы он с таким кол-вом exist join неизвестно.
Есть ощущение, что он и с двумя exists join какие-то странные результаты выдавал.

Плющит, а косить надо (с) - вот и извращаюсь
Старый 31.01.2003, 19:20   #8  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
public void executeQuery()
{
querybuilddatasource dca;
querybuildrange brca;
querybuilddatasource dpa;
querybuildrange brpa;
;

q = new query();
ds = q.addDataSource(tablenum(Implementations));

if (filter.ClientActivityId())
{
dca = ds.addDataSource(tablenum(Firm2Activities));
dca.addlink(fieldnum(Implementations, ClientId), fieldnum(Firm2Activities, FirmId));
dca.joinMode(JOINMODE::INNERJOIN);
brca = dca.addRange(fieldnum(Firm2Activities, ActivityId));
brca.value(filter.ClientActivityId());
}

if (filter.ProviderActivityId())
{
dpa = ds.addDataSource(tablenum(Firm2Activities));
dpa.addlink(fieldnum(Implementations, ProviderId), fieldnum(Firm2Activities, FirmId));
dpa.joinMode(JOINMODE::INNERJOIN);
brpa = dpa.addRange(fieldnum(Firm2Activities, ActivityId));
brpa.value(filter.ProviderActivityId());
}

this.query(q);
super();
}

Что-то я к вечеру вообще перестаю что-либо понимать. Есть два фильтра - по ClientActivityId и ProviderActivityId. Вместе они выдают БОЛЬШЕ строк, чем по отдельности, что как-то не вяжется с традиционным пониманием inner join-ов.

Сразу оговорюсь - на Firm2Activities уникальный ключ по (FirmId, ActivityId)

Не могу понять (с)
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
финансовые аналитики в диалог longson DAX: Программирование 6 02.07.2008 03:23
Установка после установки : Пропал диалог с настройкой datasource Kolt DAX: Администрирование 2 11.11.2007 11:39
Диалог на отчете, то работает, то нет Himan DAX: Программирование 6 22.02.2007 11:04
Диалог в наследнике SalesReport_Invoice_RU DreamCreator DAX: Программирование 21 28.12.2005 11:12
Диалог открытия файлов NeveB DAX: Программирование 1 08.12.2003 11:48

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

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

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