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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

В построителе отчетов можно открыть отчет с сервера отчетов, который содержит ссылки на пользовательские сборки. Например, будут доступны для редактирования отчеты, созданные и развернутые с помощью конструктора отчетов в среде Business Intelligence Development Studio. Пользовательские сборки должны быть развернуты на сервере отчетов.

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

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

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

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

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

Для просмотра упорядоченного по категориям списка часто используемых функций, встроенных в службы Службы Reporting Services, используется диалоговое окно Выражение. При развертывании Общие функции и щелчке по категории в панели Элемент отображается список функций, включенных в выражение. Общие функции включают классы из пространств имен .NET Framework System..::..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, которая заменяет все вхождения слова «Bike» на "Bicycle" в поле SubCategory.

=Code.FixSpelling(Fields!SubCategory.Value)

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

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

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

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

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

Можно ссылаться на коллекции глобальных параметров через пользовательский код в блоке «Код» определения отчета или в предоставляемой пользовательской сборке. Коллекция параметров допускает только чтение, и у нее нет общих итераторов. Нельзя воспользоваться конструкцией Visual Basic For 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 может изменяться динамически во время выполнения, поэтому не следует рассчитывать на то, что это содержимое остается правильным в промежутках от одного вызова пользовательской сборки к другому (например, в переменной экземпляра). Те же рекомендации применяются, как правило, для всех встроенных коллекций.