Implementar la interfaz IRenderingExtension

La extensión de renderizado toma los resultados de una definición de informe que se combina con los datos reales y convierte los datos resultantes en un formato utilizable. La transformación de los datos combinados y el formato se realiza utilizando una clase de ejecución de lenguaje común (CLR) que implementa IRenderingExtension. Esto transforma el modelo de objeto en un formato de salida que puede ser consumido por un visor, impresora u otro destino de salida.

Tiene IRenderingExtension tres métodos que deben ser codificados:

Las siguientes secciones analizan estos métodos con más detalle.

Método de renderizado

El Render método contiene argumentos que representan los siguientes objetos:

  • El informe que quieres renderizar. Este objeto contiene propiedades, datos e información de diseño para el informe. El informe es la raíz del árbol del modelo de objetos de informe.

  • Los ServerParameters que contienen el objeto del diccionario de cadenas, con los parámetros para el servidor de informes, si los hay.

  • El parámetro deviceInfo que contiene la configuración del dispositivo. Para más información, consulte Pasar la configuración de información de dispositivos a extensiones de renderizado.

  • El parámetro clientCapabilities que contiene un NameValueCollection objeto diccionario que contiene información sobre el cliente al que estás renderizando.

  • El parámetro RenderProperties que contiene información sobre el resultado de renderizado.

  • El createAndRegisterStream es una función de delegado que se llama para obtener un flujo en el que renderizar.

parámetro deviceInfo

El parámetro deviceInfo contiene parámetros de renderizado, no parámetros de informe. Estos parámetros de renderizado se pasan a la extensión de renderizado. Los valores deviceInfo se convierten en NameValueCollection un objeto por el servidor de informes. Los elementos en el parámetro deviceInfo se tratan como valores insensibles a mayúsculas y minúsculas. Si la solicitud de renderizado se produjo como resultado del acceso a URL, los parámetros de URL en el formulario rc:key=value se convierten en pares clave/valor en el objeto del diccionario deviceInfo . El código de detección del navegador también proporciona los siguientes elementos en el diccionario de Capacidades del cliente : EcmaScriptVersion, JavaScript, MajorVersion, MinorVersion, Win32, Type y AcceptLanguage. La extensión de renderizado ignora cualquier par nombre/valor en el parámetro deviceInfo que no entienda. El siguiente ejemplo de código muestra un método de ejemplo GetRenderingResource que recupera iconos:

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;  
}  

Método RenderStream

El RenderStream método genera un flujo particular del informe. Todos los flujos se crean durante la llamada inicial Render , pero no se devuelven al cliente inicialmente. Este método se utiliza para flujos secundarios, como imágenes en renderizado HTML, u otras páginas de una extensión de renderizado multipágina, como Image/EMF.

Método GetRenderingResource

El GetRenderingResource método recupera la información sin ejecutar una representación completa del informe. Hay ocasiones en las que el informe requiere información que no requiere que el propio informe se entregue. Por ejemplo, si necesitas el icono asociado a la extensión de renderizado, usa el parámetro deviceInfo que contiene la única etiqueta <Icon>. En estos casos, puedes usar el GetRenderingResource método.