我有一个自定义,通过覆盖该操作来调整 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();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,在 2019 R1 中,ShopRates 操作已移至 CarrierRatesExtension,这是 SOOrderEntry 图上使用的通用图扩展,由
public CarrierRates CarrierRatesExt => FindImplementation<CarrierRates>();
public class CarrierRates : CarrierRatesExtension<SOOrderEntry, SOOrder>
{
. . .
}
Run Code Online (Sandbox Code Playgroud)
现在 ShopRates 操作不再直接在 SOOrderEntry 图上定义,我如何在我的 SOOrderEntry 扩展中覆盖它?
该ShopRates方法定义在CarrierRatesExtension类 which is 中PXGraphExtension,但问题是该类是抽象的并且具有抽象GetCarrierRequest方法。因此,如果您创建它的扩展,则还必须实现GetCarrierRequest方法。但是,如果您查看 的来源,SOOrderEntry您会发现CarrierRates从CarrierRatesExtension类继承的嵌套并已经实现了您需要的一切。所以,你需要创建一个PXGraphExtension的SOOrderEntry和SOOrderEntry.CarrierRates,因为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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
237 次 |
| 最近记录: |