Acumatica选择客户后自动填充SOOrder复选框问题排查
在SOOrder界面选择客户后自动填充复选框的正确实现
原代码存在的问题
- 未定义变量
baccount,导致获取BAccount扩展字段的代码直接报错 - LINQ查询语法错误:
select p.usrBC.ToList()的括号位置错误,正确写法应为select p.usrBC).ToList() - 无需实例化
BusinessAccountMaint查询数据,直接通过PXSelect查询更符合Acumatica开发规范且高效 - 直接取
query[0]存在空引用风险,未处理查询结果为空的场景
修正后的代码实现
protected void _(Events.FieldUpdated<SOOrder, SOOrder.customerID> e) { if (e.Row == null || e.NewValue == null) return; SOOrder row = e.Row; SOOrderExt sOOrderExt = row.GetExtension<SOOrderExt>(); // 查询选中客户对应的BAccount记录 BAccount bAccount = PXSelect<BAccount, Where<BAccount.bAccountID, Equal<Required<BAccount.bAccountID>>>> .Select(Base, row.CustomerID); if (bAccount != null) { BAccountExt bAccountExt = bAccount.GetExtension<BAccountExt>(); // 将BAccount扩展字段的布尔值赋值给SOOrder的复选框 sOOrderExt.UsrBonCde = bAccountExt.UsrBC; } else { // 未找到对应客户时清空复选框 sOOrderExt.UsrBonCde = false; } }
代码说明
- 使用
row.GetExtension<T>()是Acumatica获取DAC扩展的简化写法,比PXCache<T>.GetExtension<T>(row)更简洁 - 采用带参数的PXSelect查询,精准定位选中的客户记录
- 增加多层空值判断,避免空引用异常
- 直接从查询到的BAccount实例获取扩展字段,逻辑清晰且符合Acumatica数据访问规范
内容的提问来源于stack exchange,提问作者Lionel PARIS
相关产品推荐
相关产品推荐

