Implemente a interface IRenderingExtension

A extensão de renderização pega os resultados de uma definição de relatório que é combinada com os dados reais e gera os dados resultantes para um 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. Isso transforma o modelo de objeto em um formato de saída que pode ser consumido por um visualizador, impressora ou outro destino de saída.

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

As seções seguintes discutem esses métodos com mais detalhes.

Método de renderização

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

  • O relatório que você quer 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 houver.

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

  • O parâmetro clientCapabilities que contém um NameValueCollection objeto dicionário com informações sobre o cliente para o qual você está renderizando.

  • O parâmetro RenderProperties que contém informações sobre o resultado de 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. Esses parâmetros de renderização são passados para a extensão de renderização. Os valores deviceInfo são convertidos em um NameValueCollection objeto pelo servidor de relatórios. Itens no parâmetro deviceInfo são tratados como valores insensíveis a maiúsculas e minúsculas. Se a solicitação de renderização veio como resultado do acesso à URL, os parâmetros da URL no formulário rc:key=value são convertidos em pares chave/valor no objeto deviceInfo . O código de detecção do navegador também fornece os seguintes itens no dicionário de Capacidades do cliente : EcmaScriptVersion, JavaScript, MajorVersion, MinorVersion, Win32, Type e AcceptLanguage. A extensão de renderização ignora qualquer par nome/valor no parâmetro deviceInfo que ela não entende. O exemplo de código a seguir 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. Esse 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 as informações sem executar uma renderização completa do relatório. Há momentos em que o relatório exige informações que não exigem que o próprio relatório seja apresentado. Por exemplo, se você precisar do ícone associado à extensão de renderização, use o parâmetro deviceInfo contendo a única tag <Icon>. Nesses casos, você pode usar o GetRenderingResource método.