实现 IRenderingExtension 接口

呈现扩展插件从与实际数据相结合的报表定义中获取结果,并将得到的数据呈现为某种可用的格式。 组合的数据和格式的转换是通过一个实现 IRenderingExtension 的公共语言运行时 (CLR) 类完成的。 该类将对象模型转换为可由查看器、打印机或其他输出目标使用的输出格式。

IRenderingExtension 具有三个必须进行编码的方法:

下列各节更为详细地讨论这些方法。

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 方法。