2008-10-09 4 views
3

Я хочу повторно маркировать (и отправлять сообщения об ошибках) для всех страниц ошибки ошибок SSRS (рисунок ниже) при доступе к отчетам через/ReportServer /. Я уже обрабатываю событие ASP OnError и ошибок SSRS по умолчанию, похоже, ломают собственные исключения, а затем визуализирует эту страницу, отменяя ответ до того, как событие OnError будет запущено.Пользовательские страницы ошибок в Reporting Services 2008

Любая идея о том, как я могу получить ручку в SSRS для маркирования всех страниц ошибок?

Reporting Services Error

ответ

1

К сожалению, вы не можете при использовании визуальных аспектов SSRS. Вы можете, если вы используете отчеты напрямую через SOAP и веб-службу.

1

У меня была аналогичная проблема и вышло со следующим решением. Он подвержен нарушениям, если Microsoft изменит этот конкретный метод. Следующий код будет добавлен в заголовок страницы, чтобы убедиться, что он запускается после загрузки JavaScript-сообщения ReportViewer, но до создания экземпляра 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 && this.m_reportObject != null) 
     this.m_reportObject.OnFrameVisible(); 
} 
RSClientController.prototype.OnReportFrameLoaded = OnReportFrameLoaded; 
1

я создал это решение для SSRS2005 и 2008. ниже 2008R2 версия

в reportviewer.aspx, добавьте прямо перед </form>

<script type="text/javascript"> 
var rptDivString=document.getElementById('ReportViewerControl_ctl10_NonReportContent').innerHTML; 
//alert(rptDivString); 
var numPermError = rptDivString.search(/permissions/i); 
if (numPermError>0) 
{ 
var docTitle = document.title; 
var reportName = docTitle.substr(0,docTitle.length-16); 
alert('Reporting Services permissions error in report: ' + reportName); 
} 
</script> 
Смежные вопросы