呈现扩展插件从与实际数据相结合的报表定义中获取结果,并将生成的数据呈现为可使用的格式。 组合数据和格式的转换是使用实现的公共语言运行时 (CLR) 类完成的 IRenderingExtension。 这会将对象模型转换为查看器、打印机或其他输出目标可消耗的输出格式。
有 IRenderingExtension 三种方法必须编码:
Render - 呈现报表。
RenderStream - 从报表呈现特定流。
GetRenderingResource - 获取报表所需的其他信息,例如图标。
以下部分更详细地讨论了这些方法。
Render 方法
该方法 Render 包含表示以下对象的参数:
要呈现的 报表 。 此对象包含报表的属性、数据和布局信息。 报表是报表对象模型树的根目录。
包含字符串字典对象的 ServerParameters ,以及报表服务器的参数(如果有)。
包含设备设置的 deviceInfo 参数。 有关详细信息,请参阅 将设备信息设置传递到呈现扩展插件。
包含字典NameValueCollection对象的 clientCapabilities 参数,该字典对象包含要呈现的客户端的相关信息。
包含有关呈现结果信息的 RenderProperties 。
createAndRegisterStream 是一个委托函数,用于获取要呈现到的流。
deviceInfo 参数
deviceInfo 参数包含呈现参数,而不是报表参数。 这些呈现参数将传递给呈现扩展插件。
deviceInfo 值由报表服务器转换为NameValueCollection对象。
deviceInfo 参数中的项被视为不区分大小写的值。 如果呈现请求由于 URL 访问而产生,则表单 rc:key=value 中的 URL 参数将转换为 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 参数。 在这些情况下,可以使用该方法 GetRenderingResource 。