Написание обработчиков событий в расширениях в AX7
Я работаю в разработке формы Dynamics AX7. Я должен написать код в методе "Clicked" кнопки, но в методе "Clicked" уже есть некоторый код "Sys Layer". Я должен применить некоторые условия к нему. Но я не хочу делать "чрезмерное наслоение", я должен делать это с расширениями, но если я пишу код в событии onClicked, проблема в том, что мой код выполняется до или после кода sys-layer, но мне нужно применить некоторые условия к этому коду sys-layer.
мой вопрос, можем ли мы достичь этой логики с помощью обработчиков событий расширения? Я уже сделал это с наложением слоев, но мне нужно сделать это с расширениями. Так можно ли это сделать с помощью расширений?
Код добавлен ниже.
void clicked()
{
super();
// My logic will be written here
if(result == true) //This is my code, based on above logic I applied this check
{
// start of sys layer code
remainSalesPhysical.realValue(0);
remainInventPhysical.realValue(0);
if (formCtrl)
{
formCtrl.cancelLine();
}
element.closeOk();
// end of sys layer code
} //this is my code
else //this is my code
{ //this is my code
error("Some error message"); //this is my code
} //this is my code
}
2 ответа
Я искал об этом, и я пришел к выводу, что мы не можем сделать это на 100% без наложения. У нас есть мероприятия до и после, но они не могут решить вышеупомянутую проблему. Возможно, в будущем у нас будет более конкретный способ сделать это, но сейчас у нас есть три варианта.
- Делайте оверлей, как мы делали в AX 2012 (что не рекомендуется)
- Делайте это с делегатами (даже с делегатами мы ограничены в наложении, но это рекомендуемый способ)
- Вы также можете скрыть эту кнопку и заменить ее своей собственной кнопкой, но она будет работать только для элементов управления формой, мы не можем сделать это для методов, так как вы не можете избежать их вызова.
Я решил свою проблему с помощью делегатов. Вот полезная ссылка, которую я нашел об этом, и это помогло.
И да и нет. Если это просто button
тогда super()
на самом деле ничего не делает, так что вы можете сделать pre
обработчик события.
Если это menu item button
, где super()
вызывает класс, то вы бы сделали post
обработчик события class
а не кнопка, так что ваша логика работает сразу после super()
вызов.
И в вашем классе вы можете сделать что-то вроде formRun = _xppPrePostArgs.getThis()
а потом if (formRun.name() == formStr(SalesTable))
или любое количество вещей, если класс имеет несколько точек входа.