如何处理ReportViewerWebPart报告打印错误



我正在基于SharePoint 2010和MS Reporting Server实现解决方案。我遇到了ReportViewerWeppart的问题。我有一个场景,当无法打印报告时,我需要显示自定义错误。不幸的是,与ReportViewer ASP控件不同,ReportViewerWeppart没有任何属性/事件,表明存在错误,并且该报告无法打印。在解决问题上花了一些时间后,我使用反射进行了解决方案。我发现ReportViewerWeppart使用了内部ReportViewer,并且我在此私人内部组件上附加了ReporterRor事件。这是我的代码:

…
            try
            {
                ReportViewer rv = (reportViewer.GetType().GetField("m_reportViewer", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(reportViewer) as ReportViewer);
                rv.ReportError += new Microsoft.Reporting.WebForms.ReportErrorEventHandler(ReportWidgetControl_ReportError);
            }
            catch(Exception e)
            {
                LogHandler.LogError(e, "Unable to attach ReportViewerWebPart error hadler.");
            }
…
        void ReportWidgetControl_ReportError(object sender, Microsoft.Reporting.WebForms.ReportErrorEventArgs e)
        {
            reportViewer.Visible = false;
            HandleError();
        }

不幸的是,此解决方案是Web部分中的一个黑客攻击。您是否认为以这种方式进行反射会导致任何问题?我是否缺少某些东西,还有另一种方法可以查看报告是否打印了吗?

这很好,但是我会谨慎地捕获所有例外。看起来您正在隐藏报告视图并调用您的handleror代码,无论其错误是什么。可能发生的例外是次要的,并且在内部没有问题的情况下进行处理,并且隐藏报告视图对象可能不合适。我不知道您的句柄代码做了什么,但我建议将错误记录到日志表或文件,直到您发现要处理的确切打印错误,然后只担心处理该错误。

<</p>

相关内容

  • 没有找到相关文章

最新更新