1

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

我的问题是,我们可以使用扩展事件处理程序来实现这个逻辑吗?我已经用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
}
4

2 回答 2

0

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

如果它是调用类的menu item button地方,那么您将对按钮而不是按钮执行事件处理程序,这样您的逻辑就会在调用后立即运行。super()postclasssuper()

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

于 2016-08-13T01:23:16.983 回答
0

我已经对其进行了搜索,到目前为止我得出的结论是,如果不叠加,我们就无法 100% 做到这一点。我们有 Pre 和 Post 事件,但这些无法解决上述问题,将来我们可能会有一些更具体的方法来做到这一点,但现在我们有三个选项。

  1. 像我们在 AX 2012 中那样进行叠加(不推荐)
  2. 与代表一起做(即使与代表我们也被限制做一些重叠,但这是推荐的方式)
  3. 您也可以隐藏该按钮并将其替换为您自己的按钮,但它仅适用于表单控件,我们无法为方法执行此操作,因为您无法避免调用它们。

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

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

于 2016-08-13T11:31:25.653 回答