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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.12.2016, 23:56   #1  
alicedr is offline
alicedr
Участник
 
175 / 43 (2) +++
Регистрация: 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
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Если я правильно прочитал то вы подписываетесь на метод ::construct().
Это не по фэнь-шую. Расширяйте данный метод, он для этого предназначен.

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

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

Но если очень хочется то есть такие танцы
https://ievgensaxblog.wordpress.com/...ut-overlaying/
Даже можно ловить исключение в catch().
Но чем мыть руки после этого всего - я не знаю
С Новым счастьем !
Старый 01.01.2017, 03:26   #6  
ax_mct is offline
ax_mct
Banned
 
2,548 / 1091 (0) ++++++++
Регистрация: 10.10.2005
Адрес: Westlands
Цитата:
Сообщение от 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
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Я думаю стоит создать саппорт реквест, чтобы Майкрософт добавила делегат в этот метод, или чтобы переделали его на поддержку SysExtensionFramework
За это сообщение автора поблагодарили: Logger (1), ax_mct (3).
Теги
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, время: 00:44.