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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.10.2017, 21:54   #1  
dech is offline
dech
Участник
Аватар для dech
 
438 / 189 (7) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Как прицепить несколько джоинов к одному датасорсу в динамическом запросе?
Добрый день всем. Что-то голова не варит уже... Объясните пожалуйста, почему нельзя к одному датасорсу подсоединить несколько других. Пытаюсь через OuterJoin взять информацию о клиенте. Версия AX4.
X++:
    Query                   q = new SysQuery();
    QueryBuildDataSource    qbdsCustTable = q.addDataSource(tablenum(CustTable));
    QueryBuildDataSource    qbds;
    ;

    qbds = qbdsCustTable.addDataSource(tablenum(CustTable_APM));
    qbds.joinMode(JoinMode::OuterJoin);
    qbds.fetchMode(QueryFetchMode::One2Many);
    qbds.relations(true);

    qbds = qbdsCustTable.addDataSource(tablenum(CustTable_ACM));
    qbds.joinMode(JoinMode::OuterJoin);
    qbds.fetchMode(QueryFetchMode::One2Many);
    qbds.relations(true);

    info(q.dataSourceNo(1).toString());
Инфолог выдаёт только: SELECT * FROM CustTable.
Если оставить соединение только с одной таблицей, все отрабатывает замечательно.
И почему запрос подобной сложности отрабатывает к примеру в SysSecurityFormSetup.buildSecurityIdMenuAccessQuery(), где на один DS накидывают OuterJoin и ExistsJoin? См. переменную accessRightsListDataSource:
X++:
    securityFormDataSource = accessRightsListDataSource.addDataSource(tablenum(SysSecurityFormTable));
    securityFormDataSource.joinMode(JoinMode::OuterJoin);
    securityFormDataSource.fetchMode(QueryFetchMode::One2Many);
    securityFormDataSource.relations(true);

    queryBuildRange = securityFormDataSource.addRange(fieldnum(SysSecurityFormTable, FormName));
    queryBuildRange.value(_formName);

    queryBuildDataSource = accessRightsListDataSource.addDataSource(tablenum(UserGroupList));
    queryBuildDataSource.joinMode(JoinMode::ExistsJoin);
    queryBuildDataSource.fetchMode(QueryFetchMode::One2One);
    queryBuildDataSource.addLink(fieldnum(AccessRightsList, GroupId), fieldnum(UserGroupList, GroupId));
__________________
// no comments
Старый 04.10.2017, 21:56   #2  
kashperuk is offline
kashperuk
Senior SDE, Dynamics AX
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,340 / 2038 (76) +++++++++
Регистрация: 30.05.2004
Адрес: Копенгаген, Дания
Измени везде FetchMode на One2One и будет тебе счастье
За это сообщение автора поблагодарили: dech (5).
Старый 04.10.2017, 22:14   #3  
dech is offline
dech
Участник
Аватар для dech
 
438 / 189 (7) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Измени везде FetchMode на One2One и будет тебе счастье
Точно! Спасибо большое!
__________________
// no comments
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Несколько предоплат поставщику mnt_dx DAX: Функционал 12 25.09.2017 23:11
Несколько источников для QueryBuildDataSource syl DAX: Программирование 7 03.09.2015 17:59
Несколько отчетов в одном вьювере IKA DAX: Программирование 3 20.08.2013 16:17
Как в динамическом запросе использовать исловие OR между двумя полями? yooshi DAX: Программирование 12 07.08.2009 16:34
Несколько outer join в запросе _scorp_ DAX: Программирование 2 11.04.2008 10:56
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 13:44.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.