我正在使用的网格有一个联系人选择器,在输入时我正在尝试检查关联的联系人业务帐户以查找我的自定义日期字段。
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);
}
}
}
}
答案 0 :(得分:0)
目前还不确定哪个事件处理程序有问题:RowInserting,RowInserted或RowUpdated ...基于提供的堆栈跟踪,由于bAcc.GetExtension<PX.Objects.CR.BAccountExt>();
变量等于{{1时调用bAcc
语句而发生错误}}。不幸的是,错误消息不是很具描述性。
正如How to call SetPropertyException from another event handler?线程中所提到的,此处提到的3个处理程序(RowInserting,RowInserted或RowUpdated)都不应该用于向用户报告错误或警告。我强烈建议您重构代码以遵循框架的设计。