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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.03.2017, 22:10   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
? Создание классов из кода.
Столкнулся с задачей генерации классов из кода.
Посмотрел примеры, в том числе в стандартном коде.

В связи с этим вопросы:
1. Во многих местах в коде стоит сперва Treenode.AOTcompile() а потом Treenode.AOTsave
(примеры
\Classes\AxGenerateAxBCClass\generate
\Classes\AxGenerateAxdClass\generate
\Classes\AifClassGeneratorBase\compileAndSave

Хотя по логике надо наоборот делать. Сперва сохранять, а потом компилировать.
И такие примеры тоже есть
\Classes\SysClassWizard\run
(Хотя в последнем примере в одном и том же методе и так и сяк делается. Интересно, зачем ? или это пляски с бубном чтобы нормально откомпилировались статические методы типа main ? - Они с первой компиляции могут не видеть run() pack() unpack() методы)

Так как же все-таки правильно делать ?

2. В коде встречаются вызовы AOTrefresh() и AOTRestore(true) после компиляции. Причем AOTrestore() - намного реже. В чем разница и зачем их вызывают ? прочистка кешей ? А что будет если пропустить их вызов ? Чем рискуем ?
Старый 14.03.2017, 23:22   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
хороший вопрос. тоже интересно

могу ответить только на это:
Цитата:
Сообщение от Logger Посмотреть сообщение
2. В коде встречаются вызовы AOTrefresh() и AOTRestore(true) после компиляции. Причем AOTrestore() - намного реже. В чем разница и зачем их вызывают ? прочистка кешей ? А что будет если пропустить их вызов ? Чем рискуем ?
в составных объектах есть автогруппы и автоопределение полей.
AOTrefresh() перечитывает составной объект из АОТ
AOTRestore(true) перечитывает и сам объект, и объекты из которых он состоит и обновляет автогруппы.

например, есть форма.
форма использует датасорс.
у датасорса есть группы полей
на форму выведена группа полей со свойством autogroup=yes.

AOTRestore(true) перечитает и форму, и таблицу, обновит список групп полей, обновит группу полей на форме.
В результате форма может измениться даже если в сам объект изменения не вносились.

то же самое во всех query, view, datasource, где установлено свойство dynamic field = yes.

и так далее.
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: Logger (5).
Старый 14.03.2017, 23:42   #3  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
По п.1 - разницы похоже нет.
Сделал вариант когда сперва save затем compile - нормально работает. Оставил его, так как так логичнее.
Хотя все равно свербит, зачем для генерации ax классов в стандарте сделали наоборот. И в ISV решении от партнера также сделано. Странно. Неужели ошибка. Или я просто чего-то не понимаю.

Последний раз редактировалось Logger; 14.03.2017 в 23:44.
Старый 15.03.2017, 00:33   #4  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Разве когда начинаешь компилировать оно не сохраняет автоматом?
Скорее всего это объясняет почему работает и так и так

Обратите внимания что это будет недоступна в АХ 7 - в рантайм
За это сообщение автора поблагодарили: Logger (3).
Старый 15.03.2017, 10:51   #5  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Разве когда начинаешь компилировать оно не сохраняет автоматом?
Скорее всего это объясняет почему работает и так и так

Обратите внимания что это будет недоступна в АХ 7 - в рантайм
Что именно будет недоступно? Нельзя создавать классы из кода? Product Builder идет лесом?
__________________
Ivanhoe as is..
Старый 15.03.2017, 11:03   #6  
bio_unit is offline
bio_unit
Участник
Аватар для bio_unit
Сотрудники компании GMCS
Ex AND Project
 
119 / 77 (3) ++++
Регистрация: 21.04.2004
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Что именно будет недоступно? Нельзя создавать классы из кода? Product Builder идет лесом?
Кстати, в модуле Retail транспорт Async синхронизации тоже основан на динамической генерации временных таблиц и классов из кода в DAX.
Retail, походу, тоже идет лесом...
Старый 15.03.2017, 11:04   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от bio_unit Посмотреть сообщение
Retail, походу, тоже идет лесом...
не дождетесь )

сейчас там stage таблицы не генерируются динамически.
и слава богу.
__________________
полезное на axForum, github, vk, coub.
Старый 15.03.2017, 11:06   #8  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от bio_unit Посмотреть сообщение
Кстати, в модуле Retail транспорт Async синхронизации тоже основан на динамической генерации временных таблиц и классов из кода в DAX.
Retail, походу, тоже идет лесом...
Ого !
Идея то популярная.
Я генерацию тоже пишу для целей импорта и экспорта данных. Получается, что у разных людей независимо возникли похожие идея по реализации.
Старый 15.03.2017, 11:22   #9  
bio_unit is offline
bio_unit
Участник
Аватар для bio_unit
Сотрудники компании GMCS
Ex AND Project
 
119 / 77 (3) ++++
Регистрация: 21.04.2004
Цитата:
Сообщение от mazzy Посмотреть сообщение
сейчас там stage таблицы не генерируются динамически.
и слава богу.
там же не только stage таблицы генерировались динамически, но и сами классы выгрузки пакета с данными из DAX
Старый 15.03.2017, 11:38   #10  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от bio_unit Посмотреть сообщение
там же не только stage таблицы генерировались динамически, но и сами классы выгрузки пакета с данными из DAX
вместо классов объекты нового типа - dataEntity.

Ребяты, не надо, не пишите динамическую генерацию кода и схему данных!
Пожалуйста.

Вспомните табель в русской зарплате.
стоило часть работ сделать в одном слое (например, в USR), а другую часть работ в другом слое (USP)... так все накрывалось медным тазом - система не могла динамически изменить объекты, созданные в другом слое.

проверки и компиляция тоже уходит в ран-тайм.
а главное - в ран-тайм уходит отладка. там ее на порядок сложнее вести.

в итоге, преимущества динамической разработки не так уж и велики.
это только поначалу кажется, что некто расставит галочки и оно само заработает.

если уж так свербит сделать меганастраиваемое,
то лучше заложите в статическую структуру максимально возможный вариант, а динамически только выключайте видимость/доступность.
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 15.03.2017 в 13:37.
За это сообщение автора поблагодарили: Ivanhoe (5).
Старый 15.03.2017, 13:00   #11  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от mazzy Посмотреть сообщение
Ребяты, не надо, не пишите динамическую генерацию кода и данных!
Пожалуйста.
А данные почему нельзя генерировать? А что тогда программа вообще будет делать?
За это сообщение автора поблагодарили: mazzy (2).
Старый 15.03.2017, 13:04   #12  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1633 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Цитата:
Сообщение от mazzy Посмотреть сообщение
вместо классов объекты нового типа - dataEntity.
классы кстати по прежнему генерятся, только при компиляции дата ентити. в АОТ они не видны, расположены в папке
J:\AosService\PackagesLocalDirectory\ApplicationSuite\bin\GeneratedXppSource
имеют названия
DataEntityView_AgingPeriodDefinitionEntity+__Persister__.xpp и т.п.
За это сообщение автора поблагодарили: Logger (1), AlGol (1).
Старый 15.03.2017, 13:27   #13  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от trud Посмотреть сообщение
классы кстати по прежнему генерятся, только при компиляции дата ентити. в АОТ они не видны, расположены в папке
Это в Ax7 ?
Старый 15.03.2017, 13:37   #14  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
А данные почему нельзя генерировать? А что тогда программа вообще будет делать?
да, конечно!
конечно, схему данных, а не данных.
я неправильно написал. извините. исправил.
__________________
полезное на axForum, github, vk, coub.
Старый 15.03.2017, 13:39   #15  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от trud Посмотреть сообщение
классы кстати по прежнему генерятся, только при компиляции дата ентити. в АОТ они не видны, расположены в папке
Угу-угу.
Вот именно так и не делайте.
__________________
полезное на axForum, github, vk, coub.
Старый 15.03.2017, 13:50   #16  
bio_unit is offline
bio_unit
Участник
Аватар для bio_unit
Сотрудники компании GMCS
Ex AND Project
 
119 / 77 (3) ++++
Регистрация: 21.04.2004
Цитата:
Сообщение от mazzy Посмотреть сообщение
Угу-угу.
Вот именно так и не делайте.
Типа "Что дозволено Юпитеру, то не дозволено быку"?
Если великий Майкрософт так делает, то почему простым смертным так же не делать?
Старый 15.03.2017, 14:32   #17  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
а... в таком ключе я не думал...

у нас свободная страна и делать можно как угодно, конечно.
просто огребете те же проблемы )))
__________________
полезное на axForum, github, vk, coub.
Старый 16.03.2017, 07:58   #18  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
В направлении ускорения разработки очень даже полезная штука. Можно, допустим, наследника RunBase по-быстрому забабахать. Включил галочки, задал поля для диалога и класс готов!
__________________
// no comments
Старый 16.03.2017, 10:42   #19  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Речь не идет об утилитах для разработки. Имеются ввиду ситуации, когда какие-то объекты создаются/модифицируются при работе пользователей, при настройке каких-то алгоритмов и т.п.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
DAX2009 аналог friend классов. Как сделать? Raven Melancholic DAX: Программирование 9 07.11.2015 23:50
Изменения Свойств поля из кода, при создание отчета АртемМелихов DAX: Программирование 2 04.02.2014 20:34
Небольшой тюнинг редактора кода AX2012 kart DAX: Программирование 6 22.02.2013 17:21
Создание классов программно Beast-L DAX: Программирование 8 22.11.2006 13:40
проблема с настройкой штрихового кода Nic DAX: Функционал 4 27.12.2004 09:04
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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