Implementar a interface IRenderingExtension

A extensão de renderização retira os resultados de uma definição de relatório que é combinada com os dados reais e transforma os dados resultantes num formato utilizável. A transformação dos dados combinados e da formatação é feita usando uma classe de runtime de linguagem comum (CLR) que implementa IRenderingExtension. Isto transforma o modelo de objeto num formato de saída que pode ser consumido por um visualizador, impressora ou outro destino de saída.

Tem IRenderingExtension três métodos que devem ser codificados:

  • Render - Apresenta o relatório.

  • RenderStream - renderiza um fluxo específico do relatório.

  • GetRenderingResource - obtém informações adicionais necessárias para o relatório, como ícones.

As secções seguintes discutem estes métodos com mais detalhe.

Método de renderização

O Render método contém argumentos que representam os seguintes objetos:

  • O relatório que queres renderizar. Este objeto contém propriedades, dados e informações de layout para o relatório. O relatório é a raiz da árvore do modelo de objetos do relatório.

  • Os ServerParameters que contêm o objeto do dicionário de strings, com os parâmetros para o servidor de relatórios, se existirem.

  • O parâmetro deviceInfo que contém as definições do dispositivo. Para mais informações, consulte Passar as definições de informação do dispositivo para extensões de renderização.

  • O parâmetro clientCapabilities que contém um NameValueCollection objeto de dicionário com informação sobre o cliente para o qual estás a renderizar.

  • O parâmetro RenderProperties que contém informação sobre o resultado da renderização.

  • O createAndRegisterStream é uma função de delegado a ser chamada para obter um fluxo para renderizar.

parâmetro deviceInfo

O parâmetro deviceInfo contém parâmetros de renderização, não parâmetros de relatório. Estes parâmetros de renderização são passados para a extensão de renderização. Os valores deviceInfo são convertidos num NameValueCollection objeto pelo servidor de relatórios. Os itens no parâmetro deviceInfo são tratados como valores insensíveis a maiúsculas minúsculas. Se o pedido de renderização surgiu como resultado do acesso a URL, os parâmetros URL no formulário rc:key=value são convertidos em pares chave/valor no objeto do dicionário deviceInfo . O código de deteção do navegador também fornece os seguintes itens no dicionário clienteCapabilities : EcmaScriptVersion, JavaScript, MajorVersion, MinorVersion, Win32, Type e AcceptLanguage. A extensão de renderização ignora qualquer par nome/valor no parâmetro deviceInfo que não compreenda. O exemplo de código seguinte mostra um método de exemplo GetRenderingResource que recupera ícones:

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

O RenderStream método gera um fluxo específico a partir do relatório. Todos os fluxos são criados durante a chamada inicial Render , mas os fluxos não são devolvidos ao cliente inicialmente. Este método é usado para fluxos secundários, como imagens em renderização HTML, ou outras páginas de uma extensão de renderização multi-página, como Image/EMF.

Método GetRenderingResource

O GetRenderingResource método recupera a informação sem executar uma renderização completa do relatório. Há momentos em que o relatório exige informação que não exige que o próprio relatório seja apresentado. Por exemplo, se precisares do ícone associado à extensão de renderização, usa o parâmetro deviceInfo que contém a única etiqueta <Icon>. Nestes casos, pode usar o GetRenderingResource método.