リモートモードと非同期モードでASP.NET ReportViewerを使用してレポート例外を処理する

asp.net reporting-services reportviewer

Microsoft.Reporting.WebForms.ReportViewerコンポーネントを使用してレポートサーバー(SSRS)レポートを非同期に表示するレポートページがあります。 現時点でエラーが発生した場合、ReportViewerコントロール内にメッセージが表示されます。

ユーザーがわかりやすいメッセージを受け取るように、カスタムエラー処理ロジックを追加したいと思います。 どうやってこれを達成し、それでもビューアを非同期モードで実行し、レポートをSSRSサーバーにレンダリングすることができますか?

ReportViewer.HandleErrorイベントを監視しても、ページのポストバックはすでに完了しているため機能しません。

  2  2


ベストアンサー

ReportViewer JavaScriptを調べた後、私は以下の解決策を思いつきました。 マイクロソフトがこの特定の方法を変更した場合、問題が起きやすくなります。 次のコードをページのヘッダーに追加して、ReportViewer JavaScriptがロードされた後、RSClientControllerのインスタンスが作成される前に確実に実行されるようにします。

// This replaces a method in the ReportViewer javascript. If Microsoft updates
// this particular method, it may cause problems, but that is unlikely to
// happen.The purpose of this is to redirect the user to the error page when
// an error occurs. The ReportViewer.ReportError event is not (always?) raised
// for Remote Async reports
function OnReportFrameLoaded(){this.m_reportLoaded = true; this.ShowWaitFrame(false);

if(this.IsAsync){if(this.m_reportObject == null){window.location = '<%= HttpRuntime.AppDomainAppVirtualPath%> / Error.aspx'; } else {this.m_reportObject.OnFrameVisible();} RSClientController.prototype.OnReportFrameLoaded = OnReportFrameLoaded;

Microsoft ReportViewerスクリプトファイル(Microsoft.ReportViewer.WebForms、8.0.0.0、.Net Framework 3.5 SP1内)の元のコードは次のとおりです。

function OnReportFrameLoaded(){this.m_reportLoaded = true; this.ShowWaitFrame(false);

if(this.IsAsync

1


タイトルとURLをコピーしました