Acumatica - 将合并报告添加到电子邮件附件

Posted

技术标签:

【中文标题】Acumatica - 将合并报告添加到电子邮件附件【英文标题】:Acumatica - Add combined report to email attachment 【发布时间】:2021-09-15 01:54:14 【问题描述】:

我目前正在尝试通过通知活动将合并报告添加到电子邮件附件中。我目前已经通过一个标准报告实现了这样的功能,该报告没有使用堆栈溢出问题的帮助:How do we attach report PDF/Excel file when i click on custom action on Sales order screen using Acumatica code。

但是,我似乎需要将组合报告转换为字节数组才能使用 sender.AddAttatchment()。我试过像这样生成两个报告,并将它们连接在一起形成一个字节数组,但它只会显示加载的最后一个报告:

            //Load First Report
            PX.Reports.Controls.Report _report = PXReportTools.LoadReport("AR010000", null);
            PXReportTools.InitReportParameters(_report, parameters,
                    SettingsProvider.Instance.Default);
            PX.Reports.Data.ReportNode reportNode = PX.Reports.Data.ReportProcessor.ProcessReport(_report);

            //Create Byte Array From First report
            byte[] first = PX.Reports.Mail.Message.GenerateReport(reportNode,
                 ReportProcessor.FilterPdf).First();

            //Load Second Report
            PX.Reports.Controls.Report _report2 = PXReportTools.LoadReport("AR010000", null);
            PXReportTools.InitReportParameters(_report2, parameters,
                    SettingsProvider.Instance.Default);
            PX.Reports.Data.ReportNode reportNode2 = PX.Reports.Data.ReportProcessor.ProcessReport(_report2);

            //Create Byte Array From Second Report
            byte[] second = PX.Reports.Mail.Message.GenerateReport(reportNode2,
                 ReportProcessor.FilterPdf).First();

            //Concat Both Byte Arrays

            byte[] finalReport = new byte[first.Length + second.Length];
            Buffer.BlockCopy(first, 0, finalReport, 0, first.Length);
            Buffer.BlockCopy(second, 0, finalReport, first.Length, second.Length);

            //Attatch The Reports To The Email
            sender.AddAttachment("Combined Report.pdf", finalReport.ToArray());

通常,要创建一个组合报告,我会使用这段代码:

 //Generate Combined Report 
            PXReportRequiredException combineReport = PXReportRequiredException.CombineReport(null, "AP010000", new Dictionary<string, string>(), false);

            //Convert Combined Report To Byte Array
            byte[] report = PX.Reports.Mail.Message.GenerateReport(combineReport,
                 ReportProcessor.FilterPdf).First();

但是,我不确定如何将其转换为字节数组,因为它不适用于此代码,因为我收到错误

Unable to cast object of type 'PX.Data.PXReportRequiredException' to type 'PX.Reports.Data.ReportNode'.

有没有人知道我该如何解决这个问题,或者如果有一些程序集引用我可以使用类似于用于将非组合报告转换为字节数组的程序集引用,它使用 PXReportRequiredException?

谢谢大家

【问题讨论】:

【参考方案1】:

不幸的是,连接字节数组不会达到你想要的效果。您需要找到第 3 方库,当我需要这样做时,我使用了 PDFSharp。看这里

Combining multiple PDFs using PDFSharp

【讨论】:

以上是关于Acumatica - 将合并报告添加到电子邮件附件的主要内容,如果未能解决你的问题,请参考以下文章

Acumatica创建装运锁违规异常问题

Acumatica 实施和数据输入

在无头模式下将 libreoffice 电子表格合并到多页文档中?

oMail - 将更改的合并字段从数据库表单添加到 vba 代码

如何将自定义 DB 字段保存到图形中的 DB-Acumatica

在 Python 中将多个 CSV 文件合并到电子表格的单独选项卡中