Как удалить обработчик событий в Acumatica

Я добавил код, который, по моему мнению, должен удалить обработчик событий базового класса 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);

 }

Тем не менее, он по-прежнему работает через базовый код. Если я удалю этот код и оставлю свой новый обработчик событий, он будет выполняться через имеющийся у меня обработчик событий, а затем, похоже, также будет выполняться через базовый обработчик событий.

Любые предложения о том, как удалить базовый обработчик событий, чтобы он просто использовал новый обработчик событий?


person xDJR1875    schedule 09.12.2014    source источник


Ответы (1)


Решение

Получается (спасибо Ивану)

что мне не нужно удалять обработчик событий, мне просто нужно объявить обработчик событий в расширении с третьим параметром, который указывает на исходный обработчик событий, тогда я могу не вызывать этот делегат, если это то, что мне нужно в моем проекте.

пример:

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

 } 
person xDJR1875    schedule 09.12.2014
comment
Возможно, было бы неплохо запустить базовую логику перед вашим кодом на случай, если что-то изменится в будущем, логика по-прежнему будет работать, но ваш код переопределит значение. - person Jeremy Hodge; 26.06.2020