14.03.2017, 22:10 | #1 |
Участник
|
Создание классов из кода.
Столкнулся с задачей генерации классов из кода.
Посмотрел примеры, в том числе в стандартном коде. В связи с этим вопросы: 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 |
Участник
|
хороший вопрос. тоже интересно
могу ответить только на это: Цитата:
AOTrefresh() перечитывает составной объект из АОТ AOTRestore(true) перечитывает и сам объект, и объекты из которых он состоит и обновляет автогруппы. например, есть форма. форма использует датасорс. у датасорса есть группы полей на форму выведена группа полей со свойством autogroup=yes. AOTRestore(true) перечитает и форму, и таблицу, обновит список групп полей, обновит группу полей на форме. В результате форма может измениться даже если в сам объект изменения не вносились. то же самое во всех query, view, datasource, где установлено свойство dynamic field = yes. и так далее. |
|
|
За это сообщение автора поблагодарили: Logger (5). |
14.03.2017, 23:42 | #3 |
Участник
|
По п.1 - разницы похоже нет.
Сделал вариант когда сперва save затем compile - нормально работает. Оставил его, так как так логичнее. Хотя все равно свербит, зачем для генерации ax классов в стандарте сделали наоборот. И в ISV решении от партнера также сделано. Странно. Неужели ошибка. Или я просто чего-то не понимаю. Последний раз редактировалось Logger; 14.03.2017 в 23:44. |
|
15.03.2017, 00:33 | #4 |
Участник
|
Разве когда начинаешь компилировать оно не сохраняет автоматом?
Скорее всего это объясняет почему работает и так и так Обратите внимания что это будет недоступна в АХ 7 - в рантайм |
|
|
За это сообщение автора поблагодарили: Logger (3). |
15.03.2017, 10:51 | #5 |
Участник
|
Что именно будет недоступно? Нельзя создавать классы из кода? Product Builder идет лесом?
__________________
Ivanhoe as is.. |
|
15.03.2017, 11:03 | #6 |
Участник
|
|
|
15.03.2017, 11:04 | #7 |
Участник
|
не дождетесь )
сейчас там stage таблицы не генерируются динамически. и слава богу. |
|
15.03.2017, 11:06 | #8 |
Участник
|
Цитата:
Идея то популярная. Я генерацию тоже пишу для целей импорта и экспорта данных. Получается, что у разных людей независимо возникли похожие идея по реализации. |
|
15.03.2017, 11:22 | #9 |
Участник
|
|
|
15.03.2017, 11:38 | #10 |
Участник
|
Цитата:
Ребяты, не надо, не пишите динамическую генерацию кода и схему данных! Пожалуйста. Вспомните табель в русской зарплате. стоило часть работ сделать в одном слое (например, в USR), а другую часть работ в другом слое (USP)... так все накрывалось медным тазом - система не могла динамически изменить объекты, созданные в другом слое. проверки и компиляция тоже уходит в ран-тайм. а главное - в ран-тайм уходит отладка. там ее на порядок сложнее вести. в итоге, преимущества динамической разработки не так уж и велики. это только поначалу кажется, что некто расставит галочки и оно само заработает. если уж так свербит сделать меганастраиваемое, то лучше заложите в статическую структуру максимально возможный вариант, а динамически только выключайте видимость/доступность. Последний раз редактировалось mazzy; 15.03.2017 в 13:37. |
|
|
За это сообщение автора поблагодарили: Ivanhoe (5). |
15.03.2017, 13:00 | #11 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: mazzy (2). |
15.03.2017, 13:04 | #12 |
Участник
|
классы кстати по прежнему генерятся, только при компиляции дата ентити. в АОТ они не видны, расположены в папке
J:\AosService\PackagesLocalDirectory\ApplicationSuite\bin\GeneratedXppSource имеют названия DataEntityView_AgingPeriodDefinitionEntity+__Persister__.xpp и т.п. |
|
|
За это сообщение автора поблагодарили: Logger (1), AlGol (1). |
15.03.2017, 13:27 | #13 |
Участник
|
|
|
15.03.2017, 13:37 | #14 |
Участник
|
Цитата:
конечно, схему данных, а не данных. я неправильно написал. извините. исправил. |
|
15.03.2017, 13:39 | #15 |
Участник
|
Цитата:
Вот именно так и не делайте. |
|
15.03.2017, 13:50 | #16 |
Участник
|
|
|
15.03.2017, 14:32 | #17 |
Участник
|
а... в таком ключе я не думал...
у нас свободная страна и делать можно как угодно, конечно. просто огребете те же проблемы ))) |
|
16.03.2017, 07:58 | #18 |
Участник
|
В направлении ускорения разработки очень даже полезная штука. Можно, допустим, наследника RunBase по-быстрому забабахать. Включил галочки, задал поля для диалога и класс готов!
__________________
// no comments |
|
16.03.2017, 10:42 | #19 |
Участник
|
Речь не идет об утилитах для разработки. Имеются ввиду ситуации, когда какие-то объекты создаются/модифицируются при работе пользователей, при настройке каких-то алгоритмов и т.п.
|
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|