我正在尝试在Acumatica中自定义销售订单的业务逻辑。这是我写的代码
protected void SOLine_InventoryID_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e)
{
var row = (SOLine)e.Row;
InventoryItem item = (InventoryItem)PXSelectorAttribute.Select<SOLine.inventoryID>(cache, row);
if(item != null)
{
InventoryItemExt itemExt = orderitem.Cache.GetExtension<InventoryItemExt>(item);
if(item.InventoryID == row.InventoryID && itemExt.GarmentType == true)
{
PXUIFieldAttribute.SetEnabled<SOLine.orderQty>(this.orderitem.Cache, null, false);
}
}
}
public PXSelect<InventoryItem> Inventory;
我得到的错误就是这个
我之前在其他图表中曾多次使用此代码,并且没有任何问题。我想知道这个图表我想念的是什么,是因为它的扩展图形还是其他东西,我不太确定
提前感谢您的帮助
修改 将事件更改为RowSelected事件后得到的错误 编辑后的代码在
之下protected void SOLine_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
{
var row = (SOLine)e.Row;
InventoryItem item = (InventoryItem)PXSelectorAttribute.Select<SOLine.inventoryID>(cache, row);
if(item != null)
{
InventoryItemExt itemExt = Inventory.Cache.GetExtension<InventoryItemExt>(item);
if(item.InventoryID == row.InventoryID && itemExt.GarmentType == true)
{
PXUIFieldAttribute.SetEnabled<SOLine.orderQty>(this.orderitem.Cache, null, false);
}
}
是错误还是我的代码中存在问题?
答案 0 :(得分:0)
您发布的代码是SOLine.InventoryID:
的FieldUpdated事件处理程序protected void SOLine_InventoryID_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e)
{
[...]
检查SOLine RowSelected事件处理程序而不是SOLine InventoryID字段更新处理程序。跟踪表示在SOOrderEntry.cs的第73行引发了异常
与您的错误无关:在创建扩展类时,建议提供与基类不同的文件名。 SOOrderEntry.cs是Acumatica中的基类文件,您可以将文件命名为SOOrderEntryExt.cs,以区别于基类。
编辑,您的DataView可能不是InventoryItem类型,请尝试:
Base.Caches[typeof(InventoryItem)].GetExtension<InventoryItemExt>(item)
编辑2 完整代码
public class InventoryItemExt : PXCacheExtension<PX.Objects.IN.InventoryItem>
{
#region UsrCustomField
[PXString]
[PXUIField(DisplayName = "Custom Field")]
public virtual string UsrCustomField { get; set; }
public abstract class usrCustomField : IBqlField { }
#endregion
}
public class SOOrderEntry_Extension : PXGraphExtension<SOOrderEntry>
{
protected void SOLine_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
{
SOLine soLine = e.Row as SOLine;
if (soLine != null)
{
InventoryItem item = (InventoryItem)PXSelectorAttribute.Select<SOLine.inventoryID>(cache, soLine);
if (item != null)
{
InventoryItemExt itemExt = Base.Caches[typeof(InventoryItem)].GetExtension<InventoryItemExt>(item);
PXTrace.WriteInformation(string.Concat("Success = ", (itemExt != null).ToString()));
}
}
}
}