Acumatica补货准备页面(IN50800)自定义列过滤失效排查
排查Acumatica IN50800自定义列过滤失效问题
核心原因分析
Acumatica网格的过滤功能默认依赖后台数据库查询,而非客户端内存中的缓存值。如果自定义列仅通过RowSelected等事件在内存中赋值,未将字段纳入视图查询逻辑,过滤时数据库无法匹配到对应值,就会出现仅偶尔匹配第一行或无结果的情况。
具体排查与修复步骤
1. 检查DAC扩展字段的数据库属性
确保INItemSite的缓存扩展类中,"Program Name"字段添加了正确的数据库绑定属性,而非仅用无绑定的UI属性:
public class INItemSiteExt : PXCacheExtension<INItemSite> { [PXDBString(100)] // 根据实际业务调整长度,必须包含数据库绑定属性 [PXUIField(DisplayName = "Program Name")] public virtual string UsrProgramName { get; set; } public abstract class usrProgramName : PX.Data.BQL.BqlString.Field<usrProgramName> { } }
如果该字段是从关联表获取的计算值,需确保后续视图查询中正确关联对应表并取出字段。
2. 将自定义字段加入视图查询
在INReplenishmentCreate图扩展中,修改主视图的Select语句,把自定义字段纳入查询逻辑:
public class INReplenishmentCreateExt : PXGraphExtension<INReplenishmentCreate> { public override void Initialize() { base.Initialize(); // 将自定义字段添加到主视图的查询集合中 Base.ReplenishmentItems.View.Select.Add<INItemSiteExt.usrProgramName>(); } // 若字段来自关联表,需补充关联逻辑,示例: // [PXJoin(typeof(LeftJoin<YourRelatedTable, On<YourRelatedTable.itemID, Equal<INItemSite.itemID>>>))] // 并在Select中加入关联表的对应字段 }
3. 验证数据源与缓存同步
确认网格绑定的数据源已包含自定义字段,若使用临时缓存(如PXResultset),需确保临时缓存中同步存储该字段的值,避免过滤时仅读取内存临时数据。
4. 调整字段赋值时机
避免仅在RowSelected事件中赋值(该事件仅UI渲染时触发,不会同步到查询逻辑)。如果字段需计算生成,建议通过视图查询直接关联获取,或在RowPersisting事件中同步更新数据库字段值。
5. 排查SQL生成逻辑
开启Acumatica的SQL日志(SM207010页面),执行过滤操作后查看生成的SQL语句,确认自定义字段是否被纳入查询和过滤条件,以此定位查询逻辑的缺失点。
内容的提问来源于stack exchange,提问作者Oshadha
相关产品推荐
相关产品推荐

