实现 IRenderingExtension 接口
呈现扩展插件从与实际数据相结合的报表定义中获取结果,并将得到的数据呈现为某种可用的格式。 组合的数据和格式的转换是通过一个实现 IRenderingExtension 的公共语言运行时 (CLR) 类完成的。 该类将对象模型转换为可由查看器、打印机或其他输出目标使用的输出格式。
IRenderingExtension 具有三个必须进行编码的方法:
Render - 呈现报表。
RenderStream - 呈现报表中特定的流。
GetRenderingResource - 获取报表所需的其他信息,例如图标。
下列各节更为详细地讨论这些方法。
Render 方法
Render 方法包含表示以下对象的参数:
要呈现的 report 本身。 此对象包含报表的属性、数据和布局信息。 report 是报表对象模型树的根。
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 方法检索信息而不执行报表的完整呈现。 有时,报表需要不需要呈现报表本身的信息。 例如,如果需要与呈现扩展插件关联的图标,则可以使用包含单个标记 <Icon> 的 deviceInfo 参数。 在此类情况下,可以使用 GetRenderingResource 方法。