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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.06.2006, 10:11   #1  
batiskaf_new is offline
batiskaf_new
Участник
 
39 / 19 (1) ++
Регистрация: 07.06.2006
Цитата:
Сообщение от belugin
я думаю, никак. а зачем?
Для того чтобы запустить некий код в неявном виде.

Цитата:
Сообщение от belugin
тут как в жабе - можно просто в конструктор класса прописать код инициализации.
Но этот конструктор нужно кому то вызвать, из какого то центрального места в этой всей кухне? В плюсах же особенность состоит вот в этом:

static
struct _SomeRegistration
{
//Constructor of _SomeRegistration structure
_SomeRegistration()
{
RegisterAgent();
}

//Desctructor of _SomeRegistration structure
~_SomeRegistration()
{
UnregisterAgent();
}
} _registrator;
//
При создании автоматического объекта _registrator вызывается его конструктор

Вызов дуструктора мне не нужен, это для симметричности написано, мне главное конструктор. Если в Х++ таких средств нет, то возможно нечто подобное получится сделать другими средствами, например вставить какой то MenuItem оброботчиком которого будет мой класс, экземпляр которого создаст система во время старта Аксапты, и в конструкторе экземпляра я проделаю все что нужно? Что нибудь такое нужно.
Старый 19.06.2006, 10:17   #2  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
*вы не сможете создать объект без запуска конструктора
*посмотрите на erpkb "запуск и остановка".
Старый 19.06.2006, 10:40   #3  
batiskaf_new is offline
batiskaf_new
Участник
 
39 / 19 (1) ++
Регистрация: 07.06.2006
Цитата:
Сообщение от belugin
*вы не сможете создать объект без запуска конструктора
*посмотрите на erpkb "запуск и остановка".
Я этого и не хочу, мне нужно чтобы вызвался конструктор, в приведенном выше примере он (конструктор) и вызывается, но инициируется это в неявном виде... Как же объяснить?! Ну вот в джаве если напишете такое:

class MyClass
{
private MyClass()
{
DoSomeBlabla();
}
private static MyClass _this = new MyClass();
public static MyClass GetInstance()
{
return _this;
}
}

_this конечно же сам не проинициализируется, нужно попросить ClassLoader загрузить этот класс, но вот на момент загрузки произоёдет инициализация. Конечно, лучше чем пример для автоматических объектов в С++ ничего нету...

Ну ладно, давайте так. Есть ли в системе класс, виртуальный метод которого я могу перекрыть и это гарантирует мне то что мой код вызовется в момент инициализации клиентской части? Application.startUp (startupPost?!!!) для этих целей подходит?

О! Может кто знает asp, так вот там можно было в файле Global.asa написать свой Application_OnStart или Session_OnStart, и все мои подготовки проинициализируются там. Это конечно в явном виде получается, но хотя бы так.

Последний раз редактировалось batiskaf_new; 19.06.2006 в 10:45.
Старый 19.06.2006, 10:55   #4  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
Цитата:
Сообщение от batiskaf_new
Есть ли в системе класс, виртуальный метод которого я могу перекрыть и это гарантирует мне то что мой код вызовется в момент инициализации клиентской части? Application.startUp (startupPost?!!!) для этих целей подходит?
подходит

infolog.startup() - инициализация клиентской части сессии
application.startup() - инициализация серверной части сессии

если надо чтоб оъект жил на AOS - то application, если чтобы на клиентской машине - infolog

аналога Application_OnStart нет
За это сообщение автора поблагодарили: batiskaf_new (1).
Старый 19.06.2006, 11:16   #5  
batiskaf_new is offline
batiskaf_new
Участник
 
39 / 19 (1) ++
Регистрация: 07.06.2006
в коде infolog.startup() написано для этих целей использовать startupPost ? И еще, очень меня смущает программирование в системных классах, у меня каждый чих практически таким образом производится, с ужасом думаю как это все будет распространяться... Сложно было этим Навижн преджусмотреть какие то адаптеры, которыми нужно напичкать систему? Ну ладно, допустим.

И еще объясните мне такую вещь. Вот если я меняю какой нибудь класс из AOT\Classes то изменения можно сохранить в файле .xpo, и затем импортировать, допустим что такой вариант для меня приемлимый. А вот если я переписываю отдельные методы класса Info, класс ведь системный, class defenition его вообще не открыть, только метод startupPost. Как потом эти изменения сохранить в отдельный файл, чтобы потом импортировать в АОТ на другом компе (допустим что этот комп в другой компании, наши АОТ не связаны).

Опс! Инфо класс я не заметил в АОТ, он был не по алфавитному порядку а в конце списка, вторая часть вопроса снимается...

Последний раз редактировалось batiskaf_new; 19.06.2006 в 11:33.
Старый 19.06.2006, 11:38   #6  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
Цитата:
Сообщение от batiskaf_new
в коде infolog.startup() написано для этих целей использовать startupPost ? И еще, очень меня смущает программирование в системных классах, у меня каждый чих практически таким образом производится, с ужасом думаю как это все будет распространяться... Сложно было этим Навижн преджусмотреть какие то адаптеры, которыми нужно напичкать систему? Ну ладно, допустим. И еще объясните мне такую вещь. Вот если я меняю какой нибудь класс из AOT\Classes то изменения можно сохранить в файле .xpo, и затем импортировать, допустим что такой вариант для меня приемлимый. А вот если я переписываю отдельные методы класса Info, класс ведь системный, class defenition его вообще не открыть, только метод startupPost. Как потом эти изменения сохранить в отдельный файл, чтобы потом импортировать в АОТ на другом компе (допустим что этот комп в другой компании, наши АОТ не связаны).
понятно что правильнее startupPost(). Но все зависит от ситуации. startupPost() явно вызывается из startup() - если вам надо что-то сделать раньше, чем вызов этого метода - то придется написать в самом startup() или даже в new()

перекрывая методы xInfo (вот он как раз полностью системный и закрытый) вы их пишите их реализацию в классе Info - там все замечательно открывается и экспортируется, включая ClassDeclaration. глобальная переменная infolog ссылается на экземпляр Info (не xInfo - он абсрактный базовый). Ядро же для своих нужд использует интерфейс от xInfo

И еще
будьте осторожнее с вставкой своего кода в методы стартапа - при определенных ошибках в этом коде (у меня был случай с ошибкой вызывавшей трассровку стека) то можно полностью загробить приложение - вы в него просто не зайдете. Бояться не надо, но тестрировать стоит потщательнее, чем "обычный" код

Последний раз редактировалось db; 19.06.2006 в 11:43.
Старый 19.06.2006, 11:57   #7  
batiskaf_new is offline
batiskaf_new
Участник
 
39 / 19 (1) ++
Регистрация: 07.06.2006
Цитата:
Сообщение от db
И еще
будьте осторожнее с вставкой своего кода в методы стартапа - при определенных ошибках в этом коде (у меня был случай с ошибкой вызывавшей трассровку стека) то можно полностью загробить приложение - вы в него просто не зайдете. Бояться не надо, но тестрировать стоит потщательнее, чем "обычный" код
Ценные замечания, только что подумал что если я не проверю null reference или еще чего то аксапта просто не откроется. И что, нет никакой возможности поднять последнюю рабочую конфигурацию?

Пока что решил весь этот код оборачивать в обработчике исключений.
Старый 19.06.2006, 12:10   #8  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
Цитата:
Сообщение от batiskaf_new
Ценные замечания, только что подумал что если я не проверю null reference или еще чего то аксапта просто не откроется. И что, нет никакой возможности поднять последнюю рабочую конфигурацию?

Пока что решил весь этот код оборачивать в обработчике исключений.
никакого волшебного ключика командной строки или другого штатного способа откатить изменения нет (ну или я про него не знаю). самое простое и надежное - перед началом коряченья этих классов сделать копию всего приложения или хотя бы aod файла с вашим рабочим слоем
если сломается скопировать все взад (если копировали только aod, то перед запуском приложения грохнуть все индексные файлы (delindex.bat))
Старый 19.06.2006, 12:17   #9  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
или добавить SysStartupCmd тогда ваш код будет вызываться только с ключиком
Теги
crm2011

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
AX UK: Advanced Demand Management for AX 2009 workshops Blog bot DAX Blogs 0 28.03.2009 01:05
AX UK: Update on Advanced Demand Management for AX 2009 Blog bot DAX Blogs 0 26.03.2009 17:05
Solutions Monkey: WSS Setup for EP - Basic or Advanced Mode ? Blog bot DAX Blogs 0 23.08.2007 05:32
axaptabuilder: How to learn Axapta programming: “MorphXIT: an introduction to Axapta and the MorphX Development Suit” Blog bot DAX Blogs 0 28.10.2006 16:47
Advanced programming: Grid data and view manipulations batiskaf_new DAX: Программирование 15 21.06.2006 11:44

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:49.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.