Я использую ReportingService2005 в приложении C # .net, которое обращается к серверу SSRS для создания нескольких отчетов в формате PDF и объединения их в один PDF.Это хорошо сработало для грубой внутренней программы, но я недавно развернул обновленные версии старых отчетов, чтобы сделать их более гибкими по некоторым параметрам.Эти отчеты были созданы путем копирования таблиц из старых версий для поддержания форматирования, а затем обновления выражений в соответствии с новой настройкой отчета.Один из этих отчетов, только в очень специфических контекстах, которые я могу повторить, если столкнусь (но не могу определить, что его вызовет), не будет отображаться в программе:
System.Web.Services.Protocols.SoapException - An error occurred during rendering of the report. --->
Microsoft.ReportingServices.ReportProcessing.UnhandledReportRenderingException: An error occurred during rendering of the report. --->
Microsoft.ReportingServices.OnDemandReportRendering.ReportRenderingException: An error occurred during rendering of the report. --->
Microsoft.ReportingServices.ReportProcessing.ReportProcessingException_NonExistingFieldReference: The expression referenced a non-existing field in the fields collection.
(добавлены разрывы строк, чтобы помочьс чтением.) Он не говорит, на какое поле ссылаются или какой элемент не работает, даже если я пытаюсь проанализировать исключение SoapException в отладке.Если я посмотрю на связанный журнал дампа на сервере SSRS, отчет будет выглядеть так:
library!ReportServer_0-113!248!03/21/2019-18:53:16:: e ERROR: Report server unique dump occured. Exception: Microsoft.ReportingServices.ReportProcessing.UnhandledReportRenderingException: An error occurred during rendering of the report. ---> Microsoft.ReportingServices.OnDemandReportRendering.ReportRenderingException: An error occurred during rendering of the report. ---> Microsoft.ReportingServices.ReportProcessing.ReportProcessingException_NonExistingFieldReference: The expression referenced a non-existing field in the fields collection.
at Microsoft.ReportingServices.ReportProcessing.OnDemandReportObjectModel.FieldsImpl.CheckedGetFieldByIndex(Int32 index)
at Microsoft.ReportingServices.RdlExpressions.ReportRuntime.EvaluateSimpleFieldReference(Int32 fieldIndex, VariantResult& result)
at Microsoft.ReportingServices.RdlExpressions.ReportRuntime.EvaluateSimpleExpression(ExpressionInfo expression, VariantResult& result)
at Microsoft.ReportingServices.RdlExpressions.ReportRuntime.EvaluateTextRunValueExpression(TextRun textRun)
at Microsoft.ReportingServices.ReportProcessing.OnDemandReportObjectModel.TextRunImpl.GetResult(IReportScopeInstance romInstance)
at Microsoft.ReportingServices.OnDemandReportRendering.InternalTextRunInstance.EvaluateOriginalValue()
at Microsoft.ReportingServices.OnDemandReportRendering.InternalTextRunInstance.get_OriginalValue()
at Microsoft.ReportingServices.OnDemandReportRendering.TextBoxInstance.EvaluateOriginalValue()
at Microsoft.ReportingServices.OnDemandReportRendering.TextBoxInstance.get_TypeCode()
at Microsoft.ReportingServices.Rendering.HPBProcessing.TextBox.GetAlignmentRight(Style style, StyleInstance styleInstance)
at Microsoft.ReportingServices.Rendering.HPBProcessing.TextBox.InitParagraphs()
at Microsoft.ReportingServices.Rendering.HPBProcessing.TextBox..ctor(TextBox source, PageContext pageContext)
at Microsoft.ReportingServices.Rendering.HPBProcessing.PageItem.Create(ReportItem source, Boolean tablixCellParent, Boolean ignoreKT, PageContext pageContext)
at Microsoft.ReportingServices.Rendering.HPBProcessing.Tablix.AddRowMember(TablixMember rowMember, Int32 colIndex, Int32 rowSpan, Int32 colSpan, LevelInfo childInfo, PageContext pageContext, Double updateWidth)
at Microsoft.ReportingServices.Rendering.HPBProcessing.Tablix.CreateRowMemberChildren(Tablix tablix, TablixMember rowMemberParent, Int32 defTreeLevel, Boolean parentBorderHeader, Int32 parentRowIndex, Int32 parentColIndex, Int32 sourceIndex, Boolean resetContext, Boolean parentHasFooters, LevelInfo parentLevelInfo, PageContext pageContext)
at Microsoft.ReportingServices.Rendering.HPBProcessing.Tablix.CreateDynamicRowMemberChildren(Tablix tablix, TablixMember rowMemberParent, Int32 defTreeLevel, Int32 sourceIndex, Int32 parentRowIndex, Int32 parentColIndex, Boolean parentHasFooters, LevelInfo parentLevelInfo, PageContext pageContext)
at Microsoft.ReportingServices.Rendering.HPBProcessing.Tablix.CreateTablixRows(Tablix tablix, TablixMember rowMemberParent, Int32 defTreeLevel, Boolean parentBord, Message: , Unhandled Exception: False
, который, кажется, больше не говорит мне, за исключением того, что ошибка возникает при попытке визуализации ячейки (которая нене помогу, есть верхний колонтитул, нижний колонтитул и один табликс).
Этот же отчет, с теми же параметрами, будет отлично работать в Visual Studio, ReportViewer через наш веб-сайт, веб-интерфейс SSRS и дажеесли у меня есть файл рендеринга в этой пользовательской программе как Excel вместо PDF.(Генерация в формате PDF через другие интерфейсы также работает нормально.) Я прочесал код отчета для ошибочных операторов Field!
, особенно там, где указан контекст (например, другой набор данных), и не нашел ничего плохого.
Я знаючто ReportingServices может создавать крайне эзотерические сообщения об ошибках [1], поэтому вполне возможно, что это вообще не связано с несуществующим полем, но я не могу понять, что может быть не так с отчетом или с тем, как яЯ звоню, чтобы сгенерировать это.Если я использую немного другой набор параметров, ссылаясь на диапазон дат вместо предварительно определенного периода времени, чтобы получить те же данные, он генерирует штраф;есть столбец, который не заполняется в этом случае, что делает его потенциальным виновником, но опять же я не могу найти ничего плохого.
Есть что-то, что я пропускаю, или я неправильно понимаю сообщение об ошибке?Есть ли другое место, которое на самом деле скажет мне, в какой ячейке Frackin 'есть ошибка?Последнее решение проблем с отчетами состояло в том, чтобы просто воссоздать их полностью с нуля, но я бы хотел этого избежать, так как отчет сложен с кучей мелких деталей.
Кроме того, я заметилGetAlignmentRight
на полпути через след;это то, что может помочь с отладкой?При рендеринге вызовов вправо / в центр / влево я мог бы очень болезненно сузить ячейку, если она вообще есть.Я попытался изменить все мои выровненные по правому краю ячейки, однако, и след не изменился. Редактировать: Нет, ячейка, которая вызвала проблему, была выровнена по центру, так что это не помогло бы в этомcase.
[1] в другом сообщении об ошибке, о котором я говорил в другом отчете, говорится, что на несуществующий элемент ReportItem ссылаются, когда фактической проблемой был тайм-аут из-за слишком долгого рендеринга;Я подтвердил, что это не проблема здесь