Acumatica自定义-如何从PXGraph.RowInsertingEvents集合中删除匿名委托



我正在进行自定义,其中包括在取消/更正发票时添加额外的销售人员交易。作为开发工作的一部分,我已经确定了两个进程(Cancel Invoice和Correct Invoice(调用的通用方法是GraphPX.Objects.AR.ARInvoiceEntry中的ReverseDocumentAndApplyToReversalIfNeeded

我有将新销售人员添加到ARInvoiceEntry.salesPerTrans视图的自定义代码,但当我在ReverseDocumentAndApplyToReversalIfNeeded运行后这样做时,我发现我的代码不会将新记录插入到视图中,也不会出现任何错误。经过多次故障排除,我发现ARInvoiceEntry.cs的方法ReverseInvoiceProc中有一行代码停止插入新行。这是一行代码:

this.RowInserting.AddHandler<ARSalesPerTran>((sender, e) => { e.Cancel = true; });

添加的是一个匿名委托。

我想知道如何在我的自定义代码中获得这个匿名处理程序,这样我就可以:

  1. 删除该匿名处理程序
  2. 执行添加新行的自定义逻辑
  3. 将匿名代理添加回RowInsertingEvents列表

我试图在Acumatica代码库中查找,但找不到任何可以帮助我删除匿名委托的内容。我能找到的是删除命名的处理程序,比如下面的例子:

APPaymentEntry pe = CreateInstance<APPaymentEntry>();
pe.RowSelecting.RemoveHandler<APPayment>(pe.APPayment_RowSelecting);

因此,请告诉我如何从自定义代码中动态删除该匿名处理程序。我通过扩展图的Base属性引用了ARInvoiceEntry图。如果你能将我重定向到Acumatica代码库中的特定页面,那也可以。

我认为您无法以简单的方式从中删除此匿名方法。

然而,可以实现的一种方法是覆盖";ReverseDocumentAndApplyToReversalIfNeeded";方法和调用那里的基方法。

之后,您可以创建ARinvoiceEntry图的新实例(在调用基本方法后的相同覆盖中(,选择主记录(头(,然后尝试进行第二次插入(这样可以避免ReverseInvoiceProc(

最新更新