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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.04.2012, 12:48   #1  
uskutus is offline
uskutus
Участник
 
28 / 10 (1) +
Регистрация: 04.04.2012
Получить число выделенных записей из args.
Требуется для установки в Progressbar. Количество выделенных записей в форме, запущенной runbase классом.

Cмотрел _args.record().RowCount(), _args.usageCount(), _args.record().dataSource().usageCount();.

Не то все.
В msdn нашел свойство multiSelectionContext. Но это только для Ax2012. У меня Ax2009.

Есть какой то способ получить это число, не пробегая циклом по всему _args.record().dataSource? Хотя бы для всех записей а не только выделенных.
Старый 13.04.2012, 13:24   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от uskutus Посмотреть сообщение
Хотя бы для всех записей а не только выделенных.
SysQuery::countTotal(args.record().dataSource().queryRun()) в простейших случаях сведёт перебор строк к запросу вида "select count(RecId) ..."
Старый 13.04.2012, 13:35   #3  
uskutus is offline
uskutus
Участник
 
28 / 10 (1) +
Регистрация: 04.04.2012
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
SysQuery::countTotal(args.record().dataSource().queryRun()) в простейших случаях сведёт перебор строк к запросу вида "select count(RecId) ..."
while (countQueryRun.next())
{
common = countQueryRun.get(countQuery.dataSourceNo(1).table());
counter += common.RecId;
loops++;
}

Я думаю что с такой же скоростью получу число, сделав дополнительный цикл уже для выделенных. Не хочется удваивать время из-за прогрессбара.
Старый 13.04.2012, 14:18   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Там, если повнимательней посмотреть, то видно, что перед тем как запустить этот цикл сначала модифицируется запрос (правда не всегда).
X++:
qbds.addSelectionField(fieldnum(Common,RecId),SelectionField::Count);
После такой модификации цикл сводится к единственной итерации
За это сообщение автора поблагодарили: uskutus (1).
Старый 15.04.2012, 00:37   #5  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
X++:
static int countMarkedRecordsDS(FormDataSource  _fDS)
{
    Common      common;
    int         countRecords;
    ;
    for (common = _fDS.getFirst(true) ?
                  _fDS.getFirst(true) :
                  _fDS.cursor();
                  common;
                  common = _fDS.getNext())
    {
        countRecords++;
    }
    return countRecords;
}
я что то такое писал
упс, а вам это не нужно)))
Старый 15.04.2012, 22:36   #6  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от uskutus Посмотреть сообщение
Требуется для установки в Progressbar. Количество выделенных записей в форме, запущенной runbase классом. Есть какой то способ получить это число, не пробегая циклом по всему _args.record().dataSource?
По-моему, изначально неправильная постановка задачи. Надо обязательно пробежать циклом по всему ds - причем сделать это один раз независимо от наличия градусника, запомнить все выделенные записи и затем обрабатывать их на сервере. Для этого есть готовый метод - FormLetter::getFormRecord(), он возвращает запакованный мап с выделенными на форме записями, который надо распаковать на сервере. Градусник можно инициализировать по числу элементов в этом мапе.
За это сообщение автора поблагодарили: Logger (1), gefr (1), uchenik (1), uskutus (1).
Старый 16.04.2012, 11:08   #7  
uskutus is offline
uskutus
Участник
 
28 / 10 (1) +
Регистрация: 04.04.2012
Пасиб, поразбираюсь на досуге.
Старый 22.07.2014, 19:14   #8  
uchenik is offline
uchenik
Участник
 
119 / 20 (1) +++
Регистрация: 15.12.2008
Цитата:
Сообщение от gl00mie Посмотреть сообщение
По-моему, изначально неправильная постановка задачи. Надо обязательно пробежать циклом по всему ds - причем сделать это один раз независимо от наличия градусника, запомнить все выделенные записи и затем обрабатывать их на сервере. Для этого есть готовый метод - FormLetter::getFormRecord(), он возвращает запакованный мап с выделенными на форме записями, который надо распаковать на сервере. Градусник можно инициализировать по числу элементов в этом мапе.
К сожалению поставил плюс, за такую подсказку.
Иногда надо заглядывать внутрь и читать ветку (
__________________
Ax2009
Старый 23.07.2014, 05:32   #9  
yuriy_64 is offline
yuriy_64
Участник
 
88 / 10 (1) +
Регистрация: 21.03.2014
Посмотри по ссылке
http://learnax.blogspot.ru/2010/01/x...-selected.html
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Выборка произвольных записей одним запросом db DAX: Программирование 1 23.09.2010 14:15
args.record - как заставить работать в форме PurchLine? Gustav DAX: Программирование 9 12.01.2010 16:53
Вызов метода element.args().caller().setOfficialsParams(.... Poleax DAX: Программирование 6 04.09.2008 19:49
Использование caller в args Zoe DAX: Программирование 3 23.04.2008 12:18
Количество выделенных записей Mila DAX: Программирование 12 23.06.2006 11:08

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

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

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