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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.06.2015, 12:13   #1  
АртемМелихов is offline
АртемМелихов
Участник
Аватар для АртемМелихов
 
120 / 10 (1) +
Регистрация: 18.12.2013
Адрес: Samara
Как query прикрутить к форме?
Добрый день, допустим я сформировал query с помощью класса RecordRefrenceList_RU. А как прикрутить его к форме CustTable, не могу придумать. То есть мне нужно открыть форму с отфильтрованным списком. Спасибо.
Старый 05.06.2015, 12:25   #2  
Craz is offline
Craz
Участник
 
56 / 19 (1) ++
Регистрация: 17.09.2009
Добрый день, вам на init датасорса CustTable после super() надо написать что-то вроде
X++:
    qbds = CustTable_ds.query().dataSourceTable(tablenum(CustTable));
    qbds.clearDynalinks();

    refList = RecordReferenceList_RU::construct();

// тут заполнить refList значениями ну или как вы его заполняете

    refList.flush();
    refList.join(qbds); // просто приджоинить
Старый 05.06.2015, 12:45   #3  
someOne is offline
someOne
Участник
Аватар для someOne
 
174 / 432 (15) +++++++
Регистрация: 11.12.2008
Адрес: Москва
Если в таблице, которую планируется фильтровать таким способом - не будет индекса по recid - фильтр будет тормозить.

Не лучше ли пойти другим путем - просто перечислить через запятую те значения полей, по которым построен индекс в фильтруемой таблице таблице (AccountNum например в вашем случае)
и запихнуть это в Range dataSource данной таблицы ?
например qbr.value("10001,10003,10005,15155,13555,15555 и так далее")


Только нужно помнить что у Range есть ограничение на длинну этого самого Range - 250 символов как я понял.
Но это обходится добавлением нового Range в dataSource формы.

Вот пример реализации добаления Range в форме SalesTable



X++:
        // Удалить все Range по SalesId
        while (SalesTable_qr.query().dataSourceTable(tablenum(SalesTable)).findRange(fieldnum(SalesTable, SalesId)))
        {
           SalesTable_qr.query().dataSourceTable(tablenum(SalesTable)).clearRange(fieldnum(SalesTable, SalesId));
        }

	// Получить список Range, разбитых по длинне не более 250 символов
        rangeCon = salesStatusFilter.criteriaCon();

        if (rangeCon == conNull())
        {
            SalesTable_qr.query().dataSourceTable(tablenum(SalesTable)).addRange(fieldnum(SalesTable, SalesId)).value("null");
        }
        else
        {
            // Может быть добавлено несколько Range
            for (i = 1; i <= conLen(rangeCon); i++)
            {
                rangeTmp = conPeek(rangeCon, i);

                qbr = SalesTable_qr.query().dataSourceTable(tablenum(SalesTable)).addRange(fieldnum(SalesTable, SalesId));

                qbr.value(rangeTmp);
            }
        }
       SalesTable_ds.research();
Вот пример как эти Range подготовить (разбитые по 250 символов)

X++:
    range = "";

    while (    )
    {
        salesTable =   ;

        pr.setText("Обработка заказа: " + salesTable.SalesId);
        pr.incCount();


        if (     )
        {
            if (strLen(range + "," + salesTable.SalesId) > #maxQueryRangeLen)
            {
                statusFilterCon += range;

                range = "";
            }

            if (range)
                range += ",";

            range += salesTable.SalesId;

            i++;
        }
    }

    if (range)
    {
        statusFilterCon += range;
    }
Таким способом можно фильтровать сотни (может и тысячи) произвольных записей.
При этом будет работать индекс в фильтруемой таблице
Старый 05.06.2015, 16:40   #4  
online
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Далеко не всегда этот способ лучше.
Особенно в сложных запросах, в которых приходится план запроса в БД фиксировать. Так как запрос каждый раз разный в БД получается (в зависимости от числа параметров). Также число параметров в запросе ограничено, так что ваш вариант имеет ограничения (Хотя конечно в большинстве случаев мы их и не достигнем)

Эта тема уже на форуме обсуждалась. У каждого подхода есть свои + и -
Теги
recordrefrencelist_ru, ax2012

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Query на Datasource в LookUp-форме. dynamax DAX: Программирование 26 09.10.2009 15:58
Отображение AOT_Query на форме часть 2 radya DAX: Программирование 7 05.06.2008 17:33
отображение значений query на форме fialka DAX: Программирование 13 31.07.2007 14:31
Динамическое изменение Query() на форме makos DAX: Программирование 22 05.07.2006 16:28

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

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

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