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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.03.2012, 17:43   #1  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Выделенные строки на гриде -> QueryRun
Как бы это покороче написать?
Старый 25.03.2012, 17:51   #2  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Не очень понятен вопрос.
Если хотите сделать что-то вроде того, что из датасорса вытащить запрос, в котором кроме всех фильтров будет еще какой-то признак выделения строк и подсунуть такую конструкцию в queryRun, то, вроде бы такого нет.
Если нужно просто обработать строки, которые выделены, то нужно смотреть в сторону методов getFirst и getNext датасорса.
Например, в классе, в который передается курсор, независимо от того, выделено несколько строк или только одна, можно пользоваться чем-то вроде:
Цитата:
protected void initFromCaller(common _callerTable)
{
ShipmentsJournal_OVK locShipmentsJournal;
FormDataSource shipmentJournalDS;

shipmentJournalDS = _callerTable.dataSource();
for (locShipmentsJournal = (shipmentJournalDS && shipmentJournalDS.getFirst(1)) ? shipmentJournalDS.getFirst(1) : _callerTable;
locShipmentsJournal;
locShipmentsJournal = shipmentJournalDS ? shipmentJournalDS.getNext() : null)
{
// Тут обрабатываем переменную таблицы locShipmentsJournal

Последний раз редактировалось Raven Melancholic; 25.03.2012 в 17:55.
Старый 25.03.2012, 18:52   #3  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
Не очень понятен вопрос.
Если хотите сделать что-то вроде того, что из датасорса вытащить запрос, в котором кроме всех фильтров будет еще какой-то признак выделения строк и подсунуть такую конструкцию в queryRun, то, вроде бы такого нет.
Если нужно просто обработать строки, которые выделены, то нужно смотреть в сторону методов getFirst и getNext датасорса.
Например, в классе, в который передается курсор, независимо от того, выделено несколько строк или только одна, можно пользоваться чем-то вроде:
нет, пробежать по выделенным строкам это понятно как. Имеется ввиду, каким образом получить QueryRun, который сделает точно такую же пробежку. Покороче. Использовать вышеприведенный код, собирая фильтр по RecId что ли?

Последний раз редактировалось Eldar9x; 25.03.2012 в 18:55.
Старый 25.03.2012, 21:22   #4  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
Похоже я продолжаю упорно рекламировать одну и ту же фичу
Выборка произвольных записей одним запросом
Набираем RecId в Set любым способом (пример пробега по выделенным записям во втором сообщении) ну или вот готовый код:
X++:
public static Set dsGetMarked(FormDataSource _ds)
{
    Set     markedRecords = new Set(Types::Int64);
    Common  markedRecord;

    if (! _ds.anyMarked() && _ds.cursor())
    {
        markedRecords.add(_ds.cursor().RecId);
    }
    else
    {
        markedRecord = _ds.getFirst(true);
        while (markedRecord)
        {
            markedRecords.add(markedRecord.RecId);
            markedRecord = _ds.getNext();
        }
    }
    return markedRecords;
}
Смотрим пример использования класса RecordReferenceList_RU по ссылке выше. У данного класса есть возможность явно установить набор обрабатываемых записей setRecords().
Чуть измененный пример из исходной темы:
X++:
static void refList_TutorialSet(Args _args)
{
    RecordReferenceList_RU  refList = RecordReferenceList_RU::construct();
    RecordReference_RU      ref;
    InventTable             inventTable;
    int                     i;
    Set                     markedRecords = new Set(Types::Int64);
    Query                   query;
    QueryBuildDataSource    qbds;
    QueryRun                queryRun;
    ;

    setprefix("RecordReferenceList_RU");

    while select inventTable
    {
        markedRecords.add(inventTable.RecId);
        i++;
        if (i > 10)
        {
            break;
        }
    }
    refList.setRecords(markedRecords);
    refList.flush();

    info("Query");

    query = new Query();
    qbds  = query.addDataSource(tablenum(InventTable));
    refList.join(qbds);
    queryRun = new QueryRun(query);

    while (queryRun.next())
    {
        info(queryRun.get(tablenum(InventTable)).caption());
    }

    info("Select");

    while select inventTable
        join ref
            where ref.RefRecId == inventTable.RecId
               && ref.ParmId   == refList.getParmId()
    {
        info(inventTable.caption());
    }

    refList.cleanup();
}
плюсы/минусы/замечания описаны в исходной теме
За это сообщение автора поблагодарили: Eldar9x (1).
Старый 26.03.2012, 00:48   #5  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
нет, пробежать по выделенным строкам это понятно как. Имеется ввиду, каким образом получить QueryRun, который сделает точно такую же пробежку.
А зачем? Есть тот же FormLetter::getFormRecords() (пишу по памяти, возможны очепятки).
Старый 26.03.2012, 07:11   #6  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Цитата:
Сообщение от gl00mie Посмотреть сообщение
А зачем? Есть тот же FormLetter::getFormRecords() (пишу по памяти, возможны очепятки).
Мне нужен именно QueryRun, или Query, на худой конец.
Старый 26.03.2012, 11:38   #7  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
В любом случае, в QueryRun и в Query нет данных о выделенных строках, эти данные есть только в датасорсе. Так что пробежать по датасорсу все равно нужно, а вот что делать с этими данными, полученными при пробеге по датасорсу уже другой вопрос.
Один из вариантов это то, что предлагает db - воспользоваться классом RecordReferenceList_RU (если DAX2009, иначе сделать что-то подобное самому - там ничего особенно сложного нет).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
как вывести номер строки в гриде? funnut DAX: Программирование 21 01.10.2012 16:33
Выбраные строки в гриде. bagyr DAX: Программирование 28 25.03.2005 10:01
Заказ. Форма "Разноска накладной"->Строки-> Поле "закрытие" ATimTim DAX: Функционал 2 30.11.2004 16:14
Журнал переноса->Строки->Поле "Количество" . Нужен "0" по умолчанию вместо ATimTim DAX: Функционал 5 26.06.2004 12:17
Заказов -> Строки заказов -> Запросы -> Пункт "Производство" Андре DAX: Программирование 1 20.09.2002 10:43

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

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

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