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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.06.2015, 14:44   #1  
syl is offline
syl
Участник
Аватар для syl
 
236 / 21 (1) +++
Регистрация: 10.06.2015
Адрес: Киев
Получение данных с диалога
Создал такой диалог:

X++:
class DialogCommRate extends RunBase
{
    DialogField             dialogField;
    DialogField             dialogRate;
    DialogButton            dialogButton;
    TradeCurencyConversion  tcc;
    BankGroupId             bgi;

    #define.CurrentVersion(1)
    #localmacro.CurrentList
        tcc,
        bgi
    #endmacro
}

public Object dialog()
{
    DialogRunbase      dlg;
    ;
    dlg = super(dlg);
    dlg.caption("@SYS54755");
    dialogField = dlg.addField(typeid(TradeCurencyConversion));
    dialogRate = dlg.addFieldValue(typeid(BankGroupId), bgi, "Коммерческий курс", "Коммерческий курс");
    dialogRate.visible(false);
    return dlg;
}

public void dialogPostRun(DialogRunbase dialog)
{
    ;
    Super(dialog);
    dialog.formRun().controlMethodOverload(true);
    dialog.formRun().controlMethodOverloadObject(this);
}

protected boolean fld1_1_selectionChange()
{
    ;
    dialogRate.visible(dialogField.value() == 2);
    dialogRate.value(bgi);
    return true;
}

public container pack()
{
    return [#CurrentVersion, #CurrentList];
}

public boolean unpack(container packedClass)
{
    Version version = RunBase::getVersion(packedClass);
    ;
    switch (version)
    {
        case #CurrentVersion:
            [version, #CurrentList] = packedClass;
            break;
        default:
            return false;
    }
    return true;
}

public boolean getFromDialog()
{
;
    tcc = dialogField.value();
    bgi = dialogRate.value();

    return true;
}

X++:
static void myJob(Args _args)
{
    DialogCommRate d = new DialogCommRate();
    d.prompt();
    //тут ему надо задать начальное значение и получить обратно
}
Подскажите как получить из него значения dialogField и dialogRate после нажатия кнопки ОК?

Так же у меня не выходит передать ему начальное значение dialogRate, создавал метод parm но он не работает.

Последний раз редактировалось syl; 11.06.2015 в 14:47.
Старый 11.06.2015, 15:08   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
основная военная хитрость состоит в том, чтобы dialogField* создавать вне диалога, а не внутри его. тогда переменные dialogField* и будут вашими ручками, за которые можно дергать за вымя содержимое диалога.

см. класс tutorialRunBaseBatch.
в частности методы dialog и getFromDialog
Старый 11.06.2015, 15:11   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
что касается вашего класса и вашего вопроса, то диалог тут вообще не причем.

у вас есть класс.
внутри класса приватные переменные.
вы хотите получить доступ к приватным переменным извне класса.

создавайте parm-методы (в Аксапте они заменяют традиционные геттеры и сеттеры).
За это сообщение автора поблагодарили: syl (1).
Старый 11.06.2015, 15:12   #4  
pedrozzz is offline
pedrozzz
Молодой, подающий надежды
Аватар для pedrozzz
MCBMSS
Лучший по профессии 2015
 
164 / 218 (8) ++++++
Регистрация: 18.02.2010
Адрес: Краснодар
Цитата:
Сообщение от syl Посмотреть сообщение
Подскажите как получить из него значения dialogField и dialogRate после нажатия кнопки ОК?
Значения вы получаете в методе getFromDialog, дальше уже работаете с переменными.
Цитата:
Сообщение от syl Посмотреть сообщение
Так же у меня не выходит передать ему начальное значение dialogRate, создавал метод parm но он не работает.
X++:
static void myJob(Args _args)
{
    DialogCommRate d = new DialogCommRate();
    
    d.getLast();
    d.parmBgi('test')
    
    if (d.prompt())
    {
        info(d.parmBgi());
    }
}
Вообще посмотрите классы Tutorial_RunbaseBatch и Tutorial_RunbaseForm + какую-нибудь книжку по аксапте, например Еременко/Шашков по версии 3.0
__________________
Кононов Пётр
За это сообщение автора поблагодарили: mazzy (2), syl (1).
Старый 11.06.2015, 15:20   #5  
syl is offline
syl
Участник
Аватар для syl
 
236 / 21 (1) +++
Регистрация: 10.06.2015
Адрес: Киев
Я понимаю что подход в целом не правильный. Но задача в данном случае стоит именно такая.

Мне не разрешают изменять логику которая уже реализована, если передавать значения по ссылке то нету возможности управлять видимостью поля dialogRate в зависимости от значения dialogField. А если делать нормальную обработку в методе Run, то мне придется переписать текущую логику, что мне делать запретили ))
Старый 11.06.2015, 15:37   #6  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Хм... Ну, если намеки не понимаете, то надо делать так.

1. Создаете в своем классе 2 дополнительных метода

X++:
TradeCurencyConversion parmTcc(TradeCurencyConversion _tcc  = tcc)
{
;
    tcc = _tcc;

    return tcc;
}


BankGroupId parmBgi(BankGroupId _bgi  = bgi)
{
;
    bgi = _bgi;

    return bgi;
}
2. Вызов класса

X++:
static void myJob(Args _args)
{
    DialogCommRate d = new DialogCommRate();
    
    // Если переменная, для которой надо задать начальное значение включена в макрос #CurrentList, 
    // или формируется в методе unpack, то предварительно надо достать сохраненные значения
    d.getLast();  

    // Собственно передача начального значения ПОСЛЕ вызова getlast()
    d.parmBgi('test')
    
    if (d.prompt())
    {
        // После закрытия диалога с пользователем через нажатие Ok читаем параметры
        info(strFmt('%1',d.parmBgi()));
        info(strFmt('%1',d.parmTcc()));
    }
}
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: syl (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Способы получение данных из AX на веб сайт Ali311 DAX: Программирование 6 15.04.2014 13:56
AIF - получение данных zipo DAX: Программирование 5 12.10.2007 10:06
Получение данных из RecordInsertList. lemchey_white DAX: Программирование 1 10.09.2007 11:05
Получение значений из диалога Antant DAX: Программирование 10 05.06.2006 15:17
Получение данных из файла Excel Zeratul DAX: Программирование 11 27.04.2006 15:00

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

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

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