Acumatica销售订单库存查询属性过滤报InventoryItem.NoteID绑定错误
问题解决方案
错误根因
Acumatica的属性过滤逻辑默认会依赖属性宿主表的NoteID字段,SOSiteStatusSelected是销售订单库存查询的投影DAC,默认数据视图未关联InventoryItem表,触发过滤时属性查询逻辑尝试引用InventoryItem.NoteID但该表未加入当前查询上下文,导致绑定失败。
修复步骤
- 给SOSiteStatusSelected扩展类添加关联InventoryItem的NoteID字段,标记为非可见DB字段,通过InventoryID外键关联取值
public class SOSiteStatusSelectedExt : PXCacheExtension<SOSiteStatusSelected> { [PXDBGuid(BqlField = typeof(InventoryItem.noteID))] [PXUIField(Visible = false)] public virtual Guid? InventoryItem_NoteID { get; set; } public abstract class inventoryItem_NoteID : PX.Data.BQL.BqlGuid.Field<inventoryItem_NoteID> { } }
- 调整自定义
PXAddAttributeColumns特性,指定属性宿主的NoteID字段为新增的扩展字段,替换默认的InventoryItem.NoteID绑定逻辑
// 原特性声明参考 // [PXAddAttributeColumns(typeof(InventoryItem), ...)] // 修改后指定扩展字段作为NoteID来源 [PXAddAttributeColumns(typeof(InventoryItem), typeof(SOSiteStatusSelectedExt.inventoryItem_NoteID), ...)]
- 修改销售订单库存查询对应的数据视图BQL,左连InventoryItem表确保关联字段存在于查询上下文
找到SOInquiry业务逻辑类中SOSiteStatusSelected对应的数据视图,添加LeftJoin<InventoryItem, On<InventoryItem.inventoryID, Equal<SOSiteStatusSelected.inventoryID>>>到BQL语句中即可。
验证步骤
- 重启Acumatica实例,打开销售订单库存查询页面,确认自定义属性列正常展示
- 为属性列添加过滤条件,验证过滤功能正常无报错
- 保存自定义过滤器,重新加载过滤器验证功能正常
内容的提问来源于stack exchange,提问作者mauV
相关产品推荐
相关产品推荐

