Реализация интерфейса 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) или дополнительных страниц многостраничного модуля подготовки отчетов (например, модуль подготовки изображений или модуль подготовки EMF).
Метод GetRenderingResource
Метод GetRenderingResource получает данные, не выполняя полную подготовку отчета. В некоторых случаях отчету необходимы данные, которые не требуют подготовки отчета. Например, если нужно получить значок, связанный с модулем подготовки отчетов, следует использовать параметр deviceInfo, содержащий единственный тег <Icon>. В подобных случаях можно использовать метод GetRenderingResource.