如何在 21.208 中获取报告字节

How to get report bytes in 21.208

我在尝试升级到 21.208 的 2020 R1 系统中有以下代码。问题是“SettingsProvider”没有“Instance”属性,因此,这会导致构建错误。此外,我收到 PXReportTools 已过时的警告,但我不确定用什么替换它?

此代码用于获取报告的 byte[],然后将其附加到电子邮件中。更新的 21.208 方法是什么?

                    Dictionary<string, string> dictionary = new Dictionary<string, string>();
                    dictionary["ARInvoice.DocType"] = current.DocType;
                    dictionary["ARInvoice.RefNbr"] = current.RefNbr;

                    Report report = PXReportTools.LoadReport("AR641000", (IPXResultset)null);
                    PXReportTools.InitReportParameters(report, (IDictionary<string, string>)dictionary, SettingsProvider.Instance.Default);
                    
                    
                    byte[] data = PX.Reports.Mail.Message.GenerateReport((object)ReportProcessor.ProcessReport(report), "PDF").First<byte[]>();

TIA!

从 21R2 开始,您需要使用依赖注入在图表中导入两个依赖项才能加载报告

[InjectDependency]
protected IReportLoaderService ReportLoader { get; private set; }

[InjectDependency]
protected IReportRenderer ReportRenderer { get; private set; }

然后使用这两个服务,您可以使用以下方法检索字节报告数据:

Dictionary<String, String> parameters = new Dictionary<String, String>();
Report _report = reportLoader.LoadReport(ARReports.InvoiceMemoReportID, null);
reportLoader.InitDefaultReportParameters(_report, parameters);

byte[] fileDate = null;

using (StreamManager streamMgr = new StreamManager())
{
    reportRenderer.Render(RenderType.FilterPdf, _report, deviceInfo: null, streamMgr);
    fileData = streamMgr.MainStream.GetBytes();
}

如果你想在本地保存它,你也可以将它保存在一个 FileInfo 对象中。