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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.07.2010, 10:54   #1  
Roman N. Krivov is offline
Roman N. Krivov
Участник
 
25 / 11 (1) +
Регистрация: 04.05.2010
Адрес: Мир, Россия, Московская область
QueryRun и два Join'а
Доброго времени суток!

Столкнулся со следующей проблемой: QueryRun не понимает два join к одному datasource.

Есть запрос:
Код:
 select * from SalesTable
join CustTable on CustTable.AccountNum == SalesTable.CustAccount
join SalesLine on SalesLine.SalesId == SalesTable.SalesId
where SalesTable.SalesStatus == SalesStatus::Backorder &&
SalesLine.InventQtyReserve <> 0
Нужно такой же запрос организовать в QueryRun. Вот что я делаю:
X++:
    #define.RecId('RecId')
    Query                   query = new Query();

    QueryBuildDataSource    qbdsSalesTable;
    QueryBuildDataSource    qbdsCustTable;
    QueryBuildDataSource    qbdsSalesLine;
    ;

    qbdsSalesTable = SysQuery::findOrCreateDatasource(query, tablenum(SalesTable));
    qbdsCustTable = SysQuery::findOrCreateDatasource(query, tablenum(CustTable), tablenum(SalesTable), false);
    qbdsSalesLine = SysQuery::findOrCreateDatasource(query, tablenum(SalesLine), tablenum(SalesTable), false);

    qbdsCustTable.addLink(fieldnum(SalesTable, CustAccount), fieldnum(CustTable, AccountNum));

    qbdsSalesLine.joinMode(JoinMode::ExistsJoin);
    qbdsSalesLine.fields().dynamic(boolean::false);
    qbdsSalesLine.fields().clearFieldList();
    qbdsSalesLine.addSelectionField(fieldname2id(qbdsSalesLine.table(), #RecId));

    SysQuery::findOrCreateRange(qbdsSalesLine, fieldnum(SalesLine, InventQtyReserv)).value(SysQuery::valueNot(0));

    qbdsSalesLine.addLink(fieldnum(SalesTable, SalesId), fieldnum(SalesLine, SalesId));

    SysQuery::findOrCreateRange(qbdsSalesTable, fieldnum(SalesTable, SalesStatus)).value(SysQuery::value(SalesStatus::Backorder));

    SysQuery::findOrCreateRange(qbdsSalesTable, fieldnum(SalesTable, TotalAmountCurReserve)).value('> 0');

    queryRun = new QueryRun(query);
В результате qbdsSalesTable оказывается вообще без join'ов. Как это можно вылечить?

Microsoft Businness Solutions-Axapta 3.0 Build #1951.3730/514-193 SP3/OP023-71

Последний раз редактировалось Roman N. Krivov; 16.07.2010 в 10:57.
Теги
join, query, как правильно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Dynamics AX: QueryRun and Query Objects - Binding operation failed to allocate buffer space Blog bot DAX Blogs 0 03.04.2009 08:05
Простой QueryRun не работает miklenew DAX: Программирование 13 20.01.2009 14:17
OZKA's DAX Journal: Join между временной и постоянной таблицей через QueryRun. Blog bot DAX Blogs 12 14.01.2009 17:34
Воскрешение мумии ... или давно забытая история про два Outer Join Saber DAX: Программирование 3 28.11.2007 17:12
Глюки в Query с разными типами Join (в т.ч. NonExistsJoin) к одной таблице gl00mie DAX: Программирование 10 14.02.2007 13:22

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

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

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