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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.04.2012, 10:53   #1  
FridmanV is offline
FridmanV
Участник
 
27 / 10 (1) +
Регистрация: 05.04.2012
Адрес: Самара
С Формы в Класс
Доброго времени суток!
Помогите пожалуиста начинающему.
Необходимо создать возможность для гененрирования дополнительного отчета по Реестру прикладных документов по складу.Для этого на форме которая вызывается для работы я ввел дополнительный CheckBox ,при нажатии на которыи есть возможность создать другой вид реестра.
Поработал с классом которыи генерирует эти реестры, создал метод которыи будет генерировать реестр другого вида.
Но вот проблема (видимо связанна с пробелами знаннии в ООП и вообще AX)
я не могу передать в этот класс значения checkBox что бы внутри класса происходило переключение между типами отчета.поскольку не вижу тревиального обращения с формы к классу.Есть только момент в котором выбирается название этого класса из Enum а дальше происходит что-то непонятное.
Дебагером отследить происходящее не могу потому как ход работы останавливается изза пользовательских настроек.
При создании public метода в классе ,в котором я запоминаю значения ChekBox'а с формы-значение теряется видимо по тому, что создатся далее по ходу программы новый экземпляр этого класса.
Посоветуйте пожалуитса как передать значение ChekBox'а с формы.Жеательно с примерами в виде кода.
Поскольку не первый раз мучаюсь с этим проблемами.
вот кусок код в котором происходит запрос к Enum
X++:
public void init()
{  
    curUser     = CurUserId();
    formreport  = vsn_ReportInputFormTable::VSN_ReestrReceipOrder;


    if (! element.args().caller())
        throw error("Class not found");

    caLClass =  element.args().caller().runbase();

    super();
}
Зарнее благодарен
Старый 05.04.2012, 11:02   #2  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
Как мне кажется, лучше сделать через menuFunction - на кнопке в форме перекрыть метод clicked() и добавить примерно следующий код:
X++:
void clicked()
{
MenuFunction        menuFunction;
    Args                args = new Args();

        args.record(  );
        args.caller(element);
        args.parmEnumType(typeid(NoYes);
        args.parmEnum(CheckBox.checked());
        menuFunction = new menuFunction(menuItemActionStr( ), MenuItemType::Action);
        menuFunction.run(args);
}
В классе создаем метод, объявив переменную Args в ClassDeclaration:
X++:
Args parmArgs(Args _args = args)
{
    ;
    args = _args;
    return args;
}
В main'e вызываем
X++:
this.parmArgs(_args)
и уже в том месте, где нужно принять решение о типе печатаемого отчета, делаем нужные проверки:
X++:
if (args.parmEnum() && args.parmEnumType() == typeId(NoYes) )
{
    if (args.parmEnum() == NoYes::Yes)
    {
    }
    else
    {
    }
}
Это общая картина возможных действий.
__________________
С уважением, Александр.

Последний раз редактировалось samolalex; 05.04.2012 в 11:11.
За это сообщение автора поблагодарили: FridmanV (1).
Старый 05.04.2012, 11:27   #3  
FridmanV is offline
FridmanV
Участник
 
27 / 10 (1) +
Регистрация: 05.04.2012
Адрес: Самара
у меня возникают проблемы с перекртыием метода на форме.
X++:
void clicked()
{
MenuFunction        menuFunction;
    Args                args = new Args();

        args.record(  );
        args.caller(element);
        args.parmEnumType(typeid(NoYes);
        args.parmEnum(CheckBox.checked());
        menuFunction = new menuFunction(menuItemActionStr( ), MenuItemType::Action);
        menuFunction.run(args);
}
1.Зачем тут использовать MenuItem?
2.args.record(можно положить курсор);-можно туда ниче не класть?
3.Выдает Синтаксическую ошибку при упоминании args.

Все рано спасибо за ответ - он полюбому работает-просто я чет не могу догнать как его адаптировать под свою формочку
Старый 05.04.2012, 11:35   #4  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
Цитата:
1.Зачем тут использовать MenuItem?
Для вызова класса. MenuItem нужно создать для вызываемого класса. Такой способ можно использовать для того, чтобы можно было положить в аргументы значение enuma, в данном случае CheckBox'a, и затем передать это значение в вызываемый класс.
Цитата:
2.args.record(можно положить курсор);-можно туда ниче не класть?
Можно
Цитата:
3.Выдает Синтаксическую ошибку при упоминании args.
В каком методе?
__________________
С уважением, Александр.
Старый 05.04.2012, 11:37   #5  
FridmanV is offline
FridmanV
Участник
 
27 / 10 (1) +
Регистрация: 05.04.2012
Адрес: Самара
Изнавчально когда OnClick перекрываю .
Старый 05.04.2012, 11:39   #6  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
какой OnClick, к чему относится этот метод?
__________________
С уважением, Александр.
Старый 05.04.2012, 11:43   #7  
FridmanV is offline
FridmanV
Участник
 
27 / 10 (1) +
Регистрация: 05.04.2012
Адрес: Самара
Ой пардон метод clicked на кнопке формы.
а MenyItem должен быть тот к которому относится данная форма?я ниче не путаю в смысле)
Старый 05.04.2012, 11:47   #8  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
Нет, как я уже написал, MenuItem должен быть создан для вызываемого класса. Посмотрите внимательно метод Clicked() - я привел его в качестве шаблонного примера, в нем нужны некоторые исправления, в частности наименование менюшки.
__________________
С уважением, Александр.

Последний раз редактировалось samolalex; 05.04.2012 в 11:50.
Старый 05.04.2012, 11:51   #9  
FridmanV is offline
FridmanV
Участник
 
27 / 10 (1) +
Регистрация: 05.04.2012
Адрес: Самара
Так вот сеичас я написал вот таким образом этод метод
X++:
;
        MenuFunction        menuFunction;
    Args                args = new Args();

        args.record(  );
        args.caller(element);
        args.parmEnumType(typeid(NoYes));
        args.parmEnum(CheckBox.checked());
        menuFunction = new menuFunction(menuItemActionStr( ), MenuItemType::Action);
        menuFunction.run(args);
и в строчке args.parmEnum(CheckBox.checked());
выдает синтаксическую ошибку.
я немного тромажу получается чем служит menuItem - вообще чет не понимаю к сожалению.(

Последний раз редактировалось FridmanV; 05.04.2012 в 11:53.
Старый 05.04.2012, 13:14   #10  
FridmanV is offline
FridmanV
Участник
 
27 / 10 (1) +
Регистрация: 05.04.2012
Адрес: Самара
Все исправил юперекрыл метод но что то походу сделал не так.
X++:
void clicked()
{
MenuFunction        menuFunction;
    Args                args = new Args();
 ;
        args.record();
        args.caller(checkBox);
        args.parmEnumType(typeid(NoYes));
        args.parmEnum(CheckBox.value(1));
        menuFunction = new menuFunction(menuItemActionStr(Vsn_Item4chenge),MenuItemType::Action);
        menuFunction.run(args);

    super();

    element.runCollection();
}
наверно как то не так создал menuItem.
пишет что
No object specified on Vsn_Item4chenge
Старый 05.04.2012, 13:31   #11  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
в свойствах menuItem нужно выбрать вызываемый объект и его тип, в данном случае класс.
__________________
С уважением, Александр.
Старый 05.04.2012, 14:07   #12  
FridmanV is offline
FridmanV
Участник
 
27 / 10 (1) +
Регистрация: 05.04.2012
Адрес: Самара
Все собрал но где то опять напортачил-ошибок не выдает но инче не происходит
так перекрыл метод на форме
X++:
public void closeOk()
{    VSN_ReestrReceipOrder ReestrReceip;


    dialogRunbase dialog = element.args().caller();
    ;

    caLClass.parmParam(param1);

    dialog.updateServer();

    If (caLClass.CheckCloseDialog())
       {
             super();
       }

    }
в классе создал метод
X++:
Args parmArgs(Args _args = args)
{
    ;
    args = _args;
    return args;
}
вызвал в маине
сделал переключение в Start
X++:
if (args.parmEnum() && args.parmEnumType() == typeId(NoYes) )
{
    if (args.parmEnum() == NoYes::Yes)
    {this.vendcalc();
    }
    else
    {  this.vendcalcInvoice();
    }
}
Старый 05.04.2012, 14:11   #13  
FridmanV is offline
FridmanV
Участник
 
27 / 10 (1) +
Регистрация: 05.04.2012
Адрес: Самара
ои ои чет вообще не здооровое я сделал
теперь при нажатии Ok выскакивает такая же форма- а при закрытии формируется пустои отчет
Старый 05.04.2012, 16:15   #14  
FridmanV is offline
FridmanV
Участник
 
27 / 10 (1) +
Регистрация: 05.04.2012
Адрес: Самара
Так теперь -все почти норм только он в If во внтурь не проходит.
вот тут
X++:
if (args.parmEnum() && args.parmEnumType() == typeId(NoYes) )
{
    if (args.parmEnum() == NoYes::Yes)
    {
       this.vendcalc();
    }
    else
    {  
       this.vendcalcInvoice();
    }
}
Старый 18.04.2012, 14:48   #15  
smailik is offline
smailik
Участник
Аватар для smailik
 
250 / 70 (3) ++++
Регистрация: 10.04.2012
Адрес: Москва
У меня подобная проблема. Если мне нужно переменную в класс передать, то как поправить то что выше написано для меня?
Старый 18.04.2012, 15:02   #16  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от smailik Посмотреть сообщение
У меня подобная проблема. Если мне нужно переменную в класс передать, то как поправить то что выше написано для меня?
Передача произвольных параметров с помощью Args()
За это сообщение автора поблагодарили: smailik (1).
Старый 18.04.2012, 15:10   #17  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
завести в классе парм метод и пихать туда свой параметр
Старый 18.04.2012, 15:14   #18  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,510 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Коллеги, если вам нужно передать переменную, которая в классе определяет тип отчёта, то вы КМК изначально идёте по неверному пути. Должен быть один исходный класс-родитель, запускающий формирование отчёта. Вы заводите енум, который перечисляет все типы отчётов, строимые этим классом и его потомками. В настройках менюайтема вы указываете класс, енум и конкретное значение (какой тип отчёта запускает кнопка). А далее уже в самом классе заводите статический метод construct, который по _args.parmEnum() создаёт правильный экземпляр потомка. И уж в потомке надо расписывать логику построения отчёта.
__________________
С уважением,
Вячеслав
За это сообщение автора поблагодарили: G.Menshikh (1).
Старый 18.04.2012, 15:18   #19  
smailik is offline
smailik
Участник
Аватар для smailik
 
250 / 70 (3) ++++
Регистрация: 10.04.2012
Адрес: Москва
Мне надо передать в класс значение поля таблицы.
В методе parmArgs выдает ошибку "Имя _args уже употребляется во внешнем контексте"
А в main ругается на надпись this.parmArgs(_args) "Таблица не содержит это поле"
Старый 18.04.2012, 15:22   #20  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от pitersky Посмотреть сообщение
Коллеги, если вам нужно передать переменную, которая в классе определяет тип отчёта, то вы КМК изначально идёте по неверному пути...
Напраление этого пути задал автор вопроса. В вашем варианте необходимо под каждый отчёт иметь отдельную кнопку. Автор же хотел одну кнопку + ComboBox
Теги
args, значение, класс, форма

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Передать временную таблицу из формы в класс Eldar9x DAX: Программирование 26 20.06.2008 19:09
Проблема с передачей контролов из формы в класс matew DAX: Программирование 0 28.04.2008 17:37
Как получить параметры в класс из формы, созданной классом. BEPECK DAX: Программирование 9 07.02.2005 14:14
Передача datasource формы в класс Yprit DAX: Программирование 2 06.10.2004 14:00
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38

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

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

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