2017-02-02 179 views
0

我正在使用的网格有一个联系人的选择器,在输入上我试图检查我的自定义日期字段的相关联系人公司帐户。从联系人获取关联帐户?

错误 enter image description here

protected void atcProjectDistributionTable_RowUpdated(PXCache cache, PXRowUpdatedEventArgs e, PXRowUpdated InvokeBaseHandler) 
    { 
     if (InvokeBaseHandler != null) 
      InvokeBaseHandler(cache, e); 
     var row = (atcProjectDistributionTable)e.Row; 
     if (row.ContactID != null) 
     { 

      Contact con = PXSelectorAttribute.Select<atcProjectDistributionTable.contactID>(cache, row) as Contact; 
      row.ContactCD = con.FullName; 
      row.BAcc = con.BAccountID; 

      if (row.BAcc != null) 
      { 
       BAccount bAcc = PXSelectorAttribute.Select<atcProjectDistributionTable.bAcc>(cache, row) as BAccount; 
       PX.Objects.CR.BAccountExt ba = bAcc.GetExtension<PX.Objects.CR.BAccountExt>(); 
       if (ba.UsrExpiring != null) 
       { 
        PXUIFieldAttribute.SetError<atcProjectDistributionTable.bAcc>(cache, row, "Termination date:" + ba.UsrExpiring + " Reason:" + ba.UsrExReason); 
       } 
      } 

     } 
    } 

enter image description here

+0

您正在成功检索联系人公司帐户。问题是BAccount不包含扩展名BAccountExt。您应该考虑为什么DAC扩展不适用于BAccount DAC。 –

+0

谢谢,我不明白为什么,相同的代码在供应商屏幕上工作BAccount bAcc = Base.BAccount.Current; PX.Objects.CR.BAccountExt ba = bAcc.GetExtension (); – nickivey

+0

请向我们展示您的帐户ext代码 –

回答

0

不知道是什么事件处理程序是有问题现在:RowInserting,RowInserted或RowUpdated基于堆栈提供...跟踪误差是因为bAcc.GetExtension<PX.Objects.CR.BAccountExt>();声明当bAcc变量等于null时被调用。不幸的是,错误信息不是很具描述性。

How to call SetPropertyException from another event handler?线程所述,应该使用这里提到的3个处理程序(RowInserting,RowInserted或RowUpdated)中的任何一个来向用户报告错误或警告。我强烈建议重构您的代码以遵循框架的设计。