AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search

 
 
Thread Tools Search this Thread Display Modes
Old 09.08.2005, 16:53   #1  
somebody is offline
somebody
Участник
 
128 / 30 (2) +++
Join Date: 30.04.2003
Location: Москва
Post добраться из ClassFactory "обратно" до класса
Hello All!

Как узнать в ClassFactory, какой именно класс работает?

Например, если при запуске класса, основанного на RunBase, в SysSetupFormRun посмотреть this.name(), увидим dialog, а classId2Name(classIdGet(this)) есть SysSetupFormRun. Args пустой, соответственно и caller() нельзя получить.

А хотелось бы узнать имя класса, который extends RunBase.

Смысл: например, чтобы для отслеживания запусков форм/отчётов модифицировать только ClassFactory, а не каждый отслеживаемый класс.
Old 09.08.2005, 17:49   #2  
macklakov is offline
macklakov
NavAx
macklakov's Avatar
 
2,347 / 996 (38) +++++++
Join Date: 03.04.2002
Re: добраться из ClassFactory "обратно" до класса
Quote:
Изначально опубликовано somebody
Как узнать в ClassFactory, какой именно класс работает?
Странный вопрос. Не могли бы Вы сформулировать его в терминах ООП?
Quote:
Например, если при запуске класса, основанного на RunBase, в SysSetupFormRun посмотреть this.name(), увидим dialog, а classId2Name(classIdGet(this)) есть SysSetupFormRun. Args пустой, соответственно и caller() нельзя получить.
Конечно, ведь мы видим форму, сгенерированную объектом класса dialog
Quote:
А хотелось бы узнать имя класса, который extends RunBase.
Каким именно образом? Из кода или увидеть в SysSetupFormRun?
Quote:
Смысл: например, чтобы для отслеживания запусков форм/отчётов модифицировать только ClassFactory, а не каждый отслеживаемый класс.
Что значит: "отслеживать запуск форм/отчетов"?
__________________
Isn't it nice when things just work?
Old 09.08.2005, 18:08   #3  
somebody is offline
somebody
Участник
 
128 / 30 (2) +++
Join Date: 30.04.2003
Location: Москва
1) зачем?
2) no comment
3) что значит "увидеть в SysSetupFormRun"?
4) no answer
Old 09.08.2005, 18:18   #4  
George Nordic is offline
George Nordic
Модератор
George Nordic's Avatar
Злыдни
 
4,480 / 1255 (50) ++++++++
Join Date: 17.12.2003
Location: Moscow
Blog Entries: 9
Видимо, г-н somebody хочет отслеживать предка, который вызвал тот или иной класс/отчет. Типа стека вызовов.
Хм. чуствуется подход после Java

С Уважением,
Георгий
Old 09.08.2005, 18:21   #5  
macklakov is offline
macklakov
NavAx
macklakov's Avatar
 
2,347 / 996 (38) +++++++
Join Date: 03.04.2002
Quote:
Изначально опубликовано somebody
3) что значит "увидеть в SysSetupFormRun"?
Ошибся, имел в виду форму SysSetupForm
__________________
Isn't it nice when things just work?
Old 09.08.2005, 18:25   #6  
macklakov is offline
macklakov
NavAx
macklakov's Avatar
 
2,347 / 996 (38) +++++++
Join Date: 03.04.2002
Quote:
Изначально опубликовано George Nordic
Видимо, г-н somebody хочет отслеживать предка, который вызвал тот или иной класс/отчет. Типа стека вызовов.
Хм. чуствуется подход после Java

С Уважением,
Георгий
Георгий, судя по уточнениям к вопросу:
Quote:
Изначально опубликовано George Nordic
1) зачем?
2) no comment
4) no answer
,
господина somebody вообще не интересуют ответы.
__________________
Isn't it nice when things just work?
Old 10.08.2005, 11:14   #7  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,720 / 1207 (44) ++++++++
Join Date: 13.01.2004
Blog Entries: 3
Я попробую сформулировать за автора проблему с которой он столкнулся. Возможно, ее можно решить и без использования ClassFactory.

AXPTA 2.5 SP3

С момента введения в эксплуатацию AXAPTA было введено множество самых разных модификаций. Принимались на работу и уволнялись как собственные (самой компании) разработчики, так и менялись программисты Columbus вносившие свои модификации. Приходили и уходили начальники самых разных отделов, которые считали, что вот они-то как раз наведут во всем порядок, но для этого надо ввести еще вот такую и такую функциональность. После их ухода (а иногда и ДО) про эту функциональность благополучно забывали. Иногда еще до ее внедрения.

В результате, имеем в системе огромное количество самых разных объектов.

Сама задача заключается в следующем.

Необходимо определить, какие же объекты реально используются в системе, а какие - нет.

Пока остановились на задаче определения факта использования классов, форм и отчетов. Это основная масса объектов, где скопился "мусор".

Под термином "используются" в данном случае понимается факт открытия (вызова) соответствующего объекта. В момент открытия (вызова) объекта надо "скинуть" в некий лог информацию следующего содержания:

тип объекта
имя объекта
дата и время обращения

Для справки (т.е. не обязательно) можно еще добавить

пользователь
компания

Каким образом можно организовать заполнение этого лога? Другими словами, журналирование использования объектов AXAPTA?
Old 10.08.2005, 12:46   #8  
macklakov is offline
macklakov
NavAx
macklakov's Avatar
 
2,347 / 996 (38) +++++++
Join Date: 03.04.2002
Интересная задача :-) Как в общем виде решить, не знаю. Но что касается наследников от Runbase, то imho, достаточно переопределить в Runbase, метод new и в нем писать в лог данные, получаемые через:
classidget(this)
и
classId2Name(classidget(this))
__________________
Isn't it nice when things just work?
Old 10.08.2005, 13:58   #9  
sukhanchik is offline
sukhanchik
Administrator
sukhanchik's Avatar
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,343 / 3563 (125) ++++++++++
Join Date: 13.06.2004
Location: Москва
Рискну предложить исследование использования объектов в построенных перекрестных ссылках. Очевидно, что тк
Quote:
Под термином "используются" в данном случае понимается факт открытия (вызова) соответствующего объекта.
и
Quote:
но для этого надо ввести еще вот такую и такую функциональность
можно сделать вывод, что большинство объектов - потенциально мусорных сделаны в слое выше dis (для примера - usr). Соответственно, очевидно, что отбирать нужно из объектов, которые лежат в этом слое (usr). Далее делается некий анализ - какие классы запускаются из пунктов меню и что это за меню - и кто пользует данный отчет (правда тут уже процесс неавтоматизированный получается)
очевидно, что если есть класс, не имеющий наследников, и ни один метод из этого класса не запускается, то класс - скорее всего мусорный.
Конечно - такой процесс долгий и нудный.... однако теоретически может привести к результатам.
В отношении лога можно добавить что есть классы, которые вообще никогда не запускаются, однако запускаются их наследники (как напр RunBase).
Old 10.08.2005, 16:01   #10  
raz is offline
raz
NavAx
raz's Avatar
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,499 / 1097 (39) ++++++++
Join Date: 22.07.2003
Location: МО
А может профайлер приспособить под это дело, при логине включать скртыно? Или, покопавшись в нем, разобраться - как он определеят всю нужную информацию.
Old 10.08.2005, 16:44   #11  
maximus is offline
maximus
Участник
 
153 / 10 (1) +
Join Date: 16.03.2005
Разверну идею, поданую macklakov.

Создаете новую таблицу с полем единственным полем ClassID. Из new пишите в нее ClassID. Потом сажаете несколько человек на тестирование всех стандартных операций в системе. Тестируете и получаете ClassID всех используемых. Далее любым известным способом формируете разность - все классы минус используемые.
Из числа оставшихся возможно предположить 2-3% тех, которые нужны, но функционал просто забыли протестировать. Далее перекрестными ссылками ищутся все определения каждого конкретного класса из числа разностных классов и коментарятся. Коментарий дополняется двумя спец. макросами. Первый нужен, чтобы все такие комментарии можно было найти для удаления, второй - все с использованием такого класса для восстановления в случае ошибки.

Постепенно кол-во оставшихся классов сведется к 0. В финале, тестируете еще раз и вытираете комментарии. Работа долгая и потная, но чудес не бывает По крайней мере, это системный подход..
Old 10.08.2005, 17:48   #12  
belugin is offline
belugin
Участник
belugin's Avatar
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Join Date: 16.01.2004
Blog Entries: 5
Еще пара идей:
*статически проанализировать граф вызовов при помощи Xref и выявить недостижимые объекты
*пройтись по достижимым кастомизированным методам и вставить автоматически в начало каждого метода (или только для new классов, но тогда надо создавать new и корректно перекрывать) что-то типа
PHP Code:
int хренВыСделаетеТакойДругойИдентификатор=MyCoolLogger::AddUsage("НазваниеОбъекта"); // эту строку снести после анализа 
Old 11.08.2005, 15:22   #13  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,720 / 1207 (44) ++++++++
Join Date: 13.01.2004
Blog Entries: 3
Да. Речь идет только и исключительно об объектах созданных в слое USR. Не измененных, а именно созданных. Получить их список можно через таблицу UtilElements или UtilIdElements.

Да. Перехват в RunBase позволит выявить достаточно большую часть используемых объектов. Однако это далеко не все классы и отчеты.

Предварительный анализ показал, что на базе RunBase сделано примерно 2/3 всех классов слоя USR. При этом никак не учитываются формы, а отчеты лишь частично, если они запускаются через RunBaseReport (это примерно 2/5 всех отчетов слоя USR)

PS: Не надо описывать как сделать анализ на основе полученных данных. Это я и сам соображу. Вопрос в том, как эти данные получить

PPS: то, что написал belugin я вообще не понял.
Old 11.08.2005, 15:45   #14  
belugin is offline
belugin
Участник
belugin's Avatar
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Join Date: 16.01.2004
Blog Entries: 5
какая конкретна буква непонятна?

1. Можно проанализировать перекрестные ссылки по данным хранящимся в таблицах XRef* и выяснить статически, какие классы не вызываются.

2. Можно пройтись инструментом, который будет вставлять в начало всех методов (через TreeNode ) фрагмент, логгирующий вызовы. А после окончание логгирования его убрать.
Old 11.08.2005, 16:12   #15  
macklakov is offline
macklakov
NavAx
macklakov's Avatar
 
2,347 / 996 (38) +++++++
Join Date: 03.04.2002
Quote:
Изначально опубликовано belugin
2. Можно пройтись инструментом, который будет вставлять в начало всех методов (через TreeNode ) фрагмент, логгирующий вызовы. А после окончание логгирования его убрать.
Хм, а как определить, в каком месте метода завершается объявление переменных?
__________________
Isn't it nice when things just work?
Old 11.08.2005, 16:21   #16  
belugin is offline
belugin
Участник
belugin's Avatar
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Join Date: 16.01.2004
Blog Entries: 5
Если командир не может предотвратить объявление переменных, он должен его возглавить.

См. код в 1 моём сообщении
Old 11.08.2005, 16:25   #17  
macklakov is offline
macklakov
NavAx
macklakov's Avatar
 
2,347 / 996 (38) +++++++
Join Date: 03.04.2002
Quote:
Изначально опубликовано belugin
Если командир не может предотвратить объявление переменных, он должен его возглавить.

См. код в 1 моём сообщении
Точно. Гениально!
__________________
Isn't it nice when things just work?
Old 11.08.2005, 18:02   #18  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,720 / 1207 (44) ++++++++
Join Date: 13.01.2004
Blog Entries: 3
Quote:
Изначально опубликовано belugin
Если командир не может предотвратить объявление переменных, он должен его возглавить.

См. код в 1 моём сообщении
PHP Code:
/*
А здесь комментарии 
И старый кусок начала
void new()
{
}
*/
void new(Par1 _par1,
    
Par2 _par2,
    
Par3 _par3)
{
...

Как возглавлять будем? Поиск до первой фигурной скобки?
Old 11.08.2005, 18:07   #19  
belugin is offline
belugin
Участник
belugin's Avatar
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Join Date: 16.01.2004
Blog Entries: 5
не могу придумать случая, когдабы поиск до первойфигурной не сработал. (если отсеять комментарии). комментарии может отсеять, например XPPParser или регулярное выражение.

Или можно отсеят комментарии просто обнаруживая символы комментария до скобки и ругаясь на них. Поруганные места править руками.
 

Similar Threads
Thread Thread Starter Forum Replies Last Post
"Запущен сайт о Microsoft Dynamics AX 4.0 новой системе класса ERP" GM2005 DAX: База знаний и проекты 46 08.02.2007 11:47
"Серверный" экземпляр класса SysExcelApplication Bug DAX: Программирование 4 13.01.2006 13:32
"Программный" вызов метода класса!? axaLearner DAX: Программирование 13 16.08.2005 08:12
Не могу добраться до класса Application ?! 3oppo DAX: Программирование 1 05.07.2005 07:56
"LIKE" и "OR" в "qbds" @x DAX: Программирование 14 20.01.2004 13:20

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 15:40.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.