You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 13:05:13