Поделиться через


Пользовательский код и ссылок на сборки в выражениях в конструкторе отчетов (службы SSRS)

Можно добавлять ссылки на пользовательский код, внедренный в отчет, или пользовательские сборки, построенные и сохраненные на компьютере и развернутые на сервере отчетов. Используйте внедренный код для пользовательских констант, сложных функций или функций, которые используются в одном отчете несколько раз. Сборки с пользовательским кодом используйте для сохранения кода в одном месте и его общего использования в нескольких отчетах. Пользовательский код может включать новые пользовательские константы, переменные, функции или подпрограммы. Можно включать ссылки, доступные только для чтения, во встроенные коллекции, например коллекцию Parameters. Однако эти наборы значений данных отчета невозможно передать пользовательским функциям (в частности, не поддерживаются пользовательские статистические вычисления).

Примечание по безопасностиПримечание по безопасности

В критичных по времени вычислениях, которые выполняются один раз при запуске и значения которых требуется сохранить неизменными в процессе обработки отчета, рассмотрите возможность использования групповой переменной или переменной отчета. Дополнительные сведения см. в разделе Ссылки на коллекции переменных отчета и группы (построитель отчетов и службы SSRS).

Конструктор отчетов — предпочтительная среда создания отчетов, используемая для добавления пользовательского кода в отчет. Построитель отчетов поддерживает обработку отчетов, которые содержат допустимые выражения или ссылки на пользовательские сборки на сервере отчетов. В построителе отчетов нет способа добавить ссылку в пользовательскую сборку.

ПримечаниеПримечание

Следует помнить, что при обновлении сервера отчетов отчеты, которые зависят от пользовательских сборок, могут потребовать дополнительных шагов для завершения обновления. Дополнительные сведения см. в разделе Использование помощника по обновлению для подготовки к обновлениям.

ПримечаниеПримечание

В построителе отчетов или конструкторе отчетов SQL Server Data Tools можно создавать и изменять определения отчета (RDL). В каждой среде разработки существуют различные способы создания, открытия и сохранения отчетов и связанных элементов. Дополнительные сведения см. в разделе Разработка отчетов в построителе отчетов и конструкторе отчетов (SSRS) на веб-сайте microsoft.com.

В данной статье

Работа с пользовательским кодом в построителе отчетов

Включение ссылок к наиболее часто используемым функциям

Включение ссылок к наименее часто используемым функциям

Включение ссылок к внешним сборкам

Включение внедренного кода

Включение ссылок на параметры из кода

Включение ссылок на код из пользовательских сборок

Передача встроенных коллекций в пользовательские сборки

Работа с пользовательским кодом в построителе отчетов

В построителе отчетов можно открыть отчет на сервере отчетов, который включает в себя ссылки на пользовательские сборки. Например, можно редактировать отчеты, которые созданы и развертываются с помощью конструктора отчетов в среде SQL Server Data Tools (SSDT). Пользовательские сборки должны быть развернуты на сервере отчетов.

Нельзя выполнить следующие действия.

  1. Добавлять ссылки или экземпляры члена класса в отчет.

  2. Просматривать отчет с ссылками на пользовательские сборки в локальном режиме.

Значок стрелки, используемый со ссылкой «В начало»В начало

Включение ссылок к наиболее часто используемым функциям

Для просмотра упорядоченного по категориям списка часто используемых функций, встроенных в службы Службы Reporting Services, используется диалоговое окно Выражение. При развертывании Общие функции и щелчке по категории в панели Элемент отображается список функций, включенных в выражение. Общие функции включают классы из пространств имен .NET FrameworkSystem.Math и System.Convert и функций библиотеки времени выполнения Visual Basic. Для удобства существует просмотр в диалоговом окне Выражение наиболее часто используемых функций, где они перечислены по категориям: текст, дата и время, математические, проверка, выполнение программы, статистическая обработка, финансовые, преобразование и прочие. Менее часто используемые функции не отображаются в списке, но тем не менее могут использоваться в выражении.

Для использования встроенной функции дважды щелкните имя функции на панели «Элемент». На панели «Описание» отображается описание функции, а на панели «Пример» — пример ее вызова. При вводе имени функции и открывающей круглой скобки ( на панели кода справка IntelliSense покажет все допустимые варианты вызова этой функции. Например, чтобы вычислить максимальное значение для поля с именем Quantity в таблице, добавьте простое выражение =Max( в панель кода и затем используйте смарт-теги для просмотра всех возможных действительных синтаксисов для вызова функции. Чтобы завершить этот пример, введите =Max(Fields!Quantity.Value).

Дополнительные сведения о каждой функции см. в разделе System.Math, System.Convert и в статье Компоненты библиотеки Visual Basic времени выполнения на сайте MSDN.

Значок стрелки, используемый со ссылкой «В начало»В начало

Включение ссылок к наименее часто используемым функциям

Для включения ссылки к наименее часто используемым пространствам имен CLR необходимо использовать полную ссылку, например System.Text.StringBuilder. Для наименее часто используемых функций технология Intellisense не поддерживается на панели кода диалогового окна Выражение.

Дополнительные сведения см. в разделе Компоненты библиотеки времени выполнения Visual Basic в MSDN.

Включение ссылок к внешним сборкам

Для включения ссылки к классу во внешней сборке необходимо определить сборку для обработчика отчетов. Используйте страницу Ссылки диалогового окна Свойства отчета для определения полного имени сборки, добавляемого в отчет. В выражении необходимо использовать полное имя для класса сборки. Классы во внешней сборке не отображаются в диалоговом окне Выражение. Для отображения необходимо вести правильное имя класса. Полное имя включает пространство имен, имя класса и имя элемента.

Значок стрелки, используемый со ссылкой «В начало»В начало

Включение внедренного кода

Чтобы добавить внедренный код в отчет, используйте вкладку «Код» диалогового окна Свойства отчета. Этот созданный блок кода может содержать несколько методов. Методы во внедренном коде должны быть написаны на языке Microsoft Visual Basic, они должны быть основаны на экземпляре. Обработчик отчетов автоматически добавляет ссылки на пространства имен System.Convert и System.Math. На странице Ссылки в диалоговом окне Свойства отчета можно добавить ссылки на другие сборки. Дополнительные сведения см. в разделе Добавление в отчет ссылку на сборку (службы SSRS).

Методы во внедренном коде доступны через глобально определенный элемент Code. Получить к ним доступ можно с помощью ссылки на элемент Code и имени метода. В следующем примере демонстрируется вызов метода ToUSD, который преобразует значение поля StandardCost в долларовое значение:

=Code.ToUSD(Fields!StandardCost.Value)

Чтобы сослаться на встроенные коллекции в пользовательском коде, включите ссылку во встроенный объект Report:

=Report.Parameters!Param1.Value

В следующих примерах показано, как можно определить некоторые пользовательские константы и переменные:

Public Const MyNote = "Authored by Bob"
Public Const NCopies As Int32 = 2
Public Dim  MyVersion As String = "123.456"
Public Dim MyDoubleVersion As Double = 123.456

Хотя пользовательские константы не появляются в категории Константы диалогового окна Выражение (в котором отображаются только встроенные константы), на них можно добавить ссылку из любого выражения, как это показано в следующих примерах. В выражении пользовательская константа рассматривается как данные типа Variant.

=Code.MyNote
=Code.NCopies
=Code.MyVersion
=Code.MyDoubleVersion

Следующий пример содержит ссылку на код и код реализации функции FixSpelling, которая подставляет текст "Bicycle" вместо всех вхождений текста «Bike» в поле SubCategory.

=Code.FixSpelling(Fields!SubCategory.Value)

Следующий код показывает реализацию метода FixSpelling при его внедрении в блок кода определения отчета. Это пример показывает использование полной ссылки на класс Microsoft.NET FrameworkStringBuilder.

Public Function FixSpelling(ByVal s As String) As String
   Dim strBuilder As New System.Text.StringBuilder(s)
   If s.Contains("Bike") Then
      strBuilder.Replace("Bike", "Bicycle")
      Return strBuilder.ToString()
      Else : Return s
   End If
End Function

Дополнительные сведения о встроенных коллекциях объектов и инициализации см. в разделах Встроенные глобальные значения и ссылки на пользовательские поля (построитель отчетов и службы SSRS) и Инициализация объектов пользовательских сборок.

Значок стрелки, используемый со ссылкой «В начало»В начало

Включение ссылок на параметры из кода

Можно ссылаться на коллекции глобальных параметров через пользовательский код в блоке «Код» определения отчета или в предоставляемой пользовательской сборке. Коллекция параметров допускает только чтение, и у нее нет общих итераторов. Нельзя воспользоваться конструкцией Visual BasicFor Each для пошагового просмотра коллекции. Прежде чем сослаться на параметр из своего кода, необходимо узнать его имя, заданное в определении отчета. Однако можно организовать итерацию по всем значениям многозначного параметра.

Следующая таблица включает примеры ссылок на встроенную коллекцию Parameters из пользовательского кода.

Описание

Ссылки в выражении

Определение пользовательского кода

Передача всей коллекции глобальных параметров в пользовательский код.

Эта функция возвращает значение конкретного параметра отчета MyParameter.

=Code.DisplayAParameterValue(Parameters)

Public Function DisplayAParameterValue(

ByVal parameters as Parameters) as Object

Return parameters("MyParameter").Value

End Function

Передача отдельных параметров в пользовательский код.

Этот пример возвращает значение переданного параметра. Если этот параметр является многозначным, возвращаемая строка представляет собой объединение всех значений.

=Code.ShowParametersValues(Parameters!DayOfTheWeek)

Public Function ShowParameterValues(ByVal parameter as Parameter)
 as String
   Dim s as String 
   If parameter.IsMultiValue then
      s = "Multivalue: " 
      For i as integer = 0 to parameter.Count-1
         s = s + CStr(parameter.Value(i)) + " " 
      Next
   Else
      s = "Single value: " + CStr(parameter.Value)
   End If
   Return s
End Function

Значок стрелки, используемый со ссылкой «В начало»В начало

Включение ссылок на код из пользовательских сборок

Для использования в отчете пользовательских сборок необходимо сначала создать сборку, сделать ее доступной для конструктора отчетов, добавить в отчет на нее ссылку, а затем использовать в выражениях отчета ссылки на методы этой сборки. При развертывании отчета на сервере отчетов следует также развернуть на сервере отчетов и пользовательскую сборку.

Дополнительные сведения о создании пользовательской сборки и предоставления к ней доступа для служб Службы Reporting Services см. в разделе Использование пользовательских сборок с отчетами.

Для ссылки в выражении на пользовательский код следует вызвать элемент класса этой сборки. Способ создания ссылки зависит от того, является ли метод статическим или основывается на экземпляре. Статические методы в пользовательской сборке доступны из всех элементов отчета. В выражениях можно получить доступ к статическим методам с помощью указания пространства имен, класса и имени метода. В следующем примере производится вызов метода ToGBP, который преобразует значения поля StandardCost из долларов в фунты стерлинги:

=CurrencyConversion.DollarCurrencyConversion.ToGBP(Fields!StandardCost.Value)

Методы на основе экземпляра доступны через глобально определенный элемент Code. Получить к ним доступ можно с помощью ссылки на элемент Code, затем на экземпляр и на имя метода. В следующем примере производится вызов метода экземпляра ToEUR, который преобразует значение поля StandardCost из долларов в евро:

=Code.m_myDollarCoversion.ToEUR(Fields!StandardCost.Value)
ПримечаниеПримечание

В конструкторе отчетов пользовательская сборка загружается один раз и не выгружается до тех пор, пока не будет закрыта среда Visual Studio. Если при предварительном просмотре производятся изменения использованной в отчете пользовательской сборки, а затем отчет просматривается снова, то при повторном открытии отчета для предварительного просмотра изменения отображаться не будут. Чтобы перезагрузить сборку, закройте, а затем повторно откройте среду Visual Studio, а потом произведите предварительный просмотр.

Дополнительные сведения о доступе к коду см. в разделе Доступ к пользовательским сборкам посредством выражений.

Значок стрелки, используемый со ссылкой «В начало»В начало

Передача встроенных коллекций в пользовательские сборки

Если необходимо передать встроенные коллекции, например Globals или Parameters, в пользовательскую сборку для обработки, необходимо добавить ссылку на сборку в проекте кода в сборку, определяющую встроенные коллекции и доступ к правильному пространству имен. В зависимости от того, разрабатывается ли пользовательская сборка для отчета, выполняемого на сервере отчетов (серверный отчет), или отчета, выполняемого локально, в приложении платформы .NET (локальный отчет) может понадобиться использовать ссылки на разные сборки. Подробные сведения см. ниже.

  • Пространство имен: Microsoft.ReportingServices.ReportProcessing.ReportObjectModel

  • Сборка (локальный отчет): Microsoft.ReportingServices.ProcessingObjectModel.dll

  • Сборка (серверный отчет): Microsoft.ReportViewer.ProcessingObjectModel.dll

Поскольку содержимое коллекций Fields и ReportItems может динамически изменяться во время выполнения, доступ к нему не следует производить посредством вызовов к пользовательской сборке (например, в переменной члена). Та же самая рекомендация применяется обычно для всех встроенных коллекций.

См. также

Задания

Добавление кода в отчет (службы SSRS)

Добавление в отчет ссылку на сборку (службы SSRS)

Справочник

Примеры выражений (построитель отчетов и службы SSRS)

Другие ресурсы

Использование пользовательских сборок с отчетами

Учебники по службам Reporting Services (SSRS)

Образцы отчетов (построитель отчетов и службы SSRS)