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 パーツのハックです。そのような方法でリフレクションを使用すると、問題が発生する可能性があると思いますか? レポートが印刷されているかどうかを確認する別の方法はありますか?