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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.09.2002, 17:48   #1  
rumpleteazer is offline
rumpleteazer
Участник
 
127 / 28 (1) +++
Регистрация: 02.09.2002
? Наследование от Object
Добрый день,
Кто-нибудь пробовал создавать классы наследованные от Object ?
Я создаю класс наследованный от Object, но при вызове метода super() в его конструкторе, выдается ошибка, что вызов этого метода в данном контексте запрещен.
Если не вызывать super или вообще не перегружать конструктор, то при попытке создания экземпляра моего класса выдается ошибка, что объект Object не инициализированн. Может быть кто-то наступал уже на эти грабли? Поделитесь опытом.
Заранее благодарен за помощь,
программист группы компаний "Счастливый Кроха".
Старый 04.09.2002, 13:50   #2  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Вопрос: а какую задачу Вы хотите этим решить?
Вот цитата из хелпа: "Object is the base class that all other classes are derived from." Т.е. вроде как это и есть родитель всех классов.
__________________
Андрей.
Старый 04.09.2002, 16:19   #3  
rumpleteazer is offline
rumpleteazer
Участник
 
127 / 28 (1) +++
Регистрация: 02.09.2002
Угу, эту строку в хэлпе я видел...
Задача такая: необходимо создать класс, который будет постоянно висеть в памяти, проверяя наличие определенных событий, это делается с помощью метода Object::setTimeOut. Вот для этого я и хочу создать производный от Object класс.

С уважением, программист группы компаний "Счастливый Кроха".
Старый 04.09.2002, 16:32   #4  
Axapta is offline
Axapta
Участник
 
91 / 12 (1) ++
Регистрация: 21.06.2002
Адрес: Moscow
У системного класса Object есть действительно есть метод setTimeOut, но он имеет модификатор final, т.е. его нельзя перекрыть. Непонятно, однако, для чего вообще нужно создавать производный класс для того чтобы использовать статический метод setTimeOut ?
Старый 04.09.2002, 19:12   #5  
rumpleteazer is offline
rumpleteazer
Участник
 
127 / 28 (1) +++
Регистрация: 02.09.2002
Не уверен, что это метод (SetTimeOut) статический, по крайней мере, в документации это не указано. А вызывать надо для того, что, если я правильно понял, то этому методу должно передаваться имя функции, которая будет вызвана через определенное время. Но функция это должна быть методом того класса для которого вызывается SetTimeOut, иначе не работает. Я пробовал создать какой-нибудь экземляр класса, наследованного от Object, например Query. И в нем вызвать функцию SetTimeOut передавая ей имя метода того класса, в котором был создан этот Query. Что-то типа:

void run()
{
Query oQuery.

oQuery = new Query();

oQuery.setTimeOut("run", 1000, false);

}

Таким образом это не работает. Наверное и не должно .
Поэтому хочется создать своего потомка от Object.

С уважением, программист группы компаний "Счастливый кроха".
Старый 05.09.2002, 13:33   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Изначально опубликовано rumpleteazer
Задача такая: необходимо создать класс, который будет постоянно висеть в памяти, проверяя наличие определенных событий, это делается с помощью метода Object::setTimeOut.
Насчет таймера. См. форму tutorial_timer

Насчет объекта в памяти. Такие уже есть. Называются appl, global. Попробуй подлезть в них, вместо того, чтобы изобретать свой велосипед. Посмотри также на реализацию выполнения пакетов (batch) - они выполняются по запланированному графику.

Но надо сказать, что в Аксапте не очень хорошо реализована парадигма агентов. Предполагается, что действия выполняются по требованию пользователя. Единственное, пожалуй исключение, пакеты (кстати, а почему не хочешь воспользоваться ими?)
Старый 05.09.2002, 15:03   #7  
rumpleteazer is offline
rumpleteazer
Участник
 
127 / 28 (1) +++
Регистрация: 02.09.2002
Цитата:
Изначально опубликовано mazzy

Насчет таймера. См. форму tutorial_timer
......
Единственное, пожалуй исключение, пакеты (кстати, а почему не хочешь воспользоваться ими?)
tutorial_timer - было первое, что я посмотрел , отсюда и возникли все вопросы.
А пакетами не хочу пользоваться потому, что не знаю, что это такое, и в первый раз от Вас слышу ))))))). Если не трудно поясните, plz. Или постараюсь потом разобраться сам, спасибо за маячок . Но мне кажется, что эта задача может быть довольно успешно решена, только с помощью таймера......вот если бы наследовать от Object ))

С уважением, программист группы компаний "Счастливый кроха".
Старый 05.09.2002, 16:32   #8  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,249 / 980 (37) +++++++
Регистрация: 03.04.2002
А я всетаки не понимаю, зачем явно наследовать, если любой класс, который ты создаешь, и так наследуется от Object.
И еще, run(), это метод формы, зря ты из него поток делать пытаешься. Лучше вынеси этот код в другой метод, вызови его из run() и пусть он себе в цикле крутится, а ты в это время что нибудь другое делай.
P.S. А пакеты тебе освоить все равно придется, удобная вещь и совсем не сложная :-)
Старый 05.09.2002, 16:32   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
пакеты - дело хорошее.
пакеты позволяют выполнить действия в заданное время на сервере.
В частности, сервер периодически занимается опросом - нужно ли выполнять какое-либо задание. Эту часть можно взять в качестве примера.

Хотя ИХМО лучше просто воспользоваться пакетами

См. Главное меню \ Разное \ Пакеты
Описание настройки пакетов в руководстве администратора.
Старый 05.09.2002, 16:37   #10  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Может лучше сделать invisible форму.. у нее setTimeOut точняк работает
Старый 05.09.2002, 16:54   #11  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Изначально опубликовано macklakov
А я всетаки не понимаю, зачем явно наследовать, если любой класс, который ты создаешь, и так наследуется от Object.
Может быть я ошибаюсь, но от Object наследуется, если создаешь форму, таблицу, отчет в репозитарии. Если создаешь класс, то вроде автоматически не наследуется. Ты попробуй

Цитата:
Изначально опубликовано macklakov
И еще, run(), это метод формы, зря ты из него поток делать пытаешься. Лучше вынеси этот код в другой метод, вызови его из run() и пусть он себе в цикле крутится, а ты в это время что нибудь другое делай.
А разве Аксапта работает с потоками?
А сама Аксапта разве многопоточна?
Старый 05.09.2002, 18:01   #12  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,249 / 980 (37) +++++++
Регистрация: 03.04.2002
Цитата:
Изначально опубликовано mazzy

Может быть я ошибаюсь, но от Object наследуется, если создаешь форму, таблицу, отчет в репозитарии. Если создаешь класс, то вроде автоматически не наследуется. Ты попробуй
Хм-м, и действительно не получается... Однако:
"...Object is the base class that all other classes are derived from. This means that assignment of an object of any class to a variable of class "object" is always valid, and that the methods in cass Object can be called for any object..."
перевожу:
a_method{
ClassA a;
Object obj;
;
a = new ClassA();
obj = a;
obj..setTimeOut("a_method", 1000, false);
}
Цитата:
Изначально опубликовано mazzy

А разве Аксапта работает с потоками?
А сама Аксапта разве многопоточна?
в tutorial_timer два метода крутятся в параллельных потоках, или я что-то неправильно понял?
Старый 05.09.2002, 18:40   #13  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Изначально опубликовано macklakov
Object is the base class that all other classes are derived from.
Насчет all это они загнули.
Посмотри в перекрестных ссылках кем он используется.

Цитата:
Изначально опубликовано macklakov
в tutorial_timer два метода крутятся в параллельных потоках, или я что-то неправильно понял?
А с чего ты взял, что в потоках? Вроде нигде этого не написано. Или я пропустил?
Старый 05.09.2002, 20:15   #14  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,249 / 980 (37) +++++++
Регистрация: 03.04.2002
;)
Цитата:
Изначально опубликовано mazzy

Насчет all это они загнули.
Посмотри в перекрестных ссылках кем он используется.
у меня нет доступа к системному слою, чтоб проверить :-( (хотя может оно и к лучшему)
Цитата:
Изначально опубликовано mazzy

А с чего ты взял, что в потоках? Вроде нигде этого не написано. Или я пропустил?
дык набор методов, очень подозрительный: wait, notify. И работает примерчик явно на трех потоках (один системный и два запущено через setTimeOut) И вообще, в описании wait говорится: ...thread of execution...
Старый 05.09.2002, 20:52   #15  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Хм... У меня тоже.
Но есть ветка System documentation \ Classes.
Там находишь Object и вперед по перекрестным ссылкам.

Хм... действительно, ПЯТАЧОК.
thread of execution... Спасибо.
Старый 10.09.2002, 16:29   #16  
rumpleteazer is offline
rumpleteazer
Участник
 
127 / 28 (1) +++
Регистрация: 02.09.2002
2macklakov:

Цитата:
Изначально опубликовано macklakov

"...Object is the base class that all other classes are derived from. This means that assignment of an object of any class to a variable of class "object" is always valid, and that the methods in cass Object can be called for any object..."
перевожу:
a_method{
ClassA a;
Object obj;
;
a = new ClassA();
obj = a;
obj..setTimeOut("a_method", 1000, false);
}
Хм..не получается так. Если ClassA не является наследником Object, то Аксапта во время выполнения вываливается с ошибкой примерно следующего содержания "ClassA не имеет метода setTimeOut"....
Вот.

С уважением, программист группы компаний "Счастливый Кроха".
Старый 13.09.2002, 17:58   #17  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,249 / 980 (37) +++++++
Регистрация: 03.04.2002
:(
Да, ты прав, в моем примере ClassA должен явно наследоваться от Object. Позор мне, должен был проверить, перед тем, как публиковать... :-(
P.S. Учитесь на моем горьком опыте: не доверяйте документации, все нужно проверять.
Старый 26.10.2004, 12:41   #18  
mpogorelov is offline
mpogorelov
Участник
 
20 / 10 (1) +
Регистрация: 29.04.2004
Цель: написание агента который висел бы в памяти и выполнял нужные действия с какой-то переодичностью

Вот класс который наследуется от Object:
PHP код:
class MyTimer extends Object
{
    
int                 timer;
}

public static 
void main(Args _args)
{
    
MyTimer     timer = new MyTimer();
    
SysGlobalCache globalCache;
    ;
    
globalCache    classFactory.globalCache();
    
globalCache.setclassStrMyTimer ), classIdGettimer ), timer );

    
timer.run();
}
public 
void run()
{
    ;
    
this.doWork();
}
void doWork()
{
    ;
    
//делаем нужные действия 
    
timer this.setTimeOut("doWork",1000,True);

Класс, если его запустить в Axapta, работает
Но!
Если добавить вызов main в Application.startupPost() или другие места где выполняется код при старте системы, то метод doWork() отрабатывает один раз и тишина.
Где грабли? Подскажите кто знает.

Заранее благодарю
Старый 26.10.2004, 12:53   #19  
Alks is offline
Alks
Участник
 
336 / 41 (2) +++
Регистрация: 23.07.2004
Адрес: г. Новокузнецк
Я уже реализовывал эту концепцию (объект принудительно наследованный от Object с целью поиметь методы setTimer()), для реализации драйвера сканнера штрих-кодов, который периодически опрашивает внешний COM-объект на наличие свежих данных и всё прекрасно работает.

Твои грабли кажется заключаются в манипуляциях с globalCache - я просто запоминал ссылку на свой объект в классе appl и всё работает без проблем.
Старый 26.10.2004, 12:58   #20  
mpogorelov is offline
mpogorelov
Участник
 
20 / 10 (1) +
Регистрация: 29.04.2004
Цитата:
Изначально опубликовано Alks

Твои грабли кажется заключаются в манипуляциях с globalCache - я просто запоминал ссылку на свой объект в классе appl и всё работает без проблем.
приведи пожалуйста пример как ты это делал
Теги
object, thread

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Dynamics AX: Map Object Sorting - a real issue Blog bot DAX Blogs 7 15.10.2008 12:02
axperf: Debugging X++ Object Leaks Blog bot DAX Blogs 2 07.07.2008 12:35
Axapta Lessons: Application Object Id’s Blog bot DAX Blogs 0 27.06.2007 09:30
Dynamics AX: .Net BC, C# - Working with AxaptaRecord Object Blog bot DAX Blogs 0 20.06.2007 23:13
dynamicsusers: What object belongs to what granule Blog bot DAX Blogs 0 27.05.2007 14:21

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

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

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