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

AR503000对账单打印界面Process All按钮扩展功能报错排查

AR503000界面PrintStatements方法重写报错解决方案

问题表现

对AR503000(Print Statement对账单打印)界面的Process All(全部处理)按钮做自定义扩展时,使用[PXOverride]特性重写PrintStatements方法后,打开页面即抛出运行时错误,报错效果如下:
打开Print Statement界面(AR503000)时的界面报错

原有错误实现代码:

public class ARStatementPrint_Extension : PXGraphExtension<ARStatementPrint>
{
    #region Event Handlers                         
    public delegate void PrintStatementsDelegate();    
    [PXOverride]
    public void PrintStatements(PrintStatementsDelegate baseMethod)
    {
        PXTrace.WriteInformation("This did a thing");
        baseMethod();
    }
}

报错根本原因

  • 重写的方法、自定义委托的签名和基类ARStatementPrint图中PrintStatements方法的实际签名完全不匹配。该方法是Processing类型动作的处理方法,基类原生定义为**返回IEnumerable类型、入参为PXAdapter**的虚方法,你定义的无参、void返回值的重写逻辑无法通过[PXOverride]的签名校验,页面初始化图实例时直接抛出异常。

正确实现代码

public class ARStatementPrint_Extension : PXGraphExtension<ARStatementPrint>
{
    #region Event Handlers
    // 委托签名必须与基方法完全匹配:返回IEnumerable,入参为PXAdapter
    public delegate IEnumerable PrintStatementsDelegate(PXAdapter adapter);
    
    [PXOverride]
    public IEnumerable PrintStatements(PXAdapter adapter, PrintStatementsDelegate baseMethod)
    {
        // 基方法执行前的自定义逻辑写在此处
        PXTrace.WriteInformation("对账单打印前自定义逻辑执行");

        // 必须传入adapter参数,接收基方法返回结果,保证原有打印/批量处理逻辑正常运行
        var processResult = baseMethod(adapter);

        // 基方法执行后的自定义逻辑写在此处
        PXTrace.WriteInformation("对账单打印后自定义逻辑执行");

        return processResult;
    }
    #endregion
}

开发注意事项

  • 使用[PXOverride]重写基类方法时,自定义委托、重写方法的返回值类型、入参类型/顺序必须和基类虚方法完全一致,仅需要在重写方法的入参末尾追加同签名的委托参数即可。
  • 重写Process/Process All这类批量处理按钮绑定的动作方法时,必须将PXAdapter类型入参传入基方法,同时返回基方法的执行结果,否则会出现批量处理中断、选中记录不执行、处理结果不刷新等异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:03:24