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