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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.11.2010, 10:00   #1  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,443 / 1781 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от lev Посмотреть сообщение
что то я не понял в чем тут прелесть использования макроса?
На сколько я понял, автор попытался с помощью макросов сделать своеобразный конструктор диалогов для запроса у пользователя параметров, которые потом можно использовать в условии where запроса.

Также согласен с вами, что использование QueryRun предпочтительнее.

В свою очередь могу поделиться собстенным инструментом для запроса у пользователя каких-либо параметров. Использую его, когда нужно создать "на лету" простейший диалог, который не может быть связан с каким-либо источником данных.
X++:
static container InputBox(container _conFields, caption _caption = '')
{
    Dialog dlg = new Dialog();
    container ret = conNull();
    int n = conlen(_conFields);
    int i;
    List listFields = new list(Types::Class);
    ListEnumerator enumerator;
    ;

    for (i = 1; i <= n; i += 3)
    {
        listFields.addEnd(
            dlg.addFieldValue(
                conpeek(_conFields, i),
                conpeek(_conFields, i + 1),
                conpeek(_conFields, i + 2)));
    }

    dlg.caption(_caption);

    if (dlg.run())
    {
        enumerator = listFields.getEnumerator();

        while (enumerator.moveNext())
        {
            ret += enumerator.current().value();
        }
    }

    return ret;
}

Пример использования статической функции InputBox
X++:
static void JobTestInputBox(Args _args)
{
    ItemId ItemId;
    fromDate fromDate;
    toDate toDate;
    container con;
    ;

// Тройки параметров аналогичны параметрам метода DialogRunbase.addFieldValue(...)
    con = InputBox(
        [typeid(ItemId), ItemId, '',
         typeid(fromDate), fromDate, '',
         typeid(toDate), toDate, ''],
        'ТЕСТ');

    if (con == conNull()) // Пользователь нажал кнопку "Отмена"
    {
        info('Операция прервана пользователем');
        return;
    }
    
    [ItemId, fromDate, toDate] = con;
    
    info(strfmt('ItemId: %1', ItemId));
    info(strfmt('fromDate: %1', fromDate));
    info(strfmt('toDate: %1', toDate));
}
Старый 15.11.2010, 10:24   #2  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
На сколько я понял, автор попытался с помощью макросов сделать своеобразный конструктор диалогов для запроса у пользователя параметров, которые потом можно использовать в условии where запроса.
тут меня немного задел не сам факт попытки создания универсального инструмента создания диалога на лету (да и пример был приведен крайне не удачный), а не понятное желание написать функцию в макросе! Макросы не для этого, ИМХО.

Вот Вы к вопросу подошли куда более профессионально, создав свою статическую функцию! Ваш код легко читается, и при поддержке его другим программистом никаких трудностей не возникнет, все достаточно прозрачно и понятно.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 15.11.2010, 12:22   #3  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
Это еще цветочки, я работал на проекте, где было жесткое требование в части запросов, что если запрос используется более одного раза, то записывать его макросом. Интересно было было отлаживать такие вещи
И этот человек ушел потом на повышение
__________________
Axapta book for developer
Старый 15.11.2010, 12:24   #4  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от MikeR Посмотреть сообщение
Это еще цветочки, я работал на проекте, где было жесткое требование в части запросов, что если запрос используется более одного раза, то записывать его макросом. Интересно было было отлаживать такие вещи
И этот человек ушел потом на повышение
жесть я вам сочувствую...
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
За это сообщение автора поблагодарили: MikeR (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axaptapedia: RunBaseBatch Blog bot DAX Blogs 0 04.04.2009 22:05
axaptapedia: RunBaseBatch Blog bot DAX Blogs 0 31.03.2009 06:06
axaptapedia: Macro Blog bot DAX Blogs 1 16.11.2007 09:48
axaptapedia: Adding only one Dimension in Dialog Blog bot DAX Blogs 1 25.10.2007 17:54
Kashperuk Ivan: 3 Dialog extensions Blog bot DAX Blogs 4 28.09.2007 18:56
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

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