我有以下代码:
protected void SOLine_UsrMargin_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e)
{
var salesOrderEntry = (SOLine)e.Row;
if (salesOrderEntry == null)
return;
decimal? lastCost = GetLastCost(salesOrderEntry.InventoryID);
decimal margin = (decimal)cache.GetValue<SOLineExt.usrMargin (salesOrderEntry); <-- Line 47
.
.
.
}
当用户添加/编辑销售订单时,此代码可以正常工作。他们保存销售订单,创建货件并去确认后会收到以下异常:
对象引用未设置为对象的实例。
Stack Trace: at PX.Objects.SO.SOOrderEntry_Extension.SOLine_UsrMargin_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e) in g:\projects\xxx\Automatica\Projects\XXX\WebSite\App_RuntimeCode\SOOrderEntry.cs:line 47 at PX.Data.PXCache.OnFieldUpdated(String name, Object row, Object oldValue, Boolean externalCall) at PX.Data.PXCache`1.a(TNode A_0, TNode A_1, TNode A_2)
这是在Acumatica版本6.10.1122上运行
答案 0 :(得分:0)
如果您想获得自定义字段的值,最好将代码更改为此类
SOLineExt rowExt = PXCache<SOLine>.GetExtension<SOLineExt>(salesOrderEntry);
decimal margin=0;// or set any default value for margin for calculation if rowExt==null
if(rowExt!=null)
{
margin = rowExt.usrMargin;
}
另外,我建议您将salesOrderEntry
当前行的实例重命名为currentRow
,以便您的代码更具可读性。