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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.06.2017, 00:32   #10  
skuull is offline
skuull
Участник
Most Valuable Professional
Лучший по профессии 2014
 
700 / 752 (27) +++++++
Регистрация: 08.03.2013
Адрес: ХЗ
Цитата:
Сообщение от mazzy Посмотреть сообщение
какая потребность есть у людей в Аксапте:
= изменить или добавить функционал, который могут использовать пользователи
== пользователи работают с функционалом через menuItem
== menuItem вызывает классы через статический метод main (menuItem также используются для вызова форм)
== права доступа к функционалу Аксапты настраивается через menuItem

Вызывать класс напрямую вообще говоря моветон в Аксапте (хоть МС делает это сплошь и рядом в стандартном функционале, сволочи)
Если вызывать напрямую, то нужно запрограммировать закат солнца вручную чтобы учесть настроенные права.
Функционал аксапты можно и должно вызывать через menuItem.

что делает МС, чтобы удовлетворить потребность людей?
никакого сахара для работы с инфраструктурой аксапты
минимализм и совершенно перпендикулярная остальной инфраструктуре технология атрибутов
Есть частные случаи когда МС о нас подумала (ну или так случайно вышло), вот конкретный пример.
Есть станадртный класс BankDepositSlip у которого нет наследников но он помечен
X++:
[Microsoft.Dynamics.AX.Platform.Extensibility.ExportInterfaceAttribute,
System.ComponentModel.Composition.ExportMetadataAttribute('BankCreateDepositSlip', 'BankDepositSlip'),
System.ComponentModel.Composition.ExportAttribute('Dynamics.AX.Application.BankDepositSlip')]
В main берется parm() из menuItem'а
X++:
public static void main(Args args)
    {
        BankDepositSlip instance;

        if (args && args.record())
        {
            instance = BankDepositSlip::construct(args.record(), args.parm());

            if (instance.prompt())
            {
                instance.runOperation();
            }
        }
    }

 protected static BankDepositSlip construct(LedgerJournalTrans _ledgerJournalTrans, str _variationName = 'BankDepositSlip')
    {
        BankDepositSlip instance;

        SysPluginMetadataCollection meta = new SysPluginMetadataCollection();
        meta.SetManagedValue('BankCreateDepositSlip', _variationName);
        instance = SysPluginFactory::Instance('Dynamics.AX.Application', classstr(BankDepositSlip), meta);
        
        Debug::assert(instance != null);

        instance.initInstance(_ledgerJournalTrans);

        return instance;
    }
И чтобы расширить это мне было достаточно
а) создать наследник пометив его другим атрибутом
б) создать новый menuItem с новым параметром.
Не все так плохо как хотелось бы
За это сообщение автора поблагодарили: mazzy (2), sukhanchik (4), Ace of Database (2).
Теги
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, время: 21:56.