我添加了一些我认为应该删除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);
}
然而,它仍然贯穿基本代码。如果我删除此代码并保留我的新事件处理程序,它将运行我拥有的事件处理程序,然后似乎也会运行Base事件处理程序。
有关如何删除基本事件处理程序以便它只使用新事件处理程序的任何建议吗?
答案 0 :(得分:2)
解决方案
原来(感谢伊万)
我不需要删除事件处理程序,我只需要在扩展中使用指向原始事件处理程序的第三个参数声明事件处理程序,然后我可以选择不调用该委托,如果是我的项目需要什么。
示例:
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
}