【发布时间】:2018-03-30 21:50:23
【问题描述】:
我需要处理销售税、折扣等的可重用业务对象,并且需要覆盖这些图形扩展中的一些方法。例如,我从机会图开始。我有一组订单总额需要计算到总产品金额中,过去我们只是覆盖了(我认为)税收类别的税收属性。无论如何,我看不出如何在二级图形扩展的方法上使用PXOverrideAttribute。
这是我的例子:
public class OpportunityMaintExtOne : PXGraphExtension<PX.Objects.CR.OpportunityMaint.SalesTax, PX.Objects.CR.OpportunityMaint>
{
[PXOverride]
public virtual void CalcDocTotals(object row, decimal CuryTaxTotal, decimal CuryInclTaxTotal, decimal CuryWhTaxTotal,
Action<object, decimal, decimal, decimal> del)
{
del?.Invoke(row, CuryTaxTotal, CuryInclTaxTotal, CuryWhTaxTotal);
var someOtherTotal = Base1.Documents.Cache.GetValueAsDecimal<CROpportunityExtension.aMCurySomeOtherTotal>(row);
if (someOtherTotal == 0)
{
return;
}
var curyDocTotal = someOtherTotal + Base1.Documents.Cache.GetValueAsDecimal<CROpportunity.curyProductsAmount>(row);
Base1.Documents.Cache.SetValue<CROpportunity.curyProductsAmount>(row, curyDocTotal);
}
}
我的图形扩展中 CalcDocTotals 内部发生的事情不是重点。事实上,如果该方法位于第一级(基本)图中,我无法覆盖 OpportunityMaint.SalesTax CalcDocTotals 方法。 SalesTax 图形扩展具有受保护的方法,但受保护的方法(如果它在基本图中)可以使用 PXOverrideAttribute 覆盖,如果您将方法调用设为公开,这就是我所做的。我还尝试使用声明的委托代替 Action,但结果相同(正如我预期但想确认的那样)。
我的问题:是否可以使用 PXOverrideAttribute 覆盖第二、第三等级别的图形扩展方法?
当我编译上面的代码并加载页面时,我得到了这个错误:
Method Void CalcDocTotals(System.Object, System.Decimal, System.Decimal, System.Decimal, System.Action`4[System.Object,System.Decimal,System.Decimal,System.Decimal]) 在图扩展中标记为[PXOverride],但原来的方法 在 PXGraph 中没有找到这样的名称
【问题讨论】:
-
我认为目前系统正在尝试在
OpportunityMaint图中找到CalcDocTotals。但这只是几个问题之一。第二个问题是CalcDocTotals是抽象类的成员,在SalesTax图中它是受保护的,只是被覆盖了。 -
作为一个想法,我可以建议尝试实现
TaxGraph抽象类,并在某些时候用它替换SalesTax -
问题是 Acumatica 已经宣布使用 SalesTax。如果我们再次声明它,我会假设我们会得到双重执行/结果。
标签: acumatica