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

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

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

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

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

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

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

метод Render

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

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

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

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

  • Параметр 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 или других страницах модуля отрисовки на нескольких страницах, таких как Image/EMF.

Метод GetRenderingResource

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