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

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

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

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

Внедренный код

Чтобы добавить внедренный код в отчет, используйте кодовую страницу диалогового окна Свойства отчета. Этот созданный блок кода может содержать несколько методов. Методы во внедренном коде должны быть написаны на языке MicrosoftVisual Basic и основываться на экземпляре. Обработчик отчетов автоматически добавляет ссылки для пространств имен System.Convert и System.Math. Для добавления дополнительных ссылок на сборки используйте страницу Ссылки диалогового окна Свойства отчета. Дополнительные сведения см. в разделах Как добавить код в отчет (службы Reporting Services) и Как добавить в отчет ссылку на сборку (службы Reporting Services).

Методы во внедренном коде доступны через глобально определенный элемент 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

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

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

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

Следующая таблица включает примеры ссылок на встроенную коллекцию 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 см. в разделе Использование пользовательских сборок с отчетами. Инструкции о добавлении ссылки в отчет см. в разделе Как добавить в отчет ссылку на сборку (службы 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, а потом произведите предварительный просмотр.

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

См. также

Справочник

Примеры выражений (службы Reporting Services)

Основные понятия

Работа с выражениями отчетов