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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.07.2008, 19:18   #1  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
674 / 512 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
RecId как поле для Range
коллеги, чем грозит использование поля RecId для задания Range при выборках?

в своей задаче я использовал его для обработке в вызываемом классе по кнопке на форме, где выбраны несколько строк в таблице.
__________________
Felix nihil admirari
Старый 09.07.2008, 19:35   #2  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Для моментального исполнения в принципе ничем, но лучше использовать стандартный подход. Для этого вам не придется воротить огород:
X++:
for (pojectTable = pojectTable_ds.getFirst(true) ? pojectTable_ds.getFirst(true) : pojectTable_ds.cursor();
         pojectTable ;
         pojectTable = pojectTable_ds.getNext())
    {
        this.doSmth(pojectTable);
    }
, где pojectTable_ds = pojectTable.datasource(), из Args если через menuItem или передать в класс как параметр.

Edit:
Цитата:
коллеги, чем грозит использование поля RecId для задания Range при выборках?
Грозит, если колл-во выбранных записей будет много, т.к. колличество накладываемых Ranges ограничено

Последний раз редактировалось DSPIC; 09.07.2008 в 19:38.
Старый 09.07.2008, 19:45   #3  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
674 / 512 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Для моментального исполнения в принципе ничем, но лучше использовать стандартный подход. Для этого вам не придется воротить огород:
мерси.

про огород не понял. я вот как сделал:

X++:
mQueryRun = new QueryRun(querystr(LBALabelInventTrans));
qbdsITrans  = mQueryRun.query().dataSourceTable(tablenum(LBALabelView));

  formDatasource = mtblInventTrans.datasource();

  for(localInventTrans = formDatasource.getFirst(true) ? formDatasource.getFirst(true) : mtblInventTrans; localInventTrans; localInventTrans = formDatasource.getnext())
       {
         strInventTransIdRange =  LBAUtils::queryStrRangeConcat(strInventTransIdRange, localInventTrans.RecId);
        }

qbdsITrans.rangefield(fieldnum(InventTrans, RecId)).value(strInventTransIdRange);
вроде похоже.
__________________
Felix nihil admirari
Старый 10.07.2008, 08:59   #4  
Peter Savintsev is offline
Peter Savintsev
Участник
 
246 / 119 (4) +++++
Регистрация: 14.12.2001
Проблемы могут быть с производительностью. Если на вашей таблице нет индекса по RecId, то такой запрос может выполняться достаточно долго. Для решения этой проблемы можно добавить индекс по RecId (свойство CreateRecIdIndex), либо использовать вместо RecId другое поле, по которому в таблице есть уникальный индекс.
За это сообщение автора поблагодарили: aidsua (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Advanced query range value expressions: поле таблицы - имя вcтроенной функции year(). ATimTim DAX: Программирование 12 27.03.2009 18:16
поля, содержащие RecId somebody DAX: Программирование 15 16.05.2008 17:50
aEremenko: Дефрагментация RecID Blog bot DAX Blogs 2 06.03.2007 22:25
Запрос. Отрицание значения при добавлении range'а на поле! IvanS DAX: Программирование 3 11.10.2006 09:41
Как в range на одно и тоже контейнерное поле поставить условие: "исключ." && like Pustik DAX: Программирование 15 03.07.2004 11:54

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

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

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