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

Область применения: конструктор отчетов в SQL Server Data Tools Not supported Power BI построитель отчетов Microsoft построитель отчетов Not supported (SSRS)

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

Важно!

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

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

Примечание.

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

Примечание.

Создать и изменить определение для отчета на страницу (RDL-файл) можно с помощью построителя отчетов (Майкрософт), построителя отчетов Power BI и конструктора отчетов в SQL Server Data Tools.

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

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

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

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

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

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

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

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

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

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

Для включения ссылки на наименее часто используемые пространства имен CLR необходимо использовать полную ссылку, например 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 при его внедрении в блок кода определения отчета. Этот пример демонстрирует использование полной ссылки на класс StringBuilder Microsoft .NET Framework.

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) и Инициализация объектов пользовательских сборок.

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

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

Следующая таблица включает примеры ссылок на встроенную коллекцию 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  

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

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

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

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

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

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

=Code.m_myDollarCoversion.ToEUR(Fields!StandardCost.Value)  

Примечание.

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

Дополнительные сведения о доступе к коду см. в разделе Accessing Custom Assemblies Through Expressions.

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

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

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

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

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

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

См. также

Добавление кода в отчет (SSRS)
Использование пользовательских сборок с отчетами
Добавление ссылки на сборку в отчет (SSRS)
Учебники по службам Reporting Services (SSRS)
Примеры выражений (построитель отчетов и службы SSRS)
Образцы отчетов (построитель отчетов и службы SSRS)