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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.04.2011, 17:39   #1  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
QueryRun.next игнорит группировку в query
Ситуация такая: есть простая кверя, в ней на единственном источнике данных два сортировочных поля и OrderNode::GroupBy. При этом же queryRun для данной квери при прохождении выгребает ВСЕ записи, нагло игнорируя группировку.

В общем, ощущение дежавю, будто такая ситуация уже была и я где-то читал в чем причина и как обойти, но уже не помню Так что простите, если что.
__________________
Axapta has seduced me deadly!

Последний раз редактировалось HorrR; 21.04.2011 в 17:44.
Старый 21.04.2011, 17:45   #2  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,510 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Может, вы просто не указали в SelectionField, какие именно данные группировать?
__________________
С уважением,
Вячеслав
Старый 21.04.2011, 18:00   #3  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Цитата:
Сообщение от pitersky Посмотреть сообщение
Может, вы просто не указали в SelectionField, какие именно данные группировать?
Эмм, нет, не указал, а разве надо?
Всегда думал, что для группировки достаточно задать SortField. По крайней мере на кверях для лукапа этого точно достаточно.

Тем не менее, добавил и в SelectionFields - один фиг.
__________________
Axapta has seduced me deadly!
Старый 21.04.2011, 18:01   #4  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
чудес не бывает - давайте код, а критики найдутся.
Старый 21.04.2011, 18:07   #5  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Цитата:
Сообщение от Wamr Посмотреть сообщение
чудес не бывает - давайте код, а критики найдутся.
Этот метод генерит набор элементов по заданным критериям.
items - курсор источника данных (временная таблица).
X++:
void genItemSelection()
{
    int                              recordTypeAbsoluteVal;
    UtilIdElements             idElements;
    Query                         query = new Query();
    QueryBuildDatasource qbds = query.addDataSource(tablenum(UtilIdElements));
    QueryRun                   queryRun;
    ;

    delete_from items;

    qbds.addRange(fieldnum(UtilIdElements, Name)).value(ObjectNameSelection.text());
    qbds.addRange(fieldnum(UtilIdElements, ParentId)).value(queryValue(0));
    if (ObjTypeSelection.selection())
    {
         qbds.addRange(fieldnum(UtilIdElements, RecordType)).value   (ObjTypeSelection.valueStr());
    }


    qbds.addSortField(fieldnum(UtilIdElements, Name));
    qbds.addSortField(fieldnum(UtilIdElements, RecordType));
    //qbds.addSelectionField(fieldnum(UtilIdElements, Name));
    //qbds.addSelectionField(fieldnum(UtilIdElements, RecordType));

    qbds.orderMode(OrderMode::GroupBy);

    queryRun = new QueryRun(query);

    while(queryRun.next())
    {
        idElements = queryRun.get(tablenum(UtilIdElements));
        recordTypeAbsoluteVal = idElements.recordType;
        Items.ElementName = idelements.name;
        items.RecordType = recordTypeAbsoluteVal;
        items.insert();
    }
}
__________________
Axapta has seduced me deadly!
Старый 21.04.2011, 18:29   #6  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,510 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
А попробуйте перед созданием QueryRun написать info(qbds.toString()) и посмотрите в инфологе, какой запрос уходит на сервер
__________________
С уважением,
Вячеслав
Старый 21.04.2011, 18:31   #7  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Какое значение имеют ObjectNameSelection.text(), ObjTypeSelection.selection() и ObjTypeSelection.valueStr())? Там нигде пустых строк или не ограниченных диапазонов нет?

Если я вместо этих значений подставляю константы, то Ваш код четко находит конкретные элементы. Никаких ошибок.
Старый 21.04.2011, 18:45   #8  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Какое значение имеют ObjectNameSelection.text(), ObjTypeSelection.selection() и ObjTypeSelection.valueStr())? Там нигде пустых строк или не ограниченных диапазонов нет?

Если я вместо этих значений подставляю константы, то Ваш код четко находит конкретные элементы. Никаких ошибок.
Никаких пустых значений. То есть, если я выберу тип объекта: форма и маска названия Sys*, то и отберутся только Sys* формы, однако записи будут продублированы для тех, которые находятся на нескольких слоях. То есть, фильтрация правильная, но группировка игнорируется...

Ну и не думаю, что информация релевантна, но у меня 4ка.
__________________
Axapta has seduced me deadly!
Старый 21.04.2011, 18:48   #9  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Цитата:
Сообщение от pitersky Посмотреть сообщение
А попробуйте перед созданием QueryRun написать info(qbds.toString()) и посмотрите в инфологе, какой запрос уходит на сервер
Для форм с названиями, начинающимися с Sys*:

SELECT * FROM UtilIdElements GROUP BY UtilIdElements.name ASC, UtilIdElements.recordType ASC WHERE ((name LIKE N'Sys*')) AND ((parentId = 0)) AND ((recordType = 11))

Все верно. А записи дублируются...
__________________
Axapta has seduced me deadly!
Старый 21.04.2011, 19:08   #10  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Ну это ж ISAM, а не "настоящая" СУБД, там, поди, запрос по каждому слою отдельно гоняется... попробуйте тогда добавить
X++:
qbds.addSelectionField(fieldnum(UtilIdElements, utilLevel), SelectionField::Max);
За это сообщение автора поблагодарили: HorrR (1).
Старый 21.04.2011, 19:24   #11  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Ну это ж ISAM, а не "настоящая" СУБД, там, поди, запрос по каждому слою отдельно гоняется... попробуйте тогда добавить
X++:
qbds.addSelectionField(fieldnum(UtilIdElements, utilLevel), SelectionField::Max);
Хммм. Сработало! Теперь интересный момент: а почему же тогда лукапы на эту таблицу работают с группировками без проблем... Окромя того, всегда думал, что UtilIdElements - обыкновенная статическая таблица.
В любом случае спасибо!
__________________
Axapta has seduced me deadly!
Старый 21.04.2011, 19:59   #12  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от HorrR Посмотреть сообщение
В общем, ощущение дежавю, будто такая ситуация уже была и я где-то читал
Group by и временная таблица
Старый 21.04.2011, 20:17   #13  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Немного(совсем) не та проблема:
а.) запрос формируется не к временной таблице
б.) собственно запрос отрабатывает корректно, проблема возникает только тогда, когда я эту же задачу пытаюсь решить с помощью query фреймворка.

Но все-равно спасибо, интересно было почитать.
__________________
Axapta has seduced me deadly!
Старый 21.04.2011, 21:16   #14  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от HorrR Посмотреть сообщение
проблема возникает только тогда, когда я эту же задачу пытаюсь решить с помощью query фреймворка.
Ну как же... А с while select что, все "правильно" покажет?
X++:
static void groupUtilIdElements(Args _args)
{
    UtilIdElements utilIdElements
    ;
    while select utilIdElements
        group by Name, RecordType
        where utilIdElements.Name == 'zipCodeReference'
    {

        info (strFmt('%1 %2', utilIdElements.Name, utilIdElements.RecordType));
    }
}
Старый 22.04.2011, 00:09   #15  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Цитата:
Сообщение от oip Посмотреть сообщение
Ну как же... А с while select что, все "правильно" покажет?
X++:
static void groupUtilIdElements(Args _args)
{
    UtilIdElements utilIdElements
    ;
    while select utilIdElements
        group by Name, RecordType
        where utilIdElements.Name == 'zipCodeReference'
    {

        info (strFmt('%1 %2', utilIdElements.Name, utilIdElements.RecordType));
    }
}

Да! но парадокс в том, что в случае с неточным соответствием, а соответствием паттерну, проще говоря like, группировка срабатывает правильно!!!
Попробуйте выполнить
X++:
while select utilIdElements
        group by Name, RecordType where
        utilIdElements.Name like "zipCodeReferenc*"
    {

        info (strFmt('%1 %2', utilIdElements.Name, utilIdElements.RecordType));
    }
Что и сбило меня с толку, так как в изначальном варианте тест был на неточном соответствии. Кверя же не работает в обоих вариантах. В общем, загадочно Аксапта работает порой...
__________________
Axapta has seduced me deadly!
Теги
group by, query, группировка, дублирование, запрос (query), слои

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Непонятное подвисание queryRun.next() GBH DAX: Программирование 7 15.11.2010 11:16
Dynamics AX: QueryRun and Query Objects - Binding operation failed to allocate buffer space Blog bot DAX Blogs 0 03.04.2009 08:05
jinx: Zugriff auf die Query, QueryRun und DataSource in einer Form Blog bot DAX auf Deutsch 0 14.04.2008 18:05
Как же все-таки организованиы Query и QueryRun? VIS DAX: Программирование 4 03.07.2003 15:22
Query и QueryRun Maxim Gorbunov DAX: Программирование 3 18.05.2002 09:13

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

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

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