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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.05.2008, 18:49   #22  
gl00mie_imported is offline
gl00mie_imported
Участник
 
17 / 10 (1) +
Регистрация: 18.01.2006
Цитата:
Сообщение от mazzy Посмотреть сообщение
итак, предлагаю код метода SysQuery::countPrim для 3.0
Код:
private server static container countPrim(container _queryPack)
{
...
  ;
    countQueryRun   = new QueryRun(_queryPack);
    countQuery      = countQueryRun.query();
    for (k = 1; k <= countQuery.dataSourceCount();k++)
    {
        qbds = countQuery.dataSourceNo(k);
        qbds.update(false);
        qbfl = qbds.fields();
        qbfl.dynamic(false);
        qbfl.clearFieldList();
        qbfl.addField(FieldNum(Common,recId),SelectionField::COUNT);
    }
...
}
Давнишняя тема, но по ходу разбирательств обнаружилась небольшая неточность. В исходном сообщении говорилось следующее:
Цитата:
Сообщение от Maxim Gorbunov Посмотреть сообщение
Более правильный метод подсчета записей, возвращаемых Query см. в методе webTableLookup.run() Там есть вложенный метод computeRecordCount, который все и делает. Вкратце, суть метода такова. Сначала создается копия исходного Query. Для всех DataSource в Query отменяется динамическое создание списка выбираемых полей и добавляется только поле TableId (чтобы хоть что-то выбиралось). Далее, в самый главный DataSource добавляется Selection Field RecId с функцией агрегации COUNT
Тут же получается, что COUNT(RecId) добавляется для каждого датасорса вместо только первого. В свете этого корректнее было бы, наверно, написать так
Код:
    for (k = 1; k <= countQuery.dataSourceCount();k++)
    {
        qbds = countQuery.dataSourceNo(k);
        qbds.update(false);
        qbfl = qbds.fields();
        qbfl.dynamic(false);
        qbfl.clearFieldList();
        if (k == 1)
            qbfl.addField(fieldnum(Common, RecId), SelectionField::Count);
        else
            qbfl.addField(fieldnum(Common, TableId));
    }
 


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

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

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