Показать сообщение отдельно
Старый 21.11.2009, 13:29   #19  
in.dc is offline
in.dc
Участник
 
29 / 53 (2) ++++
Регистрация: 09.04.2009
Cool recordLevelSecurity
Цитата:
Сообщение от ZVV Посмотреть сообщение
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Ага. Это поля индекса. Причём даже если индекс не PrimaryIndex и не ClusterIndex в Query всё равно добаляется сортировка по нему. Явный .sortClear() тоже не убирает order by из запроса.

Может есть какя-нибудь настройка AOS, которую можно выключить? Конечно очень странное решение - по умолчанию навязывать сортировку во всех Query.
Не то слово - "странное"... И оно во всех формах присутствует.
И убрать это вроде как нельзя никак - по крайней мере так мне сказал представитель майкрософта в приватной беседе на прошлом мастер-классе по 4-ке.

сдается мне, что слукавил 'представитель майкрософта' в этом вопросе, и убрать явную сортировку в общем то возможно.

Сортировка в QueryRun навязывается механизмом Record Level Security (который для этих объектов по умолчанию включен, состояние флага RLS QueryRun первоначально наследуется из Query на основе которого создается), если при инициализации этих объектов явно отключить RLS ( Query.recordLevelSecurity( false ) или QueryRun.recordLevelSecurity( false ) ) то запрос уже не будет содержать ORDER BY по полям индекса:

QueryRun.recordLevelSecurity( false ):
X++:
...
FROM LEDGERTRANS A WHERE (DATAAREAID=?)
QueryRun.recordLevelSecurity( true ):
X++:
FROM LEDGERTRANS A WHERE (DATAAREAID=?) ORDER BY A.DATAAREAID,A.ACCOUNTNUM,A.TRANSDATE,A.VOUCHER,A.AMOUNTMST
P.S. тестировалось на SQL2005
__________________
Dynamics AX 4.0 SP2
За это сообщение автора поблагодарили: mazzy (2), dn (1), raz (1), ZVV (1), Lemming (1), _AnK_ (2), gl00mie (1), S.Kuskov (2).