tiene - Páginas de error personalizadas en Reporting Services 2008
reporting services pie de pagina (3)
Me gustaría volver a marcar (y enviar correos electrónicos de error) para todas las páginas de error predeterminadas de SSRS (imagen a continuación) cuando acceda a los informes a través de / ReportServer /. Ya estoy manejando el evento ASP OnError y algunos de los errores predeterminados de SSRS parecen captar sus propias excepciones y luego renderizo esta página para cancelar la respuesta antes de que se active el evento OnError.
¿Alguna idea sobre cómo puedo manejar SSRS para marcar todas las páginas de error?
Lamentablemente, no se puede usar los aspectos visuales de SSRS. Puede hacerlo si consume los informes directamente a través de SOAP y el servicio web.
Tuve un problema similar y se me ocurrió la siguiente solución. Es propenso a romper cosas si Microsoft cambia este método en particular. El siguiente código se agregará al encabezado de la página para asegurarse de que se ejecute después de que se cargue ReportViewer javascript, pero antes de que se cree una instancia de 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;
El código original del archivo de script de Microsoft ReportViewer (dentro de Microsoft.ReportViewer.WebForms, 8.0.0.0, .Net Framework 3.5 SP1) es:
function OnReportFrameLoaded()
{
this.m_reportLoaded = true;
this.ShowWaitFrame(false);
if (this.IsAsync && this.m_reportObject != null)
this.m_reportObject.OnFrameVisible();
}
RSClientController.prototype.OnReportFrameLoaded = OnReportFrameLoaded;
Creé esta solución para SSRS2005 y 2008. a continuación es la versión 2008r2
en reportviewer.aspx, agregue justo antes de </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>