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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.03.2018, 23:58   #1  
alex55 is offline
alex55
MCTS
MCBMSS
 
224 / 145 (5) +++++
Регистрация: 13.02.2007
Адрес: Москва
Самопроизвольное наложение Order By в Query по SalesTable
Приветствую!

Обнаружил что на приложении AX4 при фильтрации SalesTable в Query по кастомному полю, добавленному на USR, самопроизвольно накладывается Order By по этому полю, при этом данный факт виден только при трассировке SQL, а если выводить текст запроса через DataSource.toString(), то никакой сортировки не видно. Если фильтровать по SalesId, например, то сортировки никакой нет. В данном случае на корректность результата не влияет, но хотелось бы понять откуда ноги растут. По полю есть неуникальный индекс, включающий dataareaId, вроде больше ничего особо примечательного.

Вопросы:
1. Нормально ли такое поведение системы и с чем оно может быть связано?
2. Возможно есть еще какие-то принципиальные моменты, которые в DataSource.toString() не видны? Вроде там обычно достаточно адекватное соответствие реальному запросу отображается.

Пример:
X++:
    SalesTable               st;
    QueryRun                queryRun;
    Query                       query;
    QueryBuildDataSource    qbdsSalesTable;
    ;

    query = new Query();

    qbdsSalesTable = query.addDataSource(tablenum(SalesTable));

    qbdsSalesTable.addRange(fieldnum(SalesTable, FIELD_NAME)).value(QueryValue('ЗНАЧЕНИЕ'));

    queryRun = new QueryRun(query);

    while (queryRun.next())
    {
        info(queryrun.query().dataSourceNo(1).toString());
    }
В инфологе:
SELECT * FROM SalesTable WHERE ((FIELD_NAME = N'ЗНАЧЕНИЕ'))

Трассировка SQL:
...
FROM SALESTABLE A WHERE ((DATAAREAID=?) AND (FIELD_NAME=?)) ORDER BY A.FIELD_NAME,A.DATAAREAID

Последний раз редактировалось alex55; 23.03.2018 в 00:13.
За это сообщение автора поблагодарили: S.Kuskov (2).
Старый 23.03.2018, 01:59   #2  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
299 / 866 (29) +++++++
Регистрация: 23.10.2012
Смотрите на табличные индексы и это обычное поведение.
Старый 23.03.2018, 11:15   #3  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Мне другое интересно. Почему вы создаёте queryRun и строите цикл, когда можно просто на датасорсе метод вызвать:
X++:
info(qbdsSalesTable.toString());
__________________
// no comments
Старый 23.03.2018, 12:21   #4  
alex55 is offline
alex55
MCTS
MCBMSS
 
224 / 145 (5) +++++
Регистрация: 13.02.2007
Адрес: Москва
Цитата:
Сообщение от Товарищ ♂uatr Посмотреть сообщение
Смотрите на табличные индексы и это обычное поведение.
Спасибо. Также было бы интересно:

1. Это поведение системы где-то описано в документации?
2. Отключить эту фичу как-то возможно для конкретного Query?

Цитата:
Сообщение от dech Посмотреть сообщение
Мне другое интересно. Почему вы создаёте queryRun и строите цикл, когда можно просто на датасорсе метод вызвать:
X++:
info(qbdsSalesTable.toString());
Просто из отладки такая копипаста приехала когда упрощенный пример делал, результат эквивалентен.
Старый 23.03.2018, 12:26   #5  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
375 / 562 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
А вы не пробовали отключить св-во recordLevelSecurity?
__________________
Sergey Nefedov
За это сообщение автора поблагодарили: alex55 (3).
Старый 23.03.2018, 12:41   #6  
alex55 is offline
alex55
MCTS
MCBMSS
 
224 / 145 (5) +++++
Регистрация: 13.02.2007
Адрес: Москва
Цитата:
Сообщение от SRF Посмотреть сообщение
А вы не пробовали отключить св-во recordLevelSecurity?
Да, помогло: query.recordLevelSecurity(false);

На SalesTable у нас RLS все равно не настроен.
Теги
ax4.0, query, queryrange, queryrun

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
stoneridgesoftware: Placing a Sales Order on Hold in Dynamics AX 2012: Part 2 – Holding, Tracking, Overriding & Releasing Blog bot DAX Blogs 0 27.10.2016 13:11
emeadaxsupport: Microsoft Dynamics AX general performance analysis scripts page 5 Blog bot DAX Blogs 0 01.09.2014 14:11
dynamicsaxtraining: Vendor returns Blog bot DAX Blogs 0 11.10.2012 00:11
axStart: Cannot mix old-style sorting with new-style Group By or Order By on a query. Blog bot DAX Blogs 0 06.11.2008 12:05
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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