我正在實施基於SharePoint 2010和MS Reporting Server的解決方案。我遇到了ReportViewerWepPart的問題。我有一個場景,當報告無法打印時,需要顯示自定義錯誤。不幸的是,與ReportViewer asp控件不同,ReportViewerWepPart沒有任何屬性/事件表明存在錯誤並且報告無法打印。花了一些時間解決了這個問題後,我使用反射來解決問題。我發現ReportViewerWepPart在內部使用了ReportViewer,並且我在此私有內部組件上附加了ReportError事件。這裏是我的代碼:如何處理ReportViewerWebPart報告打印錯誤?
…
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();
}
不幸的是,這種解決方案是在網絡部分的黑客攻擊。你認爲以這種方式使用反射會導致任何問題嗎?我錯過了什麼,是否有另一種方式來查看是否打印報告?