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

如何在PXProcessing的ProcessBatch方法中获取过滤器的Usrdatefin值

解决静态方法中获取过滤器字段值的方案

针对你在Acumatica开发中遇到的静态ProcessBatch方法无法访问实例级过滤器变量的问题,提供以下两种可行方案:

方案一:通过传入的图实例获取过滤器当前值

ProcessBatch方法的pg参数是当前运行的图实例,你可以直接通过它访问过滤器视图的当前记录:

public static void ProcessBatch(PostGraph pg, Customer un_record)
{
    try
    {
        PX.SM.Branch un_etab = PXSelect<PX.SM.Branch, Where<PX.SM.Branch.branchID, Equal<Current<AccessInfo.branchID>>>>.Select(pg);
        
        // 将pg转换为ATTGEN图类型,获取过滤器当前值
        ATTGEN graph = pg as ATTGEN;
        if (graph?.filter?.Current != null)
        {
            DateTime oDate = Convert.ToDateTime(graph.filter.Current.Usrdatefin);
            // 后续业务逻辑
        }
        ...
    }
}

如果PostGraph是通用图类型,也可以直接通过视图名称获取:

// 直接通过视图名称获取过滤器记录
atFilter currentFilter = pg.Views["filter"]?.Current as atFilter;
if (currentFilter != null)
{
    DateTime oDate = Convert.ToDateTime(currentFilter.Usrdatefin);
}

方案二:通过闭包在委托设置时传递过滤器值

如果过滤器值在设置委托时已确定且不会中途修改,可以在构造函数中捕获当前值,通过闭包传递给静态方法:

首先修改ProcessBatch方法,添加过滤器参数:

public static void ProcessBatch(PostGraph pg, Customer un_record, atFilter filter)
{
    try
    {
        PX.SM.Branch un_etab = PXSelect<PX.SM.Branch, Where<PX.SM.Branch.branchID, Equal<Current<AccessInfo.branchID>>>>.Select(pg);
        DateTime oDate = Convert.ToDateTime(filter.Usrdatefin);
        ...
    }
}

然后在构造函数中设置委托时传入过滤器值:

public ATTGEN()
{
    atFilter currentFilter = this.filter.Current;
    // 用闭包捕获currentFilter并传递给ProcessBatch
    ListProcess.SetProcessDelegate<PostGraph>((pg, un_record) => ProcessBatch(pg, un_record, currentFilter));
    ListProcess.SetProcessCaption("Process");
    ListProcess.SetProcessAllCaption("Process All");
}

注意:此方案仅适用于过滤器值不会在委托设置后变更的场景,若用户在触发处理前修改过滤器,闭包会保留旧值,此时方案一更稳妥。

额外注意事项

  • 禁止将实例过滤器变量改为静态:静态变量全局共享,会导致多用户场景下数据混乱。
  • 类型转换和访问视图时必须做null检查:避免因视图未初始化或无当前记录引发空引用异常。

内容的提问来源于stack exchange,提问作者Xavier LARTEM

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 05:40:54