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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 31.05.2017, 16:03   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
например, вот такой проектик.
собрал на коленке по-старому пока билдится этот ритейл, блин.

заодно узнал, что новая аксапта пиливать хотела на параметры menuItem, если menuItem сделать стартовым объектом. пришлось сделать класс starterJob.

С другой стороны, показал, как запускать через menuItem ))))

==============================
состав проекта:
С starterJob и объекты суффиксом MST - новые.
остальные переопределенные

думаю, тем у кого нет акс7, скриншотов хватит.
чтобы увидеть исходные тексты без аксапты, скачайте aa.axpp, измените расширение на .zip и посмотрите в содержимое.

==============================
Disclimer:
проектик безумен ровно настолько, насколько безумен исходный текст семейства классов.
У нормальных людей есть нормальные обвязки для args, параметров, запускачей и прочее.
но и такие безумные поделки приходится развивать-поддерживать на проектах.
Миниатюры
Нажмите на изображение для увеличения
Название: 02.PNG
Просмотров: 288
Размер:	46.1 Кб
ID:	11449   Нажмите на изображение для увеличения
Название: 03.PNG
Просмотров: 325
Размер:	108.8 Кб
ID:	11450  

Нажмите на изображение для увеличения
Название: 04.PNG
Просмотров: 297
Размер:	131.8 Кб
ID:	11451   Нажмите на изображение для увеличения
Название: 05.PNG
Просмотров: 271
Размер:	20.8 Кб
ID:	11452  

Нажмите на изображение для увеличения
Название: 11.PNG
Просмотров: 292
Размер:	41.7 Кб
ID:	11453   Нажмите на изображение для увеличения
Название: 12.PNG
Просмотров: 255
Размер:	39.8 Кб
ID:	11454  

Нажмите на изображение для увеличения
Название: 99.PNG
Просмотров: 281
Размер:	9.9 Кб
ID:	11455  
Изображения
 
Вложения
Тип файла: axpp aa.axpp (9.1 Кб, 83 просмотров)
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 31.05.2017 в 16:07.
За это сообщение автора поблагодарили: sukhanchik (4).
Старый 31.05.2017, 20:02   #2  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от mazzy Посмотреть сообщение
например, вот такой проектик.
Хороший проектик. Тут вопрос такой. В том что ты сделал: если задать сочетание 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).
Старый 01.06.2017, 19:32   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Эпиграф 1:
- Перебилдь
- Сам ты Перебилдь

Эпиграф 2:
Пока течет мой любимый кетчуп билдится мой любимый Retail...


для начала ссылка на прошлый проект с традиционными construct:
Цитата:
Сообщение от mazzy Посмотреть сообщение
например, вот такой проектик.
собрал на коленке по-старому пока билдится этот ритейл, блин.
...

==============================
состав проекта:

==============================
Disclimer:
...
теперь новый проект на атрибутах.
как и в прошлом проекте, я постарался сделать качественно и кратко настолько насколько это возможно. но при этом использовать только штатные средства, которые входят в текущую поставку.

время на этом проекте конечно не показатель, поскольку сейчас много куда смотреть пришлось. но занимался я им 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 - да, если писать правильно, то перекрестные ссылки есть
Миниатюры
Нажмите на изображение для увеличения
Название: 01.PNG
Просмотров: 287
Размер:	92.2 Кб
ID:	11461   Нажмите на изображение для увеличения
Название: 02.PNG
Просмотров: 241
Размер:	99.8 Кб
ID:	11462  

Нажмите на изображение для увеличения
Название: 03.PNG
Просмотров: 297
Размер:	80.7 Кб
ID:	11463   Нажмите на изображение для увеличения
Название: 04.PNG
Просмотров: 251
Размер:	62.7 Кб
ID:	11464  

Нажмите на изображение для увеличения
Название: 05.PNG
Просмотров: 230
Размер:	28.2 Кб
ID:	11465   Нажмите на изображение для увеличения
Название: 06.PNG
Просмотров: 280
Размер:	116.4 Кб
ID:	11466  

Нажмите на изображение для увеличения
Название: 07.PNG
Просмотров: 211
Размер:	52.4 Кб
ID:	11467  
Вложения
Тип файла: axpp bb.axpp (9.6 Кб, 83 просмотров)
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 01.06.2017 в 19:44.
За это сообщение автора поблагодарили: ax_mct (9), sukhanchik (10), macklakov (10), Logger (3).
Старый 01.06.2017, 20:15   #4  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Не получится.
Передаем параметром в new ассоциативный массив, то же Map [имя переменной - key, ее значение - value]. Учим корень типа Object это парсировать.
Альтернативно передаем ключом внешнее имя переменной, mapping держим в ИмяКласса.xml.
Патентуем и подаем на Нобелевскую Премию.

Цитата:
Сообщение от mazzy Посмотреть сообщение
теперь новый проект на атрибутах.
Снимаю шляпу.
Но на лабутенах!!!
Теги
sysextension framework, sysoperation framework, как правильно, полезное

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
stephenmann: Technical History of Dynamics AX - From Axapta 3.0 to AX2012 Blog bot DAX Blogs 5 03.03.2017 10:22
dynamicsax-fico: Invoice search AX2012 vs. AX7 (Part 2) Blog bot DAX Blogs 0 01.04.2016 10:11
DAX2009 аналог friend классов. Как сделать? Raven Melancholic DAX: Программирование 9 07.11.2015 23:50
emeadaxsupport: Inventory closing differences between AX4.0 and AX2012 using weighted average costing method Blog bot DAX Blogs 0 27.12.2012 19:11
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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