在 AX7 的扩展中编写事件处理程序
Writing event handlers in extensions in AX7
我从事 Dynamics AX7 表单开发工作。我必须在按钮的 'Clicked' 方法中编写代码,但 'Clicked' 方法中已经有一些 'Sys Layer' 代码。我必须对其应用一些条件。但我不想做 'over-layering',我必须用扩展来做,但是如果我在 onClicked 事件中编写代码,问题是,我的代码在系统层代码之前或之后运行,但我需要对该系统层代码应用一些条件。
我的问题是,我们可以使用扩展事件处理程序实现此逻辑吗?我已经通过叠加完成了,但我需要通过扩展来完成。那么是否可以使用扩展来做到这一点?
下面添加了代码。
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
}
是也不是。如果它只是一个 button
那么 super()
并没有真正做任何事情,所以你可以做一个 pre
事件处理程序。
如果它是 menu item button
,其中 super()
调用 class,那么您将对 class
执行 post
事件处理程序,而不是按钮,这样您的逻辑就会在 super()
调用后立即运行。
并且在您的 class 中,您可以执行类似 formRun = _xppPrePostArgs.getThis()
的操作,然后执行 if (formRun.name() == formStr(SalesTable))
或任何数量的操作(如果 class 具有多个入口点。
我已经搜索过了,到目前为止我得出的结论是,如果不叠加,我们不能 100% 做到这一点。我们有 Pre 和 Post 事件,但这些无法解决上述问题,将来我们可能会有一些更具体的方法来做到这一点,但现在我们有三个选择。
- 像我们在 AX 2012 中那样进行叠加(不推荐)
- 与委托一起做(即使是委托,我们也只能做一些重叠,但这是推荐的方式)
- 您也可以隐藏该按钮并将其替换为您自己的按钮,但它仅适用于表单控件,我们不能对方法执行此操作,因为您无法避免调用它们。
我使用委托解决了我的问题。
这是我发现的有用 link,它很有帮助。
我从事 Dynamics AX7 表单开发工作。我必须在按钮的 'Clicked' 方法中编写代码,但 'Clicked' 方法中已经有一些 'Sys Layer' 代码。我必须对其应用一些条件。但我不想做 'over-layering',我必须用扩展来做,但是如果我在 onClicked 事件中编写代码,问题是,我的代码在系统层代码之前或之后运行,但我需要对该系统层代码应用一些条件。
我的问题是,我们可以使用扩展事件处理程序实现此逻辑吗?我已经通过叠加完成了,但我需要通过扩展来完成。那么是否可以使用扩展来做到这一点?
下面添加了代码。
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
}
是也不是。如果它只是一个 button
那么 super()
并没有真正做任何事情,所以你可以做一个 pre
事件处理程序。
如果它是 menu item button
,其中 super()
调用 class,那么您将对 class
执行 post
事件处理程序,而不是按钮,这样您的逻辑就会在 super()
调用后立即运行。
并且在您的 class 中,您可以执行类似 formRun = _xppPrePostArgs.getThis()
的操作,然后执行 if (formRun.name() == formStr(SalesTable))
或任何数量的操作(如果 class 具有多个入口点。
我已经搜索过了,到目前为止我得出的结论是,如果不叠加,我们不能 100% 做到这一点。我们有 Pre 和 Post 事件,但这些无法解决上述问题,将来我们可能会有一些更具体的方法来做到这一点,但现在我们有三个选择。
- 像我们在 AX 2012 中那样进行叠加(不推荐)
- 与委托一起做(即使是委托,我们也只能做一些重叠,但这是推荐的方式)
- 您也可以隐藏该按钮并将其替换为您自己的按钮,但它仅适用于表单控件,我们不能对方法执行此操作,因为您无法避免调用它们。
我使用委托解决了我的问题。 这是我发现的有用 link,它很有帮助。