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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.11.2018, 17:07   #1  
wojzeh is offline
wojzeh
Участник
Аватар для wojzeh
Соотечественники
 
681 / 517 (19) +++++++
Регистрация: 27.04.2006
Адрес: Montreal
ничего не получится!

любой extension - это final, а final - это кастрат, у которого наследников в принципе не бывает.

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

Нажмите на изображение для увеличения
Название: крюк.png
Просмотров: 328
Размер:	296.8 Кб
ID:	12146
__________________
Felix nihil admirari
Старый 10.10.2023, 11:37   #2  
kair84 is offline
kair84
Участник
 
47 / 58 (2) ++++
Регистрация: 15.04.2010
Адрес: Belarus
Решение есть
Прошу прощение за Офтоп, У меня недавно возникла необходимость сделать подобное, и все получилось, не так красиво как я бы хотел но все же:

X++:
class A
{
}
class B extends A
{
}
[ExtensionOf(classStr(A))]
final class A_Extension
{
    public void salute()
    {
        switch (true)
        {
            case this is B:    
                B b = this ;
                b.salute();
            default :
                info("A extension");
        }        
    }
}
[ExtensionOf(classStr(B))]
final class B_Extension
{
    public void salute()
    {
        info("B extension");
    }

}
В идеале хотелось бы обойтись без упоминания конкретного наследника, через DictClass или что то подобное, но пока только так получилось.
Старый 10.10.2023, 11:43   #3  
kair84 is offline
kair84
Участник
 
47 / 58 (2) ++++
Регистрация: 15.04.2010
Адрес: Belarus
Нет, это не Офтоп.... как то по другому называется
Старый 11.10.2023, 00:43   #4  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,343 / 3563 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от kair84 Посмотреть сообщение
Прошу прощение за Офтоп, У меня недавно возникла необходимость сделать подобное, и все получилось, не так красиво как я бы хотел но все же:
Знаю. Добивался этого же. Это по сути эмуляция наследования.
Какие в этом случае всплывают проблемы:
1. (Основная). Очевидно, что это работает только для новых методов. Т.е. нельзя в классе А сделать расширение стандартного метода (с использованием метода next), потому что next не позволяет себя вызывать "по условию". Точнее сделать-то можно, вот только когда сделаешь - получается, что можно было сделать проще без этих "выкрутасов".
2. (Организационная). Каждый разработчик должен будет этот "стиль" поддерживать при добавлении нового метода.
3. (Организационная). При наличии нескольких расширений одного класса - они формально могут применяться в любой последовательности. Следовательно код можно писать только такой, который не будет зависеть от последовательности вызова разных расширений.

Т.е. да, чисто академически - так можно написать. Но реально претворить это в жизнь.... весьма сложно, а главное - относительно без особой выгоды.
__________________
Возможно сделать все. Вопрос времени
Старый 11.10.2023, 11:17   #5  
ТРЕНЕР is offline
ТРЕНЕР
Участник
Аватар для ТРЕНЕР
 
599 / 50 (3) ++++
Регистрация: 11.06.2003
Адрес: Москва
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
При наличии нескольких расширений одного класса - они формально могут применяться в любой последовательности.
Да, сталкивался с этим. Один и тот же функционал работал в разные моменты по-разному. Оказалось, что именно из-за разной произвольной последовательности работы нескольких расширений.
Старый 11.10.2023, 11:37   #6  
kair84 is offline
kair84
Участник
 
47 / 58 (2) ++++
Регистрация: 15.04.2010
Адрес: Belarus
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Знаю. Добивался этого же. Это по сути эмуляция наследования.
Какие в этом случае всплывают проблемы:
1. (Основная). Очевидно, что это работает только для новых методов. Т.е. нельзя в классе А сделать расширение стандартного метода (с использованием метода next), потому что next не позволяет себя вызывать "по условию". Точнее сделать-то можно, вот только когда сделаешь - получается, что можно было сделать проще без этих "выкрутасов".
2. (Организационная). Каждый разработчик должен будет этот "стиль" поддерживать при добавлении нового метода.
3. (Организационная). При наличии нескольких расширений одного класса - они формально могут применяться в любой последовательности. Следовательно код можно писать только такой, который не будет зависеть от последовательности вызова разных расширений.

Т.е. да, чисто академически - так можно написать. Но реально претворить это в жизнь.... весьма сложно, а главное - относительно без особой выгоды.
Согласен, ограничения есть, но часть вами перечисленного относится к принципиальным ограничениям разработки в D365FO в целом. Ax7 сплошные ограничения и танцы с бубном, много чего нужно учитывать.
Вопрос в том что это возможно, а иногда и единственный правильный вариант.

Я решал вопрос расширения стандартного функционала, где есть базовый класс исполнитель с параметрами по умолчанию, и наследники переопределяющие параметры и дополняющие функционал, мне нужно было добавить новый параметр в базовом классе, и для разных типов наследников менять логику выполнения в базовом классе.
Теги
chain of command, d365fo

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
erconsult: Copy-paste with keyboard script 2: from Excel to D365FO Blog bot DAX Blogs 0 03.08.2018 11:12
daxmusings: The Overall Concept of Extensions in AX 7 Blog bot DAX Blogs 0 14.09.2017 13:11
sertandev: AX7 Extensibility Overview – Part 2 : Code extensions Blog bot DAX Blogs 0 28.08.2017 19:11
daxmusings: The Overall Concept of Extensions in AX 7 Blog bot DAX Blogs 0 04.10.2016 12:11
goshoom: Class extensions Blog bot DAX Blogs 0 18.07.2016 17:11
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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