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

Acumatica中Material Wizard 1(AM300010)自定义仓库选择器过滤失效求助

修复Acumatica Material Wizard 1仓库过滤失效问题

核心问题排查与修复步骤

1. 统一字段名(关键错误)

代码中同时出现UsrWarehouseSelector和UsrWarehouseSelector2两个字段名,导致过滤逻辑无法正确读取仓库选择值。需将所有引用统一为DAC扩展中实际定义的字段名(假设正确字段名为UsrWarehouse):

修复后处理委托代码:

public override void Initialize()
{
    base.Initialize();
    
    Base.OpenOrders.SetProcessDelegate(list =>
    {
        var filter = Base.filter.Current;
        if (filter != null)
        {
            var warehouseFilter = filter.GetExtension<WizFilterExt>();
            if (warehouseFilter?.UsrWarehouse != null)
            {
                // 直接取PXInt字段的Value,无需字符串转int
                var warehouseID = warehouseFilter.UsrWarehouse.Value;
                list = list.Where(item => item.SiteID == warehouseID).ToList();
            }
        }
        
        MatlWizard1.FillMatlWrk(list, filter);
    });
}

2. 优化视图委托(保留原查询逻辑)

原视图委托直接替换整个查询,会丢失OpenOrders视图的默认过滤、排序及其他用户筛选条件。正确做法是在原查询基础上追加仓库过滤:

修复后视图委托代码:

[PXOverride]
protected virtual IEnumerable openOrders(PXSelectBase<AMProdItem> baseSelect)
{
    var filter = Base.filter.Current;
    if (filter == null)
    {
        return baseSelect.Select();
    }

    var warehouseFilter = filter.GetExtension<WizFilterExt>();
    if (warehouseFilter?.UsrWarehouse == null)
    {
        return baseSelect.Select();
    }

    // 在原查询基础上追加仓库过滤条件
    var filteredSelect = baseSelect.WhereAnd<Where<AMProdItem.siteID, Equal<Required<AMProdItem.siteID>>>>();
    return filteredSelect.Select(warehouseFilter.UsrWarehouse.Value);
}

3. 验证DAC扩展定义

确保WizFilterExt DAC扩展中字段定义与页面选择器一致,示例如下:

public class WizFilterExt : PXCacheExtension<MatlWizardFilter>
{
    #region UsrWarehouse
    [PXInt]
    [PXSelector(
        typeof(Search<INSite.siteID>),
        typeof(INSite.siteCD),
        typeof(INSite.descr),
        SubstituteKey = typeof(INSite.siteCD))]
    [PXUIField(DisplayName = "Warehouse", CommitChanges = true)]
    public virtual int? UsrWarehouse { get; set; }
    public abstract class usrWarehouse : PX.Data.BQL.BqlInt.Field<usrWarehouse> { }
    #endregion
}

4. 触发视图自动刷新

在仓库选择器字段的PXUIField特性中添加CommitChanges = true,确保选择值变化时自动刷新OpenOrders视图(已包含在上述DAC扩展代码中)。

额外验证点

  • 确认用户拥有对应仓库的访问权限(Acumatica站点权限会影响数据可见性)
  • 测试时选择存在生产订单的仓库,验证过滤结果是否符合预期

内容的提问来源于stack exchange,提问作者Tharidhi P

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 01:24:52