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


Реализация интерфейса IRenderingExtension

Как было описано ранее в этом разделе, модуль подготовки отчетов отвечает за извлечение результатов из определения отчета, совмещенного с реальными данными, и преобразование результирующих данных в формат, готовый к применению. Преобразование совмещенных данных и форматирование выполняется средой CLR, реализующей интерфейс IRenderingExtension, преобразующий объектную модель в выходной формат, который может быть использован средством просмотра, принтером или другой целью вывода.

Интерфейс IRenderingExtension имеет три метода, которые должны быть реализованы. Они перечислены ниже.

  • Render — подготавливает отчет к просмотру.

  • RenderStream — подготавливает к просмотру определенный поток из отчета.

  • GetRenderingResource — возвращает дополнительные сведения, например значки, необходимые отчету.

В следующих разделах данные методы обсуждаются более подробно.

Метод Render

Метод Render содержит аргументы, представляющие следующие объекты.

  • Собственно отчет report, который необходимо подготовить к просмотру. Данный объект содержит свойства, данные и сведения о макете отчета. Report — это корневой узел дерева объектной модели отчета.

  • Параметр reportServerParameters, который содержит объект словаря строк с параметрами сервера отчетов (если такие существуют).

  • Параметры deviceInfo, которые содержат параметры устройств. Дополнительные сведения о параметрах устройств см. в разделе Настройки сведений об устройстве в службах Reporting Services.

  • Параметр clientCapabilities, который содержит объект словаря NameValueCollection, в котором содержатся сведения о клиенте, для которого происходит подготовка отчетов.

  • RenderProperties, который содержит сведения о результате визуализации.

  • createAndRegisterStream — функция-делегат, которую можно вызвать для получения потока, в который будет осуществляться подготовка отчета.

Параметр deviceInfo

Параметры deviceInfo являются параметрами визуализации, а не параметрами отчета. Данные параметры передаются модулю подготовки отчетов. Значения параметров deviceInfo преобразуются в объект NameValueCollection сервером отчетов. Элементы в параметре deviceInfo рассматриваются как значения без учета регистра. Если запрос на подготовку к просмотру пришел в результате доступа через URL-адрес, то параметры URL-адреса в формате rc:key=value преобразовываются в пары «ключ-значение» в объекте словаря deviceInfo. Код обнаружения обозревателя также поставляет следующие элементы в словарь clientCapabilities: EcmaScriptVersion, JavaScript, MajorVersion, MinorVersion, Win32, Type и AcceptLanguage. Любая пара «имя-значение» параметра deviceInfo, которую не удается распознать модулю подготовки отчетов, не учитывается. В следующем образце кода показывается образец метода GetRenderingResource, возвращающего значки.

public void GetRenderingResource (CreateStream createStreamCallback, NameValueCollection deviceInfo)
{
    string[] iconTagValues = deviceInfo.GetValues("Icon");
    if ((iconTagValues != null) && (iconTagValues.Length > 0) )
    {
        // Create a stream to output to.
        Stream outputStream = createStreamCallback(m_iconResourceName, "gif", null, "image/gif", false);
        // Get the GIF image for one of the buttons on the toolbar
        Image requiredImage = (Image) m_resourcemanager.GetObject(m_iconResourceName
        // Write the image to the output stream
        requiredImage.Save(outputStream, requiredImage.RawFormat);
    }
    return;
}

Метод RenderStream

Метод RenderStream подготавливает к просмотру определенный поток из отчета. Все потоки создаются при начальном вызове метода Render, однако изначально потоки не возвращаются клиенту. Данный метод используется для вторичных потоков (например, при подготовке отчетов в формате HTML) или дополнительных страниц многостраничного модуля подготовки отчетов (например, модуль подготовки изображений или модуль подготовки EMF).

Метод GetRenderingResource

В некоторых случаях отчету необходимы данные, которые не требуют подготовки отчета. Например, если нужно получить значок, связанный с модулем подготовки отчетов, то следует использовать параметр deviceInfo, содержащий единственный тег <Icon>. В подобных случаях можно использовать метод GetRenderingResource. Данный метод получает данные, не выполняя всю визуализацию отчета.