Implementar la interfaz IRenderingExtension
Tal y como se ha descrito anteriormente en esta sección, la extensión de representación es responsable de tomar los resultados de una definición de informe que se combina con datos reales y representar los datos resultantes en un formato utilizable. La transformación de los datos combinados y el formato se efectúa a través de una clase de Common Language Runtime (CLR) que implementa IRenderingExtension, que transforma el modelo de objetos en un formato de salida que puede usar un visor, una impresora u otro destino de salida.
IRenderingExtension tiene tres métodos que deben estar codificados. Estos métodos son:
Render: representa el informe.
RenderStream: representa una secuencia concreta del informe.
GetRenderingResource: obtiene información adicional, como los iconos, que se necesita para el informe.
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 propio parámetro report que desea 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 reportServerParameters que contiene el objeto de diccionario de cadena, con los parámetros del servidor de informes, si hay alguno.
Los parámetros deviceInfo que contienen la configuración del dispositivo. Para obtener más información sobre la configuración del dispositivo, vea Configuración de información de dispositivos de Reporting Services.
El parámetro clientCapabilities que contiene un objeto de diccionario NameValueCollection que tiene información sobre el cliente al que está representando.
El parámetro RenderProperties que contiene información sobre el resultado de la representación.
El parámetro createAndRegisterStream es una función de delegado 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 del 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 produjo como resultado del acceso URL, los parámetros de dirección URL con el formato rc:key=value se convierten en pares de tecla y 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. Se omite cualquier par de nombre y valor de deviceInfo que la extensión de representación no entienda. El ejemplo de código siguiente muestra un método GetRenderingResource de ejemplo 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 una secuencia determinada del informe. Todas las secuencias se crean durante la llamada de Render inicial, pero las secuencias no se devuelven inicialmente al cliente. Este método se utiliza para secuencias secundarias (similares a las imágenes en la representación HTML) o páginas adicionales de una extensión de representación de varias páginas (similar a Image/EMF).
Método GetRenderingResource
Hay ocasiones en que el informe requiere información que no requiere representar el propio informe. Por ejemplo, si necesita el icono asociado a la extensión de representación, utilice el parámetro deviceInfo que contiene la etiqueta <Icon>. En estos casos, puede usar el método GetRenderingResource. Este método recupera la información sin ejecutar una representación completa del informe.