2016-08-12 47 views
1

我正在从事Dynamics AX7表单开发。我必须在按钮的'Clicked'方法中编写代码,但'Clicked'方法中已经有一些'Sys Layer'代码。我必须对它施加一些条件。但我不想做'over-layering',我必须用扩展来做,但是如果我在onClicked事件中编写代码,问题是,我的代码在sys层代码之前或之后运行,但是我需要在该系统层代码上应用一些条件。在AX7的扩展中写入事件处理程序

我的问题是,我们可以用扩展事件处理程序来实现这个逻辑吗?我已经完成了over-layering,但是我需要使用扩展来完成。那么可以用扩展来做到这一点吗?

代码在下面添加。

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 
} 

回答

0

我已经搜索了一下,到目前为止我得出的结论是,我们不能100%没有覆盖。我们有事前和事后的事件,但这些事件无法满足上述问题,未来我们可能会有更具体的方式来做到这一点,但现在我们有三种选择。

  1. 做overlayering正如我们在AX 2012(不推荐)
  2. 做它与代表做了(即使我们仅限于做一些overlayering代表,但它是推荐的方式)
  3. 你也可以隐藏该按钮并将其替换为您自己的按钮,但它仅适用于窗体控件,我们不能为方法执行此操作,因为您无法避免调用它们。

我用代表解决了我的问题。 这是我发现的一个有用的链接,它有帮助。

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

0

是,否。如果它只是一个button那么super()并没有真正做任何事情,所以你可以做一个pre事件处理程序。

如果它是一个menu item button,其中super()调用类,那么你会做一个post事件处理程序class,而不是按钮,让你的方式逻辑super()电话后立即运行。

而在你的班级中,你可以做类似formRun = _xppPrePostArgs.getThis(),然后if (formRun.name() == formStr(SalesTable))或任何数量的事情,如果类有多个入口点。

+0

感谢@Alex, 是的,你说得对,我们之前和之后的事件,但专门针对上述问题,这些事件也没有办法。所以我和代表一起做了。但仍然需要一些覆盖层委托,但我们需要坚持下去,直到MS介绍一些新的方法。 –

+0

没有看到更多的代码,我不明白为什么你不能在没有覆盖的情况下做到这一点。 'super()'做了一些事情,所以为了让你的代码在你需要的地方得到,你只需要通过按钮实际上做的事情来获得'super()'的'post'。 –

+0

请再次关注我的代码。我已经提到过每件事情。 super()调用后已经有一些sys层的代码。我想要'if'条件内的代码。我怎样才能做到这一点 ? –