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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.06.2013, 14:27   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,987 / 3273 (117) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Хотелось бы еще получше понимать как теперь с помощью нового инструмента простым способом
реализовать такое :
Цитата:
Ну раньше можно было легко сделать такой финт - в конструкторе сделать вставку чтобы в зависимости от каких-то условий (например от параметров в настроечной табличке), сгенерить другого наследника. Поведение системы менялось, но мы не трогали кучу мест вызывающих конструктор. От пользователей класса это было скрыто.
Старый 19.06.2013, 14:55   #2  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Описанная ситуация - это проектная заплатка, костылик для поддержки изменений, возникших уже после продумывания общей архитектуры и реализации решения. Очевидно, разработчики стандартного приложения (где теперь все не пишется, а сплошь моделируется, определяются шаблоны и т.п.) не станут предлагать механизм для облегчения прикручивания костыликов.
Старый 19.06.2013, 15:51   #3  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от Logger Посмотреть сообщение
Хотелось бы еще получше понимать как теперь с помощью нового инструмента простым способом
реализовать такое :
- во-первых, можно откатиться к construct и добавить post- event для своего случая
- во-вторых, можно закодировать условие в значение атрибута
- в-третьих, посмотрите на ту надстройку, которая используется в templateprovider_ru - оно поддерживает иерархические атрибуты и условия
За это сообщение автора поблагодарили: Logger (3).
Старый 18.12.2014, 04:02   #4  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,347 / 996 (38) +++++++
Регистрация: 03.04.2002
Цитата:
Сообщение от belugin Посмотреть сообщение
- в-третьих, посмотрите на ту надстройку, которая используется в templateprovider_ru - оно поддерживает иерархические атрибуты и условия
Можешь для тупых объяснить, что за хитрая магия в этом классе упрятана? В R3 я вижу один абстрактный класс с одним единственным наследником. Если верить коду, то достаточно было одного static метода, который по строчному параметру ищет ссылки на файлы. Смысл в этом всем?
Вот в BankReconciliationMatchingMatchProcessor.constructMatch смысл ясен. Ребята игрались с toolbox, пробовали все, что под руку попалось. В результате получился конструктор для вызова конструктора, который вызывает фреймворк.
__________________
Isn't it nice when things just work?
Старый 18.12.2014, 06:30   #5  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от macklakov Посмотреть сообщение
Можешь для тупых объяснить, что за хитрая магия в этом классе упрятана? В R3 я вижу один абстрактный класс с одним единственным наследником..
Когда я переводил отчеты с файловой шары на ресурсы, у меня закралось подозрение, что кто-то, возможно, захочет поменять это дело обратно для каких-то отчетов или реализовать какое-то свое хранилище шаблонов (например, на http server) чтобы дать power users возможность их редактирования без правки aot.

Для того чтобы было легко, не меняя сами отчеты перекрыть для них это хранилище так и сделано. Вторая реализация есть, но она используется для тестирования внутри ms.
Старый 18.12.2014, 07:05   #6  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,347 / 996 (38) +++++++
Регистрация: 03.04.2002
Цитата:
Сообщение от belugin Посмотреть сообщение
Вторая реализация есть, но она используется для тестирования внутри ms.
А как переключение между наследниками происходит? Ну вот предположим захотел я использовать эту внутреннюю, ms-овскую, реализацию.
__________________
Isn't it nice when things just work?
Старый 18.12.2014, 08:46   #7  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
1. Декларируем для какого класса объектов применим провайдер - при помощи SysClassNameAttribute (например, у отчетов по ОС общий предок, можно сказать, что для всех отчетов по ОС брать шаблоны, допустим, из папки)
2. Если надо вычислять условия применения в рантайме, имплементим SysIConditionalExtension и перекрываем isApplicableTo
3. Если для данного объекта есть несколько расширений, то провайдер для более конкретного класса предпочитается провайдеру для более общего, провайдет который реализует SysIConditionalExtension предпочитается тому, который не имплементит.

см XML документацию для SysGeneralizableExtensionAppFactory

Тестовый провайдер обслуживает все объекты:

X++:
[SysClassNameAttribute(classStr(Object))]
class AOTResourceTemplateProviderTestHelper_RU extends AOTResourceTemplateProvider_RU
implements SysIConditionalExtension
{
Но применим только если мы
1. выполняем юнит тест
2. Включили в тесте параметр

X++:
 /// <summary>
    /// Returns whether an extension can be applied in current conditions
    /// </summary>
    /// <param name="_value">
    /// Parameter that specifies extension context
    /// </param>
    /// <returns>
    /// true, if the extension can be applied; otherwise, false.
    /// </returns>
    boolean isApplicableTo(AnyType _value)
    {
        #localMacro.runningUnitTestsClient
        '(C)\\Classes\\SysTestSuite\\run'
        #endmacro
        #localMacro.runningUnitTestsServer
        '(s)\\Classes\\SysTestSuite\\run'
        #endmacro

        container callStack;

        if (_value && typeOf(_value) == Types::Class)
        {
            callStack = xSession::xppCallStack();

            if (conFind(callStack, #runningUnitTestsClient) ||
                conFind(callStack, #runningUnitTestsServer))
            {
                return AOTResourceTemplateProviderTestHelper_RU::applicable();
            }
        }

        return false;
    }
public static boolean applicable(boolean _applicable = true)
    {
        SysGlobalCache cache = classfactory.globalCache();
        boolean        applicable;

        if (prmisDefault(_applicable))
        {
            if (cache.isSet(#CacheScopeKeyApplicable))
            {
                applicable = cache.get(#CacheScopeKeyApplicable);
            }
            else
            {
                applicable = true;
            }
        }
        else
        {
            applicable = _applicable;
            cache.set(#CacheScopeKeyApplicable, applicable);
        }

        return applicable;
    }
За это сообщение автора поблагодарили: macklakov (5), trud (3), gl00mie (5), wojzeh (8).
Старый 18.12.2014, 09:14   #8  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,347 / 996 (38) +++++++
Регистрация: 03.04.2002
Цитата:
Сообщение от belugin Посмотреть сообщение
см XML документацию для SysGeneralizableExtensionAppFactory
Где ее найти можно?
Цитата:
Сообщение от belugin Посмотреть сообщение
Если надо вычислять условия применения в рантайме, имплементим SysIConditionalExtension и перекрываем isApplicableTo
Вот этого не знал. Спасибо.
__________________
Isn't it nice when things just work?
Теги
sysextension

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
HK Framework DSPIC DAX: Программирование 21 11.12.2024 20:00
ax_gfm_framework_team: Ledger account combinations - Part 7 (Advanced topics) Blog bot DAX Blogs 0 16.02.2013 08:08
ax-erp: Reporting Framework in AX 2012 Blog bot DAX Blogs 0 19.07.2012 01:11
sumitsaxfactor: Reporting Framework in AX 2012 Blog bot DAX Blogs 0 14.06.2012 11:11
emeadaxsupport: Update to AX 2012 Framework Component Documentation: SysOperation Framework Blog bot DAX Blogs 0 09.06.2012 00:11
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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