覆盖Acumatica

时间:2018-03-30 21:50:23

标签: acumatica

我需要使用可重复使用的业务对象来获得销售税,折扣等,并且需要覆盖这些图表扩展中的一些方法。例如,我从机会图开始。我有一组需要计算总产品数量的订单总数,过去我们只是在(我认为)税收类别上覆盖了税收属性。无论如何,我不知道如何在二级图表扩展中对方法使用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 内部的内容不是重点。事实上,如果方法在第一级(Base)图中,我无法覆盖OpportunityMaint.SalesTax CalcDocTotals方法。 SalesTax图扩展具有受保护的方法,但是如果您将方法调用为public,则可以使用PXOverrideAttribute覆盖受保护的方法(如果它位于基本图中),这就是我所做的。我也尝试使用声明的委托代替Action但结果相同(正如我预期但想确认)。

我的问题:是否可以使用PXOverrideAttribute覆盖第二个,第三个等级图表扩展方法?

当我编译上面的代码并加载页面时,我收到此错误:

  

方法Void CalcDocTotals(System.Object,System.Decimal,   System.Decimal,System.Decimal,   System.Action`4 [System.Object的,System.Decimal,System.Decimal,System.Decimal])   在图形扩展中标记为[PXOverride],但原始方法   在PXGraph

中找不到这样的名字

2 个答案:

答案 0 :(得分:2)

2018R1 Update 4(18.104.0023)中已添加了从更高级别的扩展中覆盖扩展方法的功能。这样可以解决我的问题/问题,并允许我的问题中张贴的代码按原样运行。

答案 1 :(得分:0)

就我在Acumatica的岁月中所见,你无法覆盖Extension2中的Extension1等方法。因此我解决这个问题的方法是:用你的基本方法创建一个辅助图,在你希望用它的任何图形中为它创建一个字段或属性(最好是一个懒惰的初始化方法),然后在任何项目中你必须覆盖逻辑on,只需引用原始项目,并创建辅助图形的扩展名。