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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.09.2012, 06:42   #1  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,129 / 916 (35) +++++++
Регистрация: 03.04.2002
ловля глюков в AX 2012
Коллеги,

Как вы уже наверное заметили, в AX 2012, от привычных инструментов, таких как table browser или перекрестные ссылки пользы мало, в силу обильного использования динамического мета-программирования, хардкодинга через макросы, ну и, конечно же, суррогатных полей и связок по RecId.
Но необходимость дебажить никто не отменял. Более того, местами полностью переписанная логика, возросший уровень сложности и дезориентированность консультантов выводят эту необходимость на новый уровень. В свзяи с чем вопрос. Удалось ли кому либо из вас сформировать какие либо рекомендации или приемы анализа кода и данных в 2012? Может какие-то новые инструменты появились или старые улучшены?

Спасибо
__________________
Isn't it nice when things just work?
За это сообщение автора поблагодарили: mazzy (2), Greggy (1), perestoronin (1).
Старый 27.09.2012, 11:08   #2  
imir is offline
imir
Участник
 
159 / 161 (6) ++++++
Регистрация: 28.05.2010
При наведении на Recid в обозревателе или отладчике система подсвечивает код, название элемента. По поводу инструментов - целых два отладчика теперь
Старый 27.09.2012, 13:09   #3  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
- динамического мета-программирования,

Там не так его много (кроме инициализации AccountungRules и т.д.) решается чтением кода инициализации и XML документации

- хардкодинга через макросы,

Такого вообще не видел - можно пример?

- суррогатных полей и связок по RecId.

Дебаггер расширен, показывает поля связей.

Еще есть проблема с получением данных из временных таблиц - я ее решаю логгированием.

Хотелось бы чтобы в вопросе были конкретные примеры.
За это сообщение автора поблагодарили: macklakov (1).
Старый 27.09.2012, 15:26   #4  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,486 / 408 (16) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Цитата:
Сообщение от belugin Посмотреть сообщение
Дебаггер расширен, показывает поля связей.
дебаггер - это хорошо
но есть таблицы (типа Dir*) набитые ссылочными полями с RecId. чтобы отфильтровать нужные данные, надо сначала руками найти, какие RecId соответствуют выборке. причём маску на фильтрации не применить
поэтому table browser действительно стал куда менее информативным.
__________________
С уважением,
Вячеслав
Старый 27.09.2012, 15:26   #5  
ivas is offline
ivas
Участник
Аватар для ivas
 
252 / 68 (3) ++++
Регистрация: 22.12.2005
"Не так страшен черт как его малюют."

Проблем с макросами не встречал, да и 4ке и 5ке они (макросы) были тот же #InventDimJoin.
Ссылки по RecId есть, но их не стало слишком много. В общем вполне терпимо, кроме тех мест где излишне нормализовали данные и логику например классы EcoRes*. Но ничего сверхъестественного, обычно для понимания хватает дебагера и перекрестных ссылок.

Самое неприятное в 2012 это глюки CIL, вот тут остается только надеяться, что подчистят в следующих сервиспаках.
__________________
aLL woRk aNd nO JoY MAKes jAck a dULL Boy
Старый 27.09.2012, 16:14   #6  
online
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
А что там с глюками CIL ?
Старый 27.09.2012, 16:47   #7  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2155 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
А кто-нибудь пробовал понять причину ошибки, например, при разноске накладной по закупке? Когда просто пишется, что счет ГК не найден, а посмотреть в коде можно только до вызова сервиса какого-то?
__________________
Ivanhoe as is..
Старый 27.09.2012, 17:06   #8  
imir is offline
imir
Участник
 
159 / 161 (6) ++++++
Регистрация: 28.05.2010
Тут целую книгу про сервисы в аксе выпускают http://www.ksaelen.be/wordpresses/dy...2012-services/

А серьезно - снимите галку "Выполнять бизнес-логику в CIL" в параметрах пользователя и облегчатся ваши искания в три с половиной раза. Сервис это просто класс, только выполняется в CIL.

Помимо CIL в 2012 есть еще чудесная технология - global cache - это прям черная дыра, поглощающая материю тут и выплевывающая антиматерию где-то там.
За это сообщение автора поблагодарили: mazzy (2), macklakov (1), Logger (4), kALVINS (3), Ivanhoe (3).
Старый 27.09.2012, 17:15   #9  
VORP is offline
VORP
Участник
Аватар для VORP
 
146 / 95 (4) ++++
Регистрация: 26.05.2006
Цитата:
осмотреть в коде можно только до вызова сервиса какого-то
Если всё же не хочется снимать галку по какой то причине, то можно приатачится к процессу Ax32Serv через Visual Studio, открыть файл \Server\ServerName\bin\XppIL\source поставить там брейкпойнт и дебажить.
За это сообщение автора поблагодарили: Ivanhoe (1).
Старый 27.09.2012, 17:59   #10  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2155 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Цитата:
Сообщение от VORP Посмотреть сообщение
Если всё же не хочется снимать галку по какой то причине, то можно приатачится к процессу Ax32Serv через Visual Studio, открыть файл \Server\ServerName\bin\XppIL\source поставить там брейкпойнт и дебажить.
Для глупых консультантов - что именно и как открыть надо? Подключится к сервису надо через пункт меню Debug? А дальше что?
__________________
Ivanhoe as is..
Старый 27.09.2012, 22:06   #11  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
2 Ivanhoe
Подробно и с картинками.

axdaily: Debugging managed code in AX 2012
emeadaxsupport: Debugging Services in AX 2012
ssmantha: Debugging .NET code called from X++ code in AX 2012
__________________
С уважением,
Олег.
За это сообщение автора поблагодарили: Logger (5), Ivanhoe (1).
Старый 27.09.2012, 23:25   #12  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2155 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Из чего делаю вывод, что для консультантов лучше старый способ и отключение выполнения CIL.
__________________
Ivanhoe as is..
Старый 28.09.2012, 04:31   #13  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,129 / 916 (35) +++++++
Регистрация: 03.04.2002
Цитата:
Сообщение от belugin Посмотреть сообщение
Такого вообще не видел - можно пример?
\Classes\AccDistFormViewProjectExtension\initializingView и прочие классы из семейства AccountingDistribution
__________________
Isn't it nice when things just work?
Старый 28.09.2012, 09:34   #14  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Я чо-то вообще там не вижу ничего, что бы выходило за пределы простых констант. Возможно код возник раньше чем появился \System Documentation\Functions\formControlStr

Последний раз редактировалось belugin; 28.09.2012 в 09:42.
Старый 28.09.2012, 10:12   #15  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,129 / 916 (35) +++++++
Регистрация: 03.04.2002
Цитата:
Сообщение от belugin Посмотреть сообщение
Я чо-то вообще там не вижу ничего, что бы выходило за пределы простых констант.
Да, синтаксически все правильно. С точки зрения C++ так даже кошерно. Но ведь на дворе не 80-е, аксапта подразумевает в несколько раз большую скорость разработки. А макросы это такой дополнительное препятствие на пути, который перепрыгнуть не очень сложно, но тормозит ощутимо.
Их и раньше было больше чем следует, но с 2012 стало еще хуже. Это ведь я показал только пример локального макроса. А еще и куча глобальных появилось. Причем совершенно безумных. К примеру:
#LedgerConsolidate заменитель обычного Enum
#SubledgerJournal и подобные явно созданы чтобы спрятать хардкод от контроля Best Practice
И конечно же старый но шедевральный #Characters. Из серии:"на зло маме отморожу уши"
__________________
Isn't it nice when things just work?

Последний раз редактировалось macklakov; 28.09.2012 в 10:33.
За это сообщение автора поблагодарили: ta_and (2), imir (1).
Старый 28.09.2012, 11:46   #16  
ivas is offline
ivas
Участник
Аватар для ivas
 
252 / 68 (3) ++++
Регистрация: 22.12.2005
Цитата:
Сообщение от imir Посмотреть сообщение
Тут целую книгу про сервисы в аксе выпускают http://www.ksaelen.be/wordpresses/dy...2012-services/

А серьезно - снимите галку "Выполнять бизнес-логику в CIL" в параметрах пользователя и облегчатся ваши искания в три с половиной раза. Сервис это просто класс, только выполняется в CIL.

Помимо CIL в 2012 есть еще чудесная технология - global cache - это прям черная дыра, поглощающая материю тут и выплевывающая антиматерию где-то там.
Проблемы возникают там где эту галку снять нельзя)
__________________
aLL woRk aNd nO JoY MAKes jAck a dULL Boy
Старый 28.09.2012, 11:59   #17  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
>>> #LedgerConsolidate заменитель обычного Enum

По моему в таких случаях макросы используют постоянно (для индексов в контейнерах) - я даже не помню где использзуют энамы. Для энамов надо заполонить кучу свойств связанных с UI, чключая метки. К тому же результат будет менее нагляден (в случае макросов мы сразу видим какому значению соответствует какая позиция, в случае энамов придется лазит по аждому значению)

Про остальные, согласен, что не очень хорошо, но не согласен, что это сильно затрудняет понимание
Старый 28.09.2012, 12:14   #18  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2155 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Цитата:
Сообщение от ivas Посмотреть сообщение
Проблемы возникают там где эту галку снять нельзя)
Подробности будут?
__________________
Ivanhoe as is..
Старый 28.09.2012, 15:35   #19  
ivas is offline
ivas
Участник
Аватар для ivas
 
252 / 68 (3) ++++
Регистрация: 22.12.2005
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Подробности будут?
Пакетные задания, которые выполняются на сервере, работают на CIL коде.
__________________
aLL woRk aNd nO JoY MAKes jAck a dULL Boy
Старый 28.09.2012, 16:26   #20  
imir is offline
imir
Участник
 
159 / 161 (6) ++++++
Регистрация: 28.05.2010
Цитата:
Сообщение от ivas Посмотреть сообщение
Пакетные задания, которые выполняются на сервере, работают на CIL коде.
Для отладки можно и не в пакете запустить то же задание.

Явно и всегда в CIL выполняется код, потребляемый порталом, репортингом, воркфлоу(?), благо пока это все не юзается активно.

Кстати, CIL еще надо пересобирать отдельно, иначе в CIL код будет старый, что может приводить к интересным последствиям, при этом:

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

If you hold back anything, I'll kill ya. If you bend the truth or I think you're bending the truth, I'll kill ya. If you forget anything, I'll kill ya. In fact, you're gonna have to work very hard to stay alive, Nick. Now do you understand everything I've said? Because if you don't, I'll kill ya. (Lock, Stock, and Two Smoking Barrels(С))

ЗЫ CIL-у тем не менее - лучей добра, некоторые алгоритмы отнего сильно выигрывают, а некоторые технологи без него не могут в принципе

Последний раз редактировалось imir; 28.09.2012 в 16:36.
Теги
ax2012, cil, debug, debug code, debug managed code, отладка, отладчик

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
ax-erp: Creating SSRS-Reports in Dynamics AX 2012 – What’s no longer possible in AX-reports Blog bot DAX Blogs 0 18.07.2012 12:11
dynamicsaxtraining: Purchase Blog bot DAX Blogs 0 11.03.2012 05:25
emeadaxsupport: New Content for Microsoft Dynamics AX 2012 : October 2011 Blog bot DAX Blogs 0 27.10.2011 17:11
axinthefield: Dynamics AX Event IDs Blog bot DAX Blogs 0 01.03.2011 22:11
daxdilip: Whats New in Dynamics AX 2012 (A brief extract from the recently held Tech Conf.) Blog bot DAX Blogs 7 31.01.2011 12:35

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

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

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