Написание обработчиков событий в расширениях в 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% без наложения. У нас есть мероприятия до и после, но они не могут решить вышеупомянутую проблему. Возможно, в будущем у нас будет более конкретный способ сделать это, но сейчас у нас есть три варианта.

  1. Делайте оверлей, как мы делали в AX 2012 (что не рекомендуется)
  2. Делайте это с делегатами (даже с делегатами мы ограничены в наложении, но это рекомендуемый способ)
  3. Вы также можете скрыть эту кнопку и заменить ее своей собственной кнопкой, но она будет работать только для элементов управления формой, мы не можем сделать это для методов, так как вы не можете избежать их вызова.

Я решил свою проблему с помощью делегатов. Вот полезная ссылка, которую я нашел об этом, и это помогло.

https://ievgensaxblog.wordpress.com/2016/05/01/ax-7-how-to-override-form-data-source-field-methods-without-overlaying/

И да и нет. Если это просто button тогда super() на самом деле ничего не делает, так что вы можете сделать pre обработчик события.

Если это menu item button, где super() вызывает класс, то вы бы сделали post обработчик события class а не кнопка, так что ваша логика работает сразу после super() вызов.

И в вашем классе вы можете сделать что-то вроде formRun = _xppPrePostArgs.getThis() а потом if (formRun.name() == formStr(SalesTable)) или любое количество вещей, если класс имеет несколько точек входа.

Другие вопросы по тегам