Acumatica中从其他字段填充描述字段的BQL查询报错求助
Acumatica BQL查询报错解决:从供应商ID获取名称填充Description字段
错误原因解析
CS0119: 'BAccount.acctName' is a type...
BAccount.acctName是DAC中定义的字段类型,不是可传递的参数。Select方法不需要指定要获取的字段——执行查询后会返回完整的BAccount实例,直接访问其acctName属性即可。CS0120: An object reference is required...
PXSelect的Select是实例方法,不能直接通过PXSelect<...>.Select()调用,必须先创建PXSelect实例,或者使用正确的绑定调用方式。
修正后的代码
基础写法(获取完整BAccount实例)
// 创建PXSelect实例并执行查询 var bAccountRecord = new PXSelect<BAccount, Where<BAccount.bAccountID, Equal<Current<APInvoice.vendorID>>>>(this).Select(); if (bAccountRecord != null) { BAccount vendor = bAccountRecord.GetItem<BAccount>(); // 获取当前发票记录并更新Description APInvoice currentInvoice = Base.Document.Current; if (currentInvoice != null) { currentInvoice.Description = vendor.acctName; Base.Document.Update(currentInvoice); } }
简化写法(避免空引用)
var vendor = PXSelect<BAccount, Where<BAccount.bAccountID, Equal<Current<APInvoice.vendorID>>>>.Select(this)?.FirstOrDefault()?.GetItem<BAccount>(); if (vendor != null) { APInvoice current = Base.Document.Current; if (current != null) { current.Description = vendor.acctName; Base.Document.Update(current); } }
性能优化写法(仅查询需要的字段)
如果只需要acctName,可以用PXSelectReadonly配合Only关键字减少数据读取:
object vendorNameObj = PXSelectReadonly<BAccount.acctName, Where<BAccount.bAccountID, Equal<Current<APInvoice.vendorID>>>>.SelectSingleBound(this, null); if (vendorNameObj != null) { APInvoice current = Base.Document.Current; if (current != null) { current.Description = vendorNameObj.ToString(); Base.Document.Update(current); } }
内容的提问来源于stack exchange,提问作者Lionel PARIS
相关产品推荐
相关产品推荐

