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






К сожалению, вы не можете использовать визуальные аспекты SSRS. Вы можете, если будете использовать отчеты напрямую через SOAP и веб-службу.
У меня была аналогичная проблема, и я пришел к следующему решению. Если 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;
Я создал это решение для 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>