30.12.2016, 23:56 | #1 |
Участник
|
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 |
Banned
|
Если я правильно прочитал то вы подписываетесь на метод ::construct().
Это не по фэнь-шую. Расширяйте данный метод, он для этого предназначен. Есть паттерны дизайна, та же фабрика здесь. Стремление понятно не трогать системный код, но подписываться на этот метод - неверно. Тот же выброс исключения вам говорит о том что нужно добавить то что нужно добавить. |
|
31.12.2016, 14:38 | #3 |
Участник
|
Экстендить было первым порывом. Extend для класса неактивно.
|
|
31.12.2016, 18:33 | #4 |
Banned
|
Ax7 значит. Тогда я беру попкорна побольше, самому интересно как с этой Франкенштейн, в благородном девичестве Д'Амгаард Аксапта.
Последний раз редактировалось ax_mct; 31.12.2016 в 18:37. |
|
01.01.2017, 01:15 | #5 |
Banned
|
Попкорн кончился
В принципе с правильной моделью overlaying должен быть возможен. Но если очень хочется то есть такие танцы https://ievgensaxblog.wordpress.com/...ut-overlaying/ Даже можно ловить исключение в catch(). Но чем мыть руки после этого всего - я не знаю С Новым счастьем ! |
|
01.01.2017, 03:26 | #6 |
Banned
|
Цитата:
Сообщение от ax_mct
Попкорн кончился
В принципе с правильной моделью overlaying должен быть возможен. Но если очень хочется то есть такие танцы https://ievgensaxblog.wordpress.com/...ut-overlaying/ Даже можно ловить исключение в catch(). Но чем мыть руки после этого всего - я не знаю С Новым счастьем ! Цитата:
pre-event handler с нужным setReturnValue(), однако в этом случае мне нужно предотвратить запуск оригинального метода construct().
Пропустить запуск оригинального метода из 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; } } А вообще тема скорости разработки и ее оценки в свете необходимости расширять и уделять внимание пакетам/моделям - заслуживает отдельной темы. Так как количество барабанов для шаманских плясок утроилось как минимум. Последний раз редактировалось ax_mct; 01.01.2017 в 04:03. Причина: (в смысле override) |
|
01.01.2017, 15:33 | #7 |
Участник
|
Я думаю стоит создать саппорт реквест, чтобы Майкрософт добавила делегат в этот метод, или чтобы переделали его на поддержку SysExtensionFramework
|
|
|
За это сообщение автора поблагодарили: Logger (1), ax_mct (3). |
Теги |
ax7, cancel, event, handler |
|
|