Partilhar via


Implementar a interface IRenderingExtension

A extensão de renderização obtém os resultados de uma definição de relatório combinada com os dados reais e renderiza os dados resultantes para um formato que seja utilizável. A transformação dos dados combinados e a formatação são feitas usando uma classe CLR (Common Language Runtime) que implementa IRenderingExtension. Isto transforma o modelo de objeto em um formato de saída que é consumível por um visualizador, impressora ou outro destino de saída.

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

  • Render - renderiza o relatório.

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

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

As seções a seguir discutem esses métodos em mais detalhes.

método de renderização

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

  • O relatório que você deseja renderizar. Esse objeto contém propriedades, dados e informações de layout para o relatório. O relatório é a raiz do árvore de modelo de objeto de relatório.

  • O ServerParameters, que contém o objeto de dicionário de cadeia de caracteres, com os parâmetros para o servidor de relatório, se houver.

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

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

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

  • createAndRegisterStream é uma função de delegado a ser chamada para a obtenção de um fluxo no qual será feita a renderização.

parâmetro deviceInfo

O parâmetro deviceInfo contém parâmetros de renderização e 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 objeto NameValueCollection pelo servidor de relatório. Os itens do parâmetro deviceInfo são tratados como valores que não diferenciam maiúsculas de minúsculas. Se a solicitação de renderização aconteceu como resultado de acesso à URL, os parâmetros da URL no formato rc:key=value são convertidos em pares de chave/valor no objeto de dicionário deviceInfo. O código de detecção do navegador também fornece os seguintes itens no dicionário clientCapabilities: EcmaScriptVersion, JavaScript, MajorVersion, MinorVersion, Win32, Type e AcceptLanguage. A extensão de renderização ignora qualquer par nome/valor no parâmetro deviceInfo que ele não entende. O exemplo de código a seguir mostra um método GetRenderingResource de exemplo 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 método RenderStream processa um fluxo específico do relatório. Todos os fluxos são criados durante a chamada inicial Render , mas os fluxos não são retornados ao cliente inicialmente. Esse método é usado para fluxos secundários, como imagens na renderização HTML, ou outras páginas de uma extensão de renderização de várias páginas, como Image/EMF.

Método GetRenderingResource

O método GetRenderingResource recupera as informações sem executar toda renderização do relatório. Há momentos em que o relatório requer informações que não exigem que o relatório em si seja renderizado. Por exemplo, se você precisar do ícone associado à extensão de renderização, use o parâmetro deviceInfo que contém a marca única <Icon>. Nesses casos, você pode usar o método GetRenderingResource.