【发布时间】:2018-08-10 05:06:11
【问题描述】:
我们有一个自定义项,我们在其中针对客户位置运行处理屏幕。当我们尝试更新位置缓存中的位置时,我们收到以下错误:
Unable to cast object of type
'PX.Data.PXCache`1[PX.Objects.AR.SelectedCustomerLocation]' to type
'PX.Data.PXCache`1[PX.Objects.CR.Location]'.
这是我们正在使用的代码的简化版本。 ProcessLocation 方法是 PXProcessing 委托:
public class LocationMaint_Extension : PXGraphExtension<LocationMaint>
{
public virtual void ProcessLocation(Location loc)
{
LocationExt locExt = loc.GetExtension<LocationExt>();
locExt.UsrCustomField = "New Value";
Base.Caches<Location>().Update(loc);
}
}
我们知道 SelectedCustomerLocation 派生自 SelectedLocation,而 SelectedLocation 派生自 Location。因此,我们希望上述代码能够成功运行,因为存在继承。
如果我们写如下代码,方法成功,屏幕更新成功。但是,我们对自定义字段所做的更改并没有持久化到数据库中:
public class LocationMaint_Extension : PXGraphExtension<LocationMaint>
{
public virtual void ProcessLocation(Location loc)
{
LocationExt locExt = loc.GetExtension<LocationExt>();
locExt.UsrCustomField = "New Value";
Base.Caches<SelectedCustomerLocation>().Update(loc as SelectedCustomerLocation);
// We had this code in as well, which did not seem to help
Base.Caches<SelectedCustomerLocation>().Persist(PXDBOperation.Insert);
Base.Caches<SelectedCustomerLocation>().Persist(PXDBOperation.Update);
}
}
任何帮助将不胜感激。谢谢。
【问题讨论】: