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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.12.2016, 23:56   #1  
alicedr is offline
alicedr
Участник
 
39 / 10 (1) +
Регистрация: 06.07.2012
Адрес: Киев
How to cancel method execution in pre-event handler
Мне нужно добавить дополнительную кастомную таблицу в метод LogisticsLocationSelectForm::construct().
К сожалению, из-за throw error в конце метода, post event handler не запускается с новой таблицей.

Я могу использовать pre-event handler с нужным setReturnValue(), однако в этом случае мне нужно предотвратить запуск оригинального метода construct().

Как предотвратить выполнение метода из pre-event хендлера без оверлееринга?
Старый 31.12.2016, 03:56   #2  
ax_mct is offline
ax_mct
Участник
Аватар для ax_mct
 
1,308 / 359 (14) ++++++
Регистрация: 10.10.2005
Адрес: Арена цирка
Если я правильно прочитал то вы подписываетесь на метод ::construct().
Это не по фэнь-шую. Расширяйте данный метод, он для этого предназначен.

Есть паттерны дизайна, та же фабрика здесь. Стремление понятно не трогать системный код, но подписываться на этот метод - неверно. Тот же выброс исключения вам говорит о том что нужно добавить то что нужно добавить.
Старый 31.12.2016, 14:38   #3  
alicedr is offline
alicedr
Участник
 
39 / 10 (1) +
Регистрация: 06.07.2012
Адрес: Киев
Экстендить было первым порывом. Extend для класса неактивно.
Старый 31.12.2016, 18:33   #4  
ax_mct is offline
ax_mct
Участник
Аватар для ax_mct
 
1,308 / 359 (14) ++++++
Регистрация: 10.10.2005
Адрес: Арена цирка
Ax7 значит. Тогда я беру попкорна побольше, самому интересно как с этой Франкенштейн, в благородном девичестве Д'Амгаард Аксапта.

Последний раз редактировалось ax_mct; 31.12.2016 в 18:37.
Старый 01.01.2017, 01:15   #5  
ax_mct is offline
ax_mct
Участник
Аватар для ax_mct
 
1,308 / 359 (14) ++++++
Регистрация: 10.10.2005
Адрес: Арена цирка
Попкорн кончился
В принципе с правильной моделью overlaying должен быть возможен.

Но если очень хочется то есть такие танцы
https://ievgensaxblog.wordpress.com/...ut-overlaying/
Даже можно ловить исключение в catch().
Но чем мыть руки после этого всего - я не знаю
С Новым счастьем !
Старый 01.01.2017, 03:26   #6  
ax_mct is offline
ax_mct
Участник
Аватар для ax_mct
 
1,308 / 359 (14) ++++++
Регистрация: 10.10.2005
Адрес: Арена цирка
Цитата:
Сообщение от ax_mct Посмотреть сообщение
Попкорн кончился
В принципе с правильной моделью overlaying должен быть возможен.

Но если очень хочется то есть такие танцы
https://ievgensaxblog.wordpress.com/...ut-overlaying/
Даже можно ловить исключение в catch().
Но чем мыть руки после этого всего - я не знаю
С Новым счастьем !
А если подумать то тема интересная.
Цитата:
pre-event handler с нужным setReturnValue(), однако в этом случае мне нужно предотвратить запуск оригинального метода construct().
Вариант с pre-event handler уже не выглядит для меня идиотским в контексте AX7
Пропустить запуск оригинального метода из pre-event handler - невозможно насколько я понимаю систему. Выбрасывать же свое исключение - нет смысла.

Я бы изучил в контексте расширений AX7 можно ли расширить (в смысле override) ::construct() и если нет, то можно ли расширить (в смысле override) тот метод где вызывается данный ::construct(). Раз надо избегать оверлееринг то в принципе средства то предоставлены интересные.

Вот это заслуживает внимания:

Static constructors are the parameter-less static methods that are named typenew. Static constructors can be defined on extension classes. It’s guaranteed that the runtime system will call the constructor before the first reference to the extension type. You can’t assume any particular order of invocation for static construction among a set of extensions.

X++:
[ExtensionOf(classStr(MyClass))]
final class MyClass_Extension
{
    public int state;
    public static int staticState;
    static void TypeNew()
    {
        staticState = 77;
    }
}
https://ax.help.dynamics.com/en/wiki/class-extensions/

А вообще тема скорости разработки и ее оценки в свете необходимости расширять и уделять внимание пакетам/моделям - заслуживает отдельной темы. Так как количество барабанов для шаманских плясок утроилось как минимум.

Последний раз редактировалось ax_mct; 01.01.2017 в 04:03. Причина: (в смысле override)
Старый 01.01.2017, 15:33   #7  
kashperuk is offline
kashperuk
Senior SDE, Dynamics AX
Аватар для kashperuk
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
 
4,213 / 1884 (71) ++++++++
Регистрация: 30.05.2004
Адрес: Копенгаген, Дания
Я думаю стоит создать саппорт реквест, чтобы Майкрософт добавила делегат в этот метод, или чтобы переделали его на поддержку SysExtensionFramework
За это сообщение автора поблагодарили: ax_mct (3), Logger (1).
Теги
ax7, cancel, event, handler

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
stoneridgesoftware: Event Handler Methods in Dynamics 365 for Operations (AX7) Blog bot DAX Blogs 0 22.12.2016 21:11
atinkerersnotebook: Walkthrough & Tutorial Summary Blog bot DAX Blogs 1 09.09.2013 09:11
ax-erp: How to override the event methods on dialog controls? Blog bot DAX Blogs 0 18.09.2012 18:11
X++: How to use X++ Delegates in Dynamics AX 2012 Blog bot DAX Blogs 0 03.08.2011 09:11
axinthefield: Dynamics AX Event IDs Blog bot DAX Blogs 0 01.03.2011 22:11
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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


Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 06:52.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.