首页 文章

覆盖Acumatica中的二级图扩展方法

提问于
浏览
2

我需要使用可重复使用的业务对象来获得销售税,折扣等,并且需要覆盖这些图表扩展中的一些方法 . 例如,我从机会图开始 . 我有一组需要计算总产品数量的订单总数,过去我们只是在(我认为)税收类别上覆盖了税收属性 . 无论如何,我没有看到如何在二级图扩展的方法上使用 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但结果相同(正如我预期但想确认) .

我的问题: Is it possible to override a second, third, etc. level graph extension method using the 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 回答

  • 2

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

  • 0

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

相关问题