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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 16:42:07