我添加了我认为应该删除 acumatica 基类的事件处理程序的代码。
public override void Initialize()
{
// Remove the event handler on the APTran object for APTran_SubID_FieldDefaulting so we can override it in this module
Base.FieldDefaulting.RemoveHandler<APTran.subID>(A PTran_SubID_FieldDefaulting);
}
Run Code Online (Sandbox Code Playgroud)
然而,它仍然贯穿基本代码。如果我删除此代码并保留我的新事件处理程序,它将通过我拥有的事件处理程序运行,然后似乎也通过 Base 事件处理程序运行。
关于如何删除基本事件处理程序以便它只使用新的事件处理程序的任何建议?
解决方案
结果(感谢伊万)
我不需要删除事件处理程序,我只需要使用指向原始事件处理程序的第三个参数在扩展中声明事件处理程序,然后我可以选择不调用该委托,如果这是我需要的在我的项目中。
例子:
protected void APTran_SubID_FieldDefaulting(PXCache sender, PXFieldDefaultingEventArgs e, PXFieldDefaulting del)
{
APTran row = (APTran)e.Row;
if (row == null) { return; }
// do my code here
// skip calling the original event
//del.Invoke(sender, e); -- invokes the Base FieldDefaulting event handler
}
Run Code Online (Sandbox Code Playgroud)