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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.07.2016, 13:12   #1  
Music is offline
Music
Участник
 
33 / 10 (1) +
Регистрация: 01.07.2014
? Query для HcmPosition (запрос по таблице, соссылкой на себя же)
Коллеги, нужна ваша помощь по теоретической части query!

На не рабочем примере HcmPosition:

X++:
    HcmPosition                 position,
                                parentPosition;
    
    QueryRun                    queryRun;

    Query                       ret = new Query();

    QueryBuildDataSource        qbdsPosition,
                                qdbsParentPosition,
                                qbdsHierarchy,
                                qbdsHierarchyType;


    qbdsPosition    = ret.addDataSource(tableNum(HcmPosition));

    qbdsHierarchy   = qbdsPosition.addDataSource(tableNum(HcmPositionHierarchy));
    qbdsHierarchy.clearLinks();
    qbdsHierarchy.addLink(fieldNum(HcmPosition, RecId), fieldNum(HcmPositionHierarchy, Position));
    qbdsHierarchy.joinMode(JoinMode::InnerJoin);
    qbdsHierarchy.fetchMode(QueryFetchMode::One2One);
    
        qdbsParentPosition   = qbdsHierarchy.addDataSource(tableNum(HcmPosition));
        qdbsParentPosition.clearLinks();
        qdbsParentPosition.addLink(fieldNum(HcmPositionHierarchy, ParentPosition), fieldNum(HcmPosition, RecId));
        qdbsParentPosition.joinMode(JoinMode::InnerJoin);
        qdbsParentPosition.fetchMode(QueryFetchMode::One2One);
Как к этому запросу привязать снова таблицу HcmPosition для отображения поля ParentPosition из таблицы HcmPositionHierarchy?

В итоге нужно получить в запросе два поля:
PositionId (из HcmPosition) + PositionId (по полю ParentPosition из HcmPositionHierarchy)
Старый 07.07.2016, 13:43   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,427 / 1771 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
А что именно не работает?
Старый 07.07.2016, 13:45   #3  
Music is offline
Music
Участник
 
33 / 10 (1) +
Регистрация: 01.07.2014
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
А что именно не работает?
Получаю в обоих полях один и тот же PositionId из основной HcmPosition

Т.е.:

нужно Вице-президент + Президент,
а получаю Вице-президент + Вице-президент
Старый 07.07.2016, 13:47   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,427 / 1771 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Покажите как обходите запрос и выбираете значения полей PositionId
Старый 07.07.2016, 14:03   #5  
Music is offline
Music
Участник
 
33 / 10 (1) +
Регистрация: 01.07.2014
по сути, мне нужно воспроизвести этот квери HcmPositionList (используемый на форме HcmPositionList) в коде

Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Покажите как обходите запрос и выбираете значения полей PositionId
не понял вопроса

Последний раз редактировалось Music; 07.07.2016 в 14:10.
Старый 07.07.2016, 14:22   #6  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,427 / 1771 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
В самом запросе на первый взгляд всё правильно. Поэтому думаю что ошибка в получении значений.

Вы как этот запрос используете? Как в коде получаете значения?
Старый 07.07.2016, 14:23   #7  
Music is offline
Music
Участник
 
33 / 10 (1) +
Регистрация: 01.07.2014
так в том то и дело, что пока просто беру что есть в самих таблицах. т.е. данные оригинальные
Старый 07.07.2016, 14:34   #8  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,427 / 1771 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
покажите код
За это сообщение автора поблагодарили: Music (1).
Старый 07.07.2016, 14:50   #9  
Music is offline
Music
Участник
 
33 / 10 (1) +
Регистрация: 01.07.2014
Job:

X++:
 int                         enumNumber = 0;
    HcmPosition                 position,
                                parentPosition;
    HcmPositionHierarchy        hierarchy;

    QueryRun                    queryRun;
    Query                       ret = new Query();
    QueryBuildDataSource        qbdsPosition,
                                qdbsParentPosition,
                                qbdsHierarchy;

    qbdsPosition    = ret.addDataSource(tableNum(HcmPosition));

    qbdsHierarchy   = qbdsPosition.addDataSource(tableNum(HcmPositionHierarchy));
    qbdsHierarchy.clearLinks();
    qbdsHierarchy.addLink(fieldNum(HcmPosition, RecId), fieldNum(HcmPositionHierarchy, Position));
    qbdsHierarchy.joinMode(JoinMode::OuterJoin);
    qbdsHierarchy.fetchMode(QueryFetchMode::One2One);

        qdbsParentPosition   = qbdsHierarchy.addDataSource(tableNum(HcmPosition));
        qdbsParentPosition.clearLinks();
        qdbsParentPosition.addLink(fieldNum(HcmPositionHierarchy, ParentPosition), fieldNum(HcmPosition, RecId));
        qdbsParentPosition.joinMode(JoinMode::InnerJoin);
        qdbsParentPosition.fetchMode(QueryFetchMode::One2One);

    queryRun = new QueryRun(ret);

    while (queryRun.next())
    {
        enumNumber++;

        position        = queryRun.get(TableNum(HcmPosition), 1);
        parentPosition  = queryRun.get(TableNum(HcmPosition), 2);

        info(strFmt('%1: %2 / %3)',  enumNumber,
                                                            position.PositionId,
                                                            parentPosition.PositionId
                                                          ));
    }
    info(int2str(enumNumber));
}
Как то так, лишнее убрал ибо привязываю еще толпу таблиц и полей

Последний раз редактировалось Music; 07.07.2016 в 14:54.
Старый 07.07.2016, 14:54   #10  
Music is offline
Music
Участник
 
33 / 10 (1) +
Регистрация: 01.07.2014
пока писал, исправил кучу ошибок... вроде заработало... хм...
ключевой момент оказался в номере инстанса queryRun.get()

Последний раз редактировалось Music; 07.07.2016 в 15:17.
Теги
hcmposition, query

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
emeadaxsupport: Microsoft Dynamics AX general performance analysis scripts page 5 Blog bot DAX Blogs 0 01.09.2014 14:11
Вложенный запрос SQL с помощью великого Query user_ax DAX: Программирование 9 07.10.2013 14:00
как сохранить запрос в таблице kitty DAX: Программирование 13 19.11.2007 20:16
Глюки в Query с разными типами Join (в т.ч. NonExistsJoin) к одной таблице gl00mie DAX: Программирование 10 14.02.2007 13:22
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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