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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.06.2006, 12:59   #1  
Antant is offline
Antant
Участник
 
82 / 17 (1) ++
Регистрация: 03.12.2005
Получение значений из диалога
Здравствуйте!

Мне нужно получить значение из одного из полей диалога после окончания его работы. Перебором всех полей диалога я нахожу это поле, но значение его всегда равно NULL. Для ясности ситуации привожу джоб.

PHP код:
static void testDialog(Args _args)
{
    
Dialog                  cDialog;
    
DialogField             _dialogField;

    
void showFields(object o,str name)
    {
        
formBuildControl    formBuildControl;
        
int                 i;
        ;

        for (
i=1;i<=o.controlCount(); i++)
        {
            
formBuildControl o.controlNum(i);
            
name cDialog.formBuildDesign().control(formBuildControl.id()).name();
            if (
cDialog.formBuildDesign().control(formBuildControl.id()).helpText() == 'tst')
                
infoint2str(cDialog.formBuildDesign().control(formBuildControl.id()).value()));

            if (
formBuildControl.isContainer())
                
showFields(formBuildControl,name);
        }
    }
    ;

    
cDialog = new Dialog ('тестовый диалог');

    
_dialogField cDialog.addField(typeId(NoYes), 'тестовое поле диалога');
    
_dialogField.helpText('tst');

    
cDialog.run();

    
showFields(cDialog.formBuildDesign(), 'Test');

    if (!
cDialog.closedOk())
        return;

    
cDialog.finalize();

Независимо от того, поставить в диалоге галку или нет, он показывает значение 0.
__________________
И почему никто меня не любит?
Да, я надоедливый
Старый 05.06.2006, 13:19   #2  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Без паники!

Все работает:

X++:
static void Job10(Args _args)
{
    Dialog      dialog;
    DialogField dialogFieldName;
    DialogField dialogFieldSex;
    Name        name;
    boolean     isWoman;
    ;
    dialog = new Dialog("Input your name");

    dialogFieldName = dialog.addField(typeId(Name), "Введите Ваше имя");
    //dialogFieldName.helpText('tst');
    dialogFieldSex = dialog.addField(typeId(NoYes), "Вы женщина?");
    //dialogField.helpText('tst');
    if (dialog.run())
    {
        name = dialogFieldName.value();
        isWoman = dialogFieldSex.value();
    }
    else
        throw error("Прервано пользователем");

    info(strfmt("%1, %2",name, isWoman));
}
С Уважением,
Георгий.

ПОЧЕМУ внутренняя переменная начинается с "_" ????
Изучайтк BP. Смотрите tutorials.
Старый 05.06.2006, 13:38   #3  
Antant is offline
Antant
Участник
 
82 / 17 (1) ++
Регистрация: 03.12.2005
В том то и проблема, что я не могу использовать DialogField... я не знаю изначально сколько у меня будет полей. Я создаю поля динамически.

Но спасибо за участие.

Насчет внутренних переменных... если я не ошибаюсь, следуя BP нужно '_' ставить только перед переменными, передаваемыми в функцию... Постараюсь в следующий раз делать правильно, в соотвтетсвии с BP.
__________________
И почему никто меня не любит?
Да, я надоедливый
Старый 05.06.2006, 13:48   #4  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Вообще Диалог в трехровневой конфигурации состоит из клиентской и серверной части, и надеятся на то что у него есть контролы нельзя...
Старый 05.06.2006, 13:56   #5  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Цитата:
Сообщение от belugin
Вообще Диалог в трехровневой конфигурации состоит из клиентской и серверной части, и надеятся на то что у него есть контролы нельзя...
Ну, а если передавать dialog как аргумент?
Старый 05.06.2006, 14:28   #6  
Antant is offline
Antant
Участник
 
82 / 17 (1) ++
Регистрация: 03.12.2005
Я уверен, что есть простое решение моей проблемы.
Но пока не осенило.
__________________
И почему никто меня не любит?
Да, я надоедливый
Старый 05.06.2006, 14:33   #7  
Hezl is offline
Hezl
Участник
Аватар для Hezl
 
138 / 16 (1) ++
Регистрация: 21.04.2004
Адрес: Moscow, Russia
Записывайте создаваемые объекты DialogField в массив. Потом ищите нужный в вашем массиве и смотрите его значение
За это сообщение автора поблагодарили: Antant (1).
Старый 05.06.2006, 14:38   #8  
Antant is offline
Antant
Участник
 
82 / 17 (1) ++
Регистрация: 03.12.2005
Цитата:
Сообщение от Hezl
Записывайте создаваемые объекты DialogField в массив. Потом ищите нужный в вашем массиве и смотрите его значение
Это как? Можете объяснить подробнее? Как создать массив из DialogField?
__________________
И почему никто меня не любит?
Да, я надоедливый
Старый 05.06.2006, 14:49   #9  
Antant is offline
Antant
Участник
 
82 / 17 (1) ++
Регистрация: 03.12.2005
Вот что у меня получилось, вариант работающий.

PHP код:
static void testDialog(Args _args)
{
    
Dialog                  cDialog;
    
DialogField             _dialogField;

    
Map                     _map = new Map(Types::StringTypes::Class);

    
void showFields(object o,str name)
    {
        
formBuildControl    formBuildControl;
        
int                 i;
        ;

        for (
i=1;i<=o.controlCount(); i++)
        {
            
formBuildControl o.controlNum(i);
            
name cDialog.formBuildDesign().control(formBuildControl.id()).name();
            if (
cDialog.formBuildDesign().control(formBuildControl.id()).helpText() == 'tst')
            {
                
//info( int2str(cDialog.formBuildDesign().control(formBuildControl.id()).value()));
                
_dialogField _map.lookup('tst');
                
info (_dialogField.value());
            }

            if (
formBuildControl.isContainer())
                
showFields(formBuildControl,name);
        }
    }
    ;

    
cDialog = new Dialog ('тестовый диалог');

    
_dialogField cDialog.addField(typeId(NoYes), 'тестовое поле диалога');
    
_dialogField.helpText('tst');
    
_map.insert('tst'_dialogField);

    
cDialog.run();

    
showFields(cDialog.formBuildDesign(), 'Test');

    if (!
cDialog.closedOk())
        return;

    
cDialog.finalize();

Спасибо всем, отдельно Hezl.
__________________
И почему никто меня не любит?
Да, я надоедливый
Старый 05.06.2006, 14:54   #10  
Hezl is offline
Hezl
Участник
Аватар для Hezl
 
138 / 16 (1) ++
Регистрация: 21.04.2004
Адрес: Moscow, Russia
Ну как-нибудь так:

Код:
static void testDialog(Args _args)
{
    Dialog                  cDialog;
    DialogField             dialogField;
    Array                   arrDialogField = new Array(types::Class);

    void showFields(object o,str name)
    {
        int                 i;
        DialogField         dField;
        ;

        for (i=1;i<=arrDialogField.lastIndex(); i++)
        {
            dField = arrDialogField.value(i);
            info(dField.value());
        }
    }
    ;

    cDialog = new Dialog ('тестовый диалог');

    dialogField = cDialog.addField(typeId(NoYes), 'тестовое поле диалога');
    dialogField.helpText('tst');
    arrDialogField.value(1, dialogField);

    dialogField = cDialog.addField(typeId(Num), 'тестовое поле диалога');
    dialogField.helpText('tst2');
    arrDialogField.value(2, dialogField);

    cDialog.run();

    showFields(cDialog.formBuildDesign(), 'Test');

    if (!cDialog.closedOk())
        return;

    cDialog.finalize();
}
P.S. Или Map
Старый 05.06.2006, 15:17   #11  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
лучше List - он как раз для этого предназначен - для упорядоченных списков или Set если порядок не волнует.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Использование формы в качестве диалога vs создание диалога программно Lucky13 DAX: Программирование 3 30.05.2008 13:09
Переопределение диалога в RunBaseBatch mou DAX: Программирование 2 17.01.2008 12:39
Получение данных из таблички на форму Protey DAX: Программирование 4 15.06.2007 16:29
метод leave у поля диалога? braathe DAX: Программирование 5 26.01.2006 09:23
Проблема: подстановка значений по дефолту в диалог QueryRun cyrus DAX: Программирование 4 21.03.2003 09:39
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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