|
![]() |
#1 |
Участник
|
например, вот такой проектик.
собрал на коленке по-старому пока билдится этот ритейл, блин. заодно узнал, что новая аксапта пиливать хотела на параметры menuItem, если menuItem сделать стартовым объектом. пришлось сделать класс starterJob. С другой стороны, показал, как запускать через menuItem )))) ============================== состав проекта: С starterJob и объекты суффиксом MST - новые. остальные переопределенные думаю, тем у кого нет акс7, скриншотов хватит. чтобы увидеть исходные тексты без аксапты, скачайте aa.axpp, измените расширение на .zip и посмотрите в содержимое. ============================== Disclimer: проектик безумен ровно настолько, насколько безумен исходный текст семейства классов. У нормальных людей есть нормальные обвязки для args, параметров, запускачей и прочее. но и такие безумные поделки приходится развивать-поддерживать на проектах. Последний раз редактировалось mazzy; 31.05.2017 в 16:07. |
|
|
За это сообщение автора поблагодарили: sukhanchik (4). |
![]() |
#2 |
Участник
|
Хороший проектик. Тут вопрос такой. В том что ты сделал: если задать сочетание Vend и MST это правильно что он молча это понимает и не ругается? Если допустимо, чтобы он ругался на такое сочетание. То для расширения черех SysExt надо пометить атрибутом новый класс. Типа
X++: [CustVendSettlerKey(Module::Cust, #MSTKEY)] clas MyNewSettler ... X++: class CustVendSettlerKeyAttribute extends SysAttribute implements SysExtensionIAttribute { Module module; str mode; public void new(Module _module, str _mode = '') { module = _module; mode = _mode; } public str parmCacheKey() { return [ classStr(CustVendSettlerKeyAttribute), module, mode] ; } public boolean useSingleton() { return false; } X++: SysExtensionAppClassFactory::getClassFromSysAttribute(classStr( ), new CustVendSettlerKeyAttribute(_module, _mode)); |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#3 |
Участник
|
Эпиграф 1:
- Перебилдь - Сам ты Перебилдь Эпиграф 2: Пока для начала ссылка на прошлый проект с традиционными construct: Цитата:
как и в прошлом проекте, я постарался сделать качественно и кратко настолько насколько это возможно. но при этом использовать только штатные средства, которые входят в текущую поставку. время на этом проекте конечно не показатель, поскольку сейчас много куда смотреть пришлось. но занимался я им 4-5 перебилдов и пару передеплоев ритейла - часа 4. следующие подобные проекты можно выполнять за те же 10-15 минут. логика поведения Аксаптовских объектов вывернута наизнанку. Например, стандартно menuItem указывает на объект. А в фреймворке наоборот, к объекту привязывается menuItem, а в menuItem указыается клаcc запускач. И так во всем фреймворке. да, я сейчас написал так, что перекрестные ссылки на все объекты есть. но и их логика вывернута. да, очень велика вероятность того, что вместо classstr, menuItemActionStr программисты будут тупо использовать простые строки и перекрестных ссылок не будет в принципе. да, всегда остается возможность поиска подстроки с названием объекта... но очень боюсь, что и они будут составными и ненаходимыми. ну, и, конечно, все ушло в рантайм. конечно, да, рантайм дает позднее связывание. но контроль на этапе компиляции - это контроль на этапе компиляции. и сообщения в рантайм "неправильное использование функции" без информации какие именно аргументы были у этой функции - это прекрасно! и вы будете ржать, то однажды выполнившись на АОС, атрибут-класс кэшируется, если код изменить неправильно (неуникальное или несуществующее значение артрибута, например) то оно будет выполнять исходя из закешированных значений атрибутов. или я полностью не понимаю происходящее. но уверен, что ЭТО прекрасно! и пока совершенно не понимаю, как ЭТО покрывать тестами. и пока не могу найти примеров в существующем коде, чтобы ЭТО было покрыто тестами. надо подумать. ============================= суть проекта: main() перенесен в отдельный класс-запускач. логика всех конструкторов размазана по атрибутам и main() в запускаче. у классов потомков проставлены атрибуты, привязанные к menuItem для всех запускаемых классов есть свой menuItem все релевантные menuItem переброшены на класс-запускач ============================= кажется, что логика запуска стала проще. но это только потому что это такая безумная реализация в данном примере - обычно никто не делает переключение логики при помощи parm в меню итеме. обычно, логика запуска класса должна быть более изощренна. следовательно, будет более запутана - часть в атрибутах, часть в коде, который готовит ключи на основании параметров, датасорсов и caller... опять же - получается совершенно вывернутая логика. раньше логика запуска была размазана по конструкторам - каждый отвечал за свой уровень в иерархии. теперь логика запуска размазана по атрибутам и одновременно сконцентрирована в main(). я пока не очень понимаю что будет если разные партнеры расширят семейство классов каждый по своему, а потом заказчик должен будет эти расширения объединить в одном main. возможно, можно как-то комбинировать стратегии. =============================== ну, и строка-ключ с позиционными данными и с разделителем ; это пипец, товарищи. =============================== на скриншотах циферки: 1. нужно указывать базовый класс 2. нужно делать cast. для этого нужно знать к какому базовому классу кастить. в семействе может быть несколько базовых с разной логикой. см FormLetter. 3. перекрестные ссылки с базового класса CustVendAutoDialog_RU - да, если писать правильно, то перекрестные ссылки есть Последний раз редактировалось mazzy; 01.06.2017 в 19:44. |
|
|
За это сообщение автора поблагодарили: ax_mct (9), sukhanchik (10), macklakov (10), Logger (3). |
![]() |
#4 |
Banned
|
Передаем параметром в new ассоциативный массив, то же Map [имя переменной - key, ее значение - value]. Учим корень типа Object это парсировать.
Альтернативно передаем ключом внешнее имя переменной, mapping держим в ИмяКласса.xml. Патентуем и подаем на Нобелевскую Премию. Снимаю шляпу. Но на лабутенах!!! |
|
Теги |
sysextension framework, sysoperation framework, как правильно, полезное |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|