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

使用PX.Reports函数时报表排序不可用,如何恢复原始排序?

恢复PX.Reports报表原始排序的解决方法

问题描述

使用PX.Reports函数生成SO643000报表时,排序功能失效,需要恢复报表设计时的原始排序规则,当前使用的代码如下:

Dictionary<String, String> parameters = new Dictionary<String, String>();
parameters["ARInvoice.DocType"] = Base.Document.Current.DocType;
parameters["ARInvoice.RefNbr"] = Base.Document.Current.RefNbr;

PXReportSettings settings = new PXReportSettings("SO643000");
PX.Reports.Controls.Report report = ReportLoader.CheckIfNull(nameof(ReportLoader)).LoadReport("SO643000", null);
ReportLoader.InitReportParameters(report, parameters, settings, false);
PX.Reports.Data.ReportNode reportNode = ReportDataBinder.CheckIfNull(nameof(ReportDataBinder)).ProcessReportDataBinding(report);

问题原因

直接通过ReportLoader和ReportDataBinder手动处理报表绑定的流程,容易丢失报表设计器中配置的原始排序规则——该流程未完整继承报表预设的数据处理逻辑。

解决方法

方法1:使用PXReportTools完整加载报表设置

通过PXReportTools工具类加载报表,确保保留设计时的排序、过滤等配置,修改后的代码如下:

Dictionary<String, String> parameters = new Dictionary<String, String>();
parameters["ARInvoice.DocType"] = Base.Document.Current.DocType;
parameters["ARInvoice.RefNbr"] = Base.Document.Current.RefNbr;

// 加载报表的原始设置
PXReportSettings settings = PXReportTools.LoadReportSettings("SO643000", null);
// 注入参数
foreach (var param in parameters)
{
    if (settings.ReportParameters.ContainsKey(param.Key))
    {
        settings.ReportParameters[param.Key].Value = param.Value;
    }
}

// 基于保留原始设置的配置加载报表
PX.Reports.Controls.Report report = PXReportTools.LoadReport("SO643000", settings);

// 可选:若仍未恢复,可手动指定排序规则(替换为报表设计时的原始排序字段)
foreach (var dataSource in report.DataSources)
{
    // 示例:按DocType升序、RefNbr升序排序
    dataSource.Sorting = "ARInvoice.DocType ASC, ARInvoice.RefNbr ASC";
}

// 处理数据绑定
PX.Reports.Data.ReportNode reportNode = ReportDataBinder.CheckIfNull(nameof(ReportDataBinder)).ProcessReportDataBinding(report);

方法2:使用PXReportViewer加载报表(推荐)

PXReportViewer会自动维护报表的原始配置(包括排序规则),无需手动处理设置,代码示例:

Dictionary<String, String> parameters = new Dictionary<String, String>();
parameters["ARInvoice.DocType"] = Base.Document.Current.DocType;
parameters["ARInvoice.RefNbr"] = Base.Document.Current.RefNbr;

PXReportViewer reportViewer = new PXReportViewer();
reportViewer.ReportID = "SO643000";
reportViewer.Parameters = parameters;
reportViewer.LoadReport();

// 获取处理后的报表节点
PX.Reports.Data.ReportNode reportNode = reportViewer.ReportNode;

额外检查

  1. 先确认SO643000报表在设计器中的排序配置是否正确:打开报表设计界面,检查数据源的Sorting属性是否设置了原始排序规则。
  2. 确保参数注入过程中没有覆盖或清除数据源的排序条件。

内容的提问来源于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.01 17:05:59