检索用户字段的Acumatica异常

时间:2018-03-16 17:58:53

标签: acumatica

我有以下代码:

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上运行

1 个答案:

答案 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,以便您的代码更具可读性。