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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.06.2016, 11:16   #1  
Artikov is offline
Artikov
Участник
 
33 / 12 (1) ++
Регистрация: 06.06.2016
? вызов класса из меню
И снова всем привет =) Продолжаю осваивать DAX, и сегодня на повестке дня у меня следующая проблема:

У меня есть таблица типа:

|_Номер документа для разноски_|_Posted_ |
|______DAT-000005_____________|__нет___|

и так далее.
Я написал класс, который изменяет поле Posted для заданного номера DAT. Запуск класса осуществлялся из формы: пользователь нажимал кнопку, появлялся диалог, запрашивающий номер, осуществлялся ввод номера и Posted изменялось.

Теперь мне необходимо осуществить запуск класса не из формы, а напрямую из меню. Я создал в меню ссылку на этот класс,но после того, как пытаюсь запустить его на выполнение, мне выдает ошибку:

FormDataSource Объект не инициализирован.

Трассировка стека

(C)\Classes\MyChangePostedClass\new - line 9
(C)\Classes\MyChangePostedClass\main - line 11


Я понимаю, почему эта ошибка возникает: никакие параметры на вход класса не подаются. А вопрос в том, каким образом это исправляют?
Заранее спасибо.
Старый 20.06.2016, 11:28   #2  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
305 / 873 (30) +++++++
Регистрация: 23.10.2012
Добрый день!
В new аргументы из формы передаёте? Удостоверьтесь в том, что на форме в параметрах контрола заполнено поле DataSource.
Старый 20.06.2016, 11:39   #3  
Artikov is offline
Artikov
Участник
 
33 / 12 (1) ++
Регистрация: 06.06.2016
Цитата:
Сообщение от Товарищ ♂uatr Посмотреть сообщение
Добрый день!
В new аргументы из формы передаёте? Удостоверьтесь в том, что на форме в параметрах контрола заполнено поле DataSource.
Добрый день!

На контрол поставил DataSource.
Так, я делаю следующим образом:

X++:
public static void main(Args _args)
{
    MyChangePostedClass   objClass;
    TableHead             tableHead;
    FormDataSource        tableHead_ds;
    ;

    tableHead =_args.record();
    tableHead_ds = tableHead.dataSource();

    objClass = new MyChangePostedClass(tableHead);
}
и уже инициализированную переменную tableHead посылаю в new. Ну по сути да, данные из формы беру.

Когда из формы этот класс вызываю - проблем нет, все работает. Но из меню отдельный вызов класса делать отказывается
Старый 20.06.2016, 12:19   #4  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Потому что у пункта меню нет свойства DataSource, поэтому на строчке
X++:
tableHead_ds = tableHead.dataSource();
Вам и выдает ошибку.
Добавьте проверку на наличие источника данных - ошибка уйдет.

Если поставить созданный меню айтем на контрол меню айтем на форме и указать свойство ему DataSource = ваш источник данных - тогда будет работать корректно.
Если же вы хотите вызывать этот класс ещё где-то - добавите условие и будет Ок все.
Старый 20.06.2016, 13:16   #5  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Пока у Вас не сформировалась "вредная привычка"

Метод new - не должен принимать никаких параметров. От слова "совсем"

Причина в том, что есть ряд ситуаций, когда объект класса создается "анонимно". Например, при формировании пакетных заданий. В этом случае метод new() будет выполнен, но, естественно, никаких параметров ему передано не будет. А это может привести к неожиданным ошибкам исполнения. Вот чтобы подобных казусов не случалось, лучше заранее считать, что метод new() параметры принимать не должен!

Создавайте отдельные методы для приема/передачи параметров и выполняйте их после методе New() примерно так

X++:
objClass = new MyChangePostedClass();
objClass.setTableHead(tableHead);
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: AlGol (1), Artikov (1).
Старый 20.06.2016, 13:58   #6  
Artikov is offline
Artikov
Участник
 
33 / 12 (1) ++
Регистрация: 06.06.2016
Спасибо за ответы, в частности за указание на вредную привычку =) Не знал, сейчас буду переделывать и переписывать. Вроде суть уловил
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
setTimeOut() не работает в классе, если экземпляр класса создан через вызов MenuFunction AR® DAX: Программирование 10 22.05.2013 16:53
Вызов метода базового класса Eldar9x DAX: Программирование 15 22.03.2008 19:10
Вызов класса из другого класса Protey DAX: Программирование 9 26.02.2007 11:01
"Программный" вызов метода класса!? axaLearner DAX: Программирование 13 16.08.2005 08:12
Работа с главным меню в Axapta Alexey DAX: Программирование 0 04.01.2002 23:31

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

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

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