我正在进行自定义,其中包括在取消/更正发票时添加额外的销售人员交易。作为开发工作的一部分,我已经确定了两个进程(Cancel Invoice和Correct Invoice(调用的通用方法是GraphPX.Objects.AR.ARInvoiceEntry
中的ReverseDocumentAndApplyToReversalIfNeeded
。
我有将新销售人员添加到ARInvoiceEntry.salesPerTrans
视图的自定义代码,但当我在ReverseDocumentAndApplyToReversalIfNeeded
运行后这样做时,我发现我的代码不会将新记录插入到视图中,也不会出现任何错误。经过多次故障排除,我发现ARInvoiceEntry.cs的方法ReverseInvoiceProc
中有一行代码停止插入新行。这是一行代码:
this.RowInserting.AddHandler<ARSalesPerTran>((sender, e) => { e.Cancel = true; });
添加的是一个匿名委托。
我想知道如何在我的自定义代码中获得这个匿名处理程序,这样我就可以:
- 删除该匿名处理程序
- 执行添加新行的自定义逻辑
- 将匿名代理添加回
RowInsertingEvents
列表
我试图在Acumatica代码库中查找,但找不到任何可以帮助我删除匿名委托的内容。我能找到的是删除命名的处理程序,比如下面的例子:
APPaymentEntry pe = CreateInstance<APPaymentEntry>();
pe.RowSelecting.RemoveHandler<APPayment>(pe.APPayment_RowSelecting);
因此,请告诉我如何从自定义代码中动态删除该匿名处理程序。我通过扩展图的Base属性引用了ARInvoiceEntry图。如果你能将我重定向到Acumatica代码库中的特定页面,那也可以。
我认为您无法以简单的方式从中删除此匿名方法。
然而,可以实现的一种方法是覆盖";ReverseDocumentAndApplyToReversalIfNeeded";方法和调用那里的基方法。
之后,您可以创建ARinvoiceEntry图的新实例(在调用基本方法后的相同覆盖中(,选择主记录(头(,然后尝试进行第二次插入(这样可以避免ReverseInvoiceProc(