gpt4 book ai didi

acumatica - 覆盖通用图形扩展中声明的操作

转载 作者:行者123 更新时间:2023-12-04 02:43:03 25 4
gpt4 key购买 nike

我有一个自定义项,通过覆盖该操作来调整 SO Order Entry 上的 ShopRates 操作。

在 2018 R2 中,ShopRates 操作是直接在 SOOrderEntry 图上声明的,因此要覆盖该操作,我们只需执行以下操作。

    public class SOOrderEntry_Extension : PXGraphExtension<SOOrderEntry>
{
   public PXAction<SOOrder> shopRates;
   [PXUIField(DisplayName = "Shop for Rates", MapViewRights = PXCacheRights.Select, MapEnableRights = PXCacheRights.Update)]
   [PXButton(ImageKey = PX.Web.UI.Sprite.Main.DataEntryF)]
   protected virtual IEnumerable ShopRates(PXAdapter adapter)
   {
      Base.shopRates.Press(adapter);
// custom code
return adapter.Get();
}
}

但是,在 2019 R1 中,ShopRates 操作已移至 CarrierRatesExtension,它是 SOOrderEntry 图形上使用的通用图形扩展,由

public CarrierRates CarrierRatesExt => FindImplementation<CarrierRates>();
public class CarrierRates : CarrierRatesExtension<SOOrderEntry, SOOrder>
{
    . . .    
}

现在 ShopRates 操作不再直接在 SOOrderEntry 图中定义,我如何在我的 SOOrderEntry 扩展中覆盖它?

最佳答案

ShopRates 方法定义在 CarrierRatesExtension 类中,即 PXGraphExtension,但问题是这个类是抽象 并具有抽象的 GetCarrierRequest 方法。因此,如果您创建它的扩展,您还必须实现 GetCarrierRequest 方法。但是如果您查看 SOOrderEntry 的源代码,您会发现嵌套的 CarrierRates 继承自 CarrierRatesExtension 类并且已经实现了您需要的一切。所以你需要创建一个 SOOrderEntrySOOrderEntry.CarrierRatesPXGraphExtension,因为 SOOrderEntry.CarrierRates 仍然是 PXGraphExtension.

下面是一个如何覆盖 ShopRates 方法的例子:

using PX.Data;
using PX.Objects.SO;
using System;
using System.Collections;
namespace Test
{
public class SOOrderEntryExt : PXGraphExtension<SOOrderEntry.CarrierRates, SOOrderEntry>
{
[PXOverride()]
public virtual IEnumerable ShopRates(PXAdapter adapter,Func<PXAdapter,IEnumerable> baseMethod)
{
throw new NotImplementedException("This code overrides shop rates method and is not implemented yet!!");
var retVal = baseMethod?.Invoke(adapter);
return retVal;
}
}
}

关于acumatica - 覆盖通用图形扩展中声明的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58435873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com