用户可以生成最大数量的报告导出吗?

2020-09-20 22:40发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我有一个Windows 2012 64位服务应用程序(内置于c#VS2010中,CR引擎版本v2.0.0.50727),除其他一些任务外,该应用程序还从非结构化文件中解析文本,创建Crystal报表,然后自动保存该报表 作为PDF到磁盘。 此过程可以正常运行约12个小时,然后在调用CReport.Export()时突然开始生成错误。 错误是"对象引用未设置为对象的实例"。 如果我将服务帐户切换到其他用户,则它将再次开始工作约12个小时(可能有一定数量的导出),然后开始产生错误。 停止和启动服务没有任何作用,用户根本无法再调用导出方法。 我已经用GUI调用了相同的代码来复制了此代码。 看来用户达到了报告导出的最大数量,然后无法再导出报告。 下面是用于生成报告的代码(为简洁起见,对其进行了重新键入),非常感谢您的帮助!

对象报告=新的Reports.ExportContent();
 ReportDocument crReportDocument =(Reports.ExportContent)报告;
 crReportDocument.SetDataSource((DataTable)contentReport.Content);
 流crIn = crReportDocument.ExportToStream(ExportFormatType.PortableDocFormat); //此调用在为用户导出了一定数量后开始失败
 FileStream crOut =新的FileStream(outputinfo)
//创建一个缓冲区
//有一些数据时先写入缓冲区,然后写入文件
//关闭文件流
//一些错误捕获
//最后
 crReportDocument.Close();
 crReportDocument.Dispose();
 收集
 

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我有一个Windows 2012 64位服务应用程序(内置于c#VS2010中,CR引擎版本v2.0.0.50727),除其他一些任务外,该应用程序还从非结构化文件中解析文本,创建Crystal报表,然后自动保存该报表 作为PDF到磁盘。 此过程可以正常运行约12个小时,然后在调用CReport.Export()时突然开始生成错误。 错误是"对象引用未设置为对象的实例"。 如果我将服务帐户切换到其他用户,则它将再次开始工作约12个小时(可能有一定数量的导出),然后开始产生错误。 停止和启动服务没有任何作用,用户根本无法再调用导出方法。 我已经用GUI调用了相同的代码来复制了此代码。 看来用户达到了报告导出的最大数量,然后无法再导出报告。 下面是用于生成报告的代码(为简洁起见,对其进行了重新键入),非常感谢您的帮助!

对象报告=新的Reports.ExportContent();
 ReportDocument crReportDocument =(Reports.ExportContent)报告;
 crReportDocument.SetDataSource((DataTable)contentReport.Content);
 流crIn = crReportDocument.ExportToStream(ExportFormatType.PortableDocFormat); //此调用在为用户导出了一定数量后开始失败
 FileStream crOut =新的FileStream(outputinfo)
//创建一个缓冲区
//有一些数据时先写入缓冲区,然后写入文件
//关闭文件流
//一些错误捕获
//最后
 crReportDocument.Close();
 crReportDocument.Dispose();
 收集
 
付费偷看设置
发送
3条回答
callcenter油条
1楼 · 2020-09-20 23:28.采纳回答

您正在使用什么SP? 那不应该发生吗?

何必丶何苦呢
2楼-- · 2020-09-20 23:35

该数字是框架,您使用的是哪个Service Pack? 在"程序和功能"中,并列出了实际版本。

https: //wiki.scn.sap.com/wiki/display/BOBJ/Crystal+Reports%2C+Developer+for+Visual+Studio+Downloads

没有限制,但您可能会用完资源。

为什么要导出到流?

尝试一下:

如果(ExportTypeSelected ==" crReportExportFormatPDF")
 #region PDF
 {
    //这项工作不会改变
    //这将获取报告名称,并将导出名称设置为与扩展名相同的名称
     字符串outputFileName ="";
     字符串MyRptName = rpt.FileName.ToString();
     outputFileName = MyRptName.Substring(9,rpt.FileName.Length-9);
     outputFileName = outputFileName.Substring(0,(outputFileName.Length-3))+" pdf";

     尝试
     {
         如果(File.Exists(outputFileName))
         {
             File.Delete(outputFileName);
         }

         CrystalDecisions.ReportAppServer.ReportDefModel.PDFExportFormatOptions RasPDFExpOpts = new PDFExportFormatOptions();

         尝试
         {
             RasPDFExpOpts = rptClientDoc.get_SavedExportOptions(CrReportExportFormatEnum.crReportExportFormatPDF);
         }
         抓住(例外)
         {
             btnSQLStatement.Text ="错误:" + ex.Message;
            //返回;
         }

        //现在设置它们:
        //RasPDFExpOpts.CreateBookmarksFromGroupTree = false;
        //RasPDFExpOpts.EndPageNumber = 1;
        //RasPDFExpOpts.StartPageNumber = 1;

        //保存修改后的信息
         如果(RasPDFExpOpts!= null)
             rptClientDoc.set_SavedExportOptions(CrReportExportFormatEnum.crReportExportFormatPDF,RasPDFExpOpts);

         CrystalDecisions.ReportAppServer.ReportDefModel.ExportOptions exportOpts1 =新的CrystalDecisions.ReportAppServer.ReportDefModel.ExportOptions();
         exportOpts1.ExportFormatType = CrReportExportFormatEnum.crReportExportFormatPDF;
         exportOpts1.FormatOptions = RasPDFExpOpts;

        //和导出
         rptClientDoc.PrintOutputController.ExportEx(exportOpts1).Save(outputFileName,true);
         MessageBox.Show("导出到PDF已完成","",MessageBoxButtons.OK,MessageBoxIcon.Information);
     }
     抓住(例外)
     {
         btnSQLStatement.Text ="错误:" + ex.Message;
         返回;
     }

    ////更改选择公式并再次导出
    //rpt.RecordSelectionFormula =" {Customer.Customer信用ID}> = 11";
    //rpt.Refresh();
    //outputFileName = outputFileName.Substring(0,(outputFileName.Length-3))+" 1.pdf";

    //尝试
    //{
    //如果(File.Exists(outputFileName))
    //{
    //File.Delete(outputFileName);
    //}

    //CrystalDecisions.ReportAppServer.ReportDefModel.PDFExportFormatOptions RasPDFExpOpts = new PDFExportFormatOptions();

    //尝试
    //{
    //RasPDFExpOpts = rptClientDoc.get_SavedExportOptions(CrReportExportFormatEnum.crReportExportFormatPDF);
    //}
    //catch(异常例外)
    //{
    //btnSQLStatement.Text =" ERROR:" + ex.Message;
    ////返回;
    //}

    ////立即设置它们:
    ////RasPDFExpOpts.CreateBookmarksFromGroupTree = false;
    ////RasPDFExpOpts.EndPageNumber = 1;
    ////RasPDFExpOpts.StartPageNumber = 1;

    ////保存修改后的信息
    //如果(RasPDFExpOpts!= null)
    //rptClientDoc.set_SavedExportOptions(CrReportExportFormatEnum.crReportExportFormatPDF,RasPDFExpOpts);

    //CrystalDecisions.ReportAppServer.ReportDefModel.ExportOptions exportOpts1 = new CrystalDecisions.ReportAppServer.ReportDefModel.ExportOptions();
    //exportOpts1.ExportFormatType = CrReportExportFormatEnum.crReportExportFormatPDF;
    //exportOpts1.FormatOptions = RasPDFExpOpts;

    ////并导出
    //rptClientDoc.PrintOutputController.ExportEx(exportOpts1).Save(outputFileName,true);
    //MessageBox.Show("导出到第二次完成的PDF","",MessageBoxButtons.OK,MessageBoxIcon.Information);
    //}
    //catch(异常例外)
    //{
    //btnSQLStatement.Text =" ERROR:" + ex.Message;
    //return;
    //}
    //这项工作不会改变
     }
 #endregion PDF 

hengyuye
3楼-- · 2020-09-20 23:30

嗨唐。 谢谢回答。 我实际上能够弄清楚发生了什么。 即使我正在关闭报告并进行处理,AppData \ Temp文件夹中仍存在.tmp文件。 每创建8个文件,就会有一个文件存在。 一旦达到65K CR左右的文件数量,就不再创建临时文件并可能会产生错误。 处理后,我添加了一些代码以从Temp文件夹中清除.tmp文件,从而达到了目的。 再次感谢!

一周热门 更多>