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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.08.2010, 12:18   #1  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,738 / 404 (17) +++++++
Регистрация: 23.03.2006
? пропадают связи между классами наследниками RunBase
Доброго времени суток!

Ax 2009, RU3. Возникла такая проблема. Периодически пропадают связи между классами наследниками RunBase.
Пример, Class1 extends RunBaseBatch, Class2 extends Class2. метод new() перекрыт везде кроме Class2. При вызове new Class2() происходит вызов сразу new RunBase().
Подобное происходить может с любым методом. Либо, например, возникает ошибка о несоответствии типов присваиваемых значений переменных, когда переменная объявлена в родительском классе. Ошибки могут возникать в любых классах, системности не прослеживается. Сначала лечилось просто инкрементной компиляцией. В какой-то момент это перестало помогать. Удаляли индексные файлы приложения и проводили глобальную компиляцию, помогало но не надолго. Ошибки возникают вновь.

С чем это может быть связано? и чем это можно вылечить окончательно?
Старый 24.08.2010, 12:25   #2  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
или это опечатка, или так и не будет работать (т.к. наследует сам себя):
Цитата:
Class2 extends Class2
может тут вы имели ввиду
Цитата:
Class2 extends Class1
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 24.08.2010, 12:35   #3  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
и ещё просьба, приведите кусок кода где выполняется вызов new Class2(). хочется посмотреть в каком контексте он вызывается.

P.S. создал быстренько у себя примерчик такой ситуации, которую вы описываете. Отработало нормально, вызвался метод new() первого класса.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 24.08.2010, 12:50   #4  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,738 / 404 (17) +++++++
Регистрация: 23.03.2006
да опечатка, правильно Class2 extends Class1.
ситуация с вызовом new() может быть любая, и метод может быть любой, new() привел в качестве примера.
Ошибка возникает не на новых классах, а на любых, классы могут быть не модифицированы долгое время и отлично работавшие до ошибки

Последний раз редактировалось ice; 24.08.2010 в 12:52.
Старый 24.08.2010, 12:59   #5  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
в общем то странно.
У меня Axapta 3.0 SP3, воссоздать проблему не получилось. Как не старался, все равно вызывается правильный метод.

P.S. отпишитесь плиз, если найдете из-за чего такое, оочень интересна причина
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 24.08.2010, 21:27   #6  
McArrow is offline
McArrow
Участник
 
45 / 38 (2) +++
Регистрация: 18.05.2009
У меня на четвёрке бывают подобные случаи, причём не только с RunBase. Решается переопределением метода new() у наследника, компиляцией и его удалением. Видимо глюк какой-то.
Старый 24.08.2010, 21:45   #7  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Скорее всего, поможет это:
1. Сервис\Средства разр-ки\Объекты приложения\Обновить AOD
2. Компиляция ваших классов.
Старый 24.08.2010, 23:00   #8  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Рабочее приложение или разработка?
Какие слои используете, какие изменяете?
Как часто делаете глобальную компиляцию и перестроение перекрестных ссылок?
Старый 25.08.2010, 09:20   #9  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,738 / 404 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от Wamr Посмотреть сообщение
Рабочее приложение или разработка?
Какие слои используете, какие изменяете?
Как часто делаете глобальную компиляцию и перестроение перекрестных ссылок?
чаще всего происходит на тестовом приложении, бывает и на рабочем. разработка в usr. глобальную компиляцию и перестроение перекрестных ссылок делаем не периодично, примерно 1раз в 1-2 месяца
Старый 25.08.2010, 09:24   #10  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,738 / 404 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Скорее всего, поможет это:
1. Сервис\Средства разр-ки\Объекты приложения\Обновить AOD
2. Компиляция ваших классов.
не помогает. помогает перекрытие метода, но вскоре ошибка появляется на другом методе, того же класса
Старый 25.08.2010, 09:26   #11  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,738 / 404 (17) +++++++
Регистрация: 23.03.2006
самое странное, что ошибки появляются на классах, которые не изменялись долгое время
Старый 25.08.2010, 13:09   #12  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
приложение для разработки есть? (там проблем нет?)
модифы переносите проектами? с идентификаторами удалением\пересозданием объектов или как-есть?

Случай загадочный, конечно. Обычно такое приключается после правки classDeclaration где-то в родительском классе и лечится инкрементной компиляцией.
Не понятно, что может "само" периодически портить уже откомпилированные классы.
Старый 25.08.2010, 14:15   #13  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,738 / 404 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от Wamr Посмотреть сообщение
приложение для разработки есть? (там проблем нет?)
модифы переносите проектами? с идентификаторами удалением\пересозданием объектов или как-есть?

Случай загадочный, конечно. Обычно такое приключается после правки classDeclaration где-то в родительском классе и лечится инкрементной компиляцией.
Не понятно, что может "само" периодически портить уже откомпилированные классы.
в приложении для разработки таких ошибок особо не замечено. переносим проектами, без идентификаторов.
Случай действительно загадочный и впервые в моей практике
Старый 02.09.2010, 10:34   #14  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
:) вступил в ряды ice, с непонятным поведением new() :)
Вчера вечером стал очевидцем отказа классом потомком вызывать метод new() своего родителя. Как получилось такое восстановить....

Есть класс наследник от RunBase, назовем его ClassGeneral. В классе ClassGeneral унаследован метод new() и в нем выполняются некие действия. От класса ClassGeneral унаследовано куча классов, в основном отчетные классы. Понадобилось мне создать подобие одного из таких классов, назовем его ClassReport1. Соответственно что бы все заново не переписывать и не мучить кнопки Ctr+C и Ctrl+V воспользовался замечательной функцией дублирования, доступной по правой кнопке мыши. Сдублированный класс переименовал как мне надо, пусть будет ClassReport1_Copy, внес все нужные изменения. Запускаю свой класс и... При инициализации класса ClassReport1_Copy ни в какую не хочет выполняться метод new() класса родителя! (ClassGeneral ). Никакие танцы с бубнами (Глобальная компиляция, инкрементная компиляция класса ClassGeneral, обновление словаря, обновление данных, обновление ADO) не помогают. Так же не помог и экспорт\импорт класса (экспортировал, удалил, импортировал), что меня удивило .

Помогло только ручное создание класса-дубликата.

Ещё нюанс. Такое явление наблюдается только при дублировании старых классов, которые уже давно были созданы. Попробовал восстановить такое поведение с помощью новой иерархии тестовых классов. Все нормально дублируется. Метод new() класса родителя выполняется как не крути.

З.Ы. Ax3.0 SP3 Может кто сможет у себя такое поведение восстановить...
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 02.09.2010, 12:12   #15  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от lev Посмотреть сообщение
Ещё нюанс. Такое явление наблюдается только при дублировании старых классов, которые уже давно были созданы. Попробовал восстановить такое поведение с помощью новой иерархии тестовых классов. Все нормально дублируется. Метод new() класса родителя выполняется как не крути.
Тогда резонно предположить, что ошибка скорее всего закралась в какую-то систему кэширования, и процедура дублирования (в отличии от ручного создания) не обновляет информацию в кэше. Причём кэш может сбоить как на сервере так и на клиенте. Для AX2009 клиент создаёт некие файлы вот в этой папке c:\Users\%username%\AppData\Local\. С тройкой работал давно, сейчас уже не вспомню было ли там аналогичное кэширование на клиенте. Попробуйте воспроизвести ошибку под новым профилем с чистым кэшем.
За это сообщение автора поблагодарили: lev (2).
Старый 02.09.2010, 12:37   #16  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
У меня воспроизводится, когда дублируешь и меняешь класс-предок, к примеру с RunBase на RunBaseBatch и при этом есть еще открытые клиенты. При этом новый класс для методов, переопределенных в новом предке и не перекрытых в нем самом, продолжает вызов этих методов напрямую из RunBase (к примеру, new(), prompt() и т.п.).

Лечилось либо экспортом/удалением/импортом, либо перекрытием этих методов в новом классе, компиляцией и удалением ненужного, либо закрытием всех открытых клиентов, удалением клиентских кэшей, открытием одного клиента и дальше восстановление/компиляция на классе
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: lev (1).
Старый 02.09.2010, 12:47   #17  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,738 / 404 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от AndyD Посмотреть сообщение
Лечилось либо экспортом/удалением/импортом, либо перекрытием этих методов в новом классе, компиляцией и удалением ненужного
так и поступаем
Старый 02.09.2010, 13:11   #18  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Тоже иногда бывает такая проблема. Лечу - Сервис -> Средства разработки -> Объекты приложения -> Переиндексировать. Вроде помогает.
За это сообщение автора поблагодарили: lev (2).
Старый 02.09.2010, 13:14   #19  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от AndyD Посмотреть сообщение
У меня воспроизводится, когда дублируешь и меняешь класс-предок, к примеру с RunBase на RunBaseBatch и при этом есть еще открытые клиенты. При этом новый класс для методов, переопределенных в новом предке и не перекрытых в нем самом, продолжает вызов этих методов напрямую из RunBase (к примеру, new(), prompt() и т.п.).

Лечилось либо экспортом/удалением/импортом, либо перекрытием этих методов в новом классе, компиляцией и удалением ненужного, либо закрытием всех открытых клиентов, удалением клиентских кэшей, открытием одного клиента и дальше восстановление/компиляция на классе
изменение класса-предка вообще как то очень не понятно работает, поэтому я этого стараюсь никогда не делать, что бы сохранить свои нервные клетки
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Теги
runbase

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Связи между таблицами 1:N и N:1 Jox DAX: Программирование 10 12.07.2006 10:17
Связи между таблицами. braathe DAX: Программирование 7 18.02.2005 18:40
связи между таблицами при установлении прав доступа Manner DAX: Администрирование 9 08.10.2004 22:31

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

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

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