Implementación de la interfaz IRenderingExtension
La extensión de representación toma los resultados de una definición de informe que se combina con los datos reales y representa los datos resultantes en un formato que se puede usar. La transformación de los datos combinados y el formato se efectúan utilizando una clase de Common Language Runtime (CLR) que implementa IRenderingExtension. De esta forma se transforma el modelo de objetos en un formato de salida que puede usar un visor, impresora u otro destino de salida.
IRenderingExtension tiene tres métodos que deben estar codificados:
Render: representa el informe.
RenderStream: representa un flujo concreto del informe.
GetRenderingResource : obtiene información adicional necesaria para el informe, como iconos.
En las siguientes secciones se describen los métodos con más detalle.
método Render
El método Render contiene argumentos que representan los objetos siguientes:
El elemento report que quiere representar. Este objeto contiene propiedades, datos e información de presentación para el informe. El informe es la raíz del árbol del modelo de objetos de informe.
El parámetro ServerParameters que contiene el objeto de diccionario de cadena, con los parámetros para el servidor de informes, si los hubiera.
Parámetro deviceInfo que contiene la configuración del dispositivo. Para obtener más información, consulte Pasar la configuración de información del dispositivo a las extensiones de representación.
El parámetro clientCapabilities que contiene un NameValueCollection objeto de diccionario que tiene información sobre el cliente al que se representa.
Parámetro RenderProperties que contiene información sobre el resultado de la representación.
createAndRegisterStream es una función delegada a la que se va a llamar para obtener una secuencia en la que representar.
Parámetro deviceInfo
El parámetro deviceInfo contiene los parámetros de representación, no los parámetros de informe. Estos parámetros de representación se pasan a la extensión de representación. El servidor de informes convierte los valores de deviceInfo en un objeto NameValueCollection. Los elementos del parámetro deviceInfo se tratan como valores que no distinguen mayúsculas y minúsculas. Si la solicitud de representación se ha producido como resultado de un acceso URL, los parámetros de dirección URL con el formato rc:key=value
se convierten en pares de clave-valor en el objeto de diccionario deviceInfo. El código de detección de explorador también proporciona los elementos siguientes en el diccionario clientCapabilities: EcmaScriptVersion, JavaScript, MajorVersion, MinorVersion, Win32, Type y AcceptLanguage. La extensión de representación omite cualquier par nombre-valor en el parámetro deviceInfo que no comprenda. La muestra de código siguiente muestra un método GetRenderingResource de muestra que recupera los 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 método RenderStream representa un flujo determinado del informe. Todas las secuencias se crean durante la llamada inicial Render , pero las secuencias no se devuelven inicialmente al cliente. Este método se usa para secuencias secundarias, como imágenes en representación HTML u otras páginas de una extensión de representación de varias páginas, como Image/EMF.
Método GetRenderingResource
El método GetRenderingResource 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 se represente el propio informe. Por ejemplo, si necesita el icono asociado a la extensión de representación, use el parámetro deviceInfo que contiene la etiqueta única <Icon>. En estos casos, puede usar el método GetRenderingResource.