Implementando 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, como ícones, isso é obrigatório para o relatório.
As seções a seguir discutem esses métodos em mais detalhes.
Método Render
O método Render contém argumentos que representam os seguintes objetos:
O report 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 Configurações de informações do dispositivo do Reporting Services.
O parâmetro clientCapabilities, que contém um objeto de dicionário NameValueCollection que possui informações sobre o cliente para o qual você está renderizando.
O RenderProperties que contém informações sobre o resultado da renderização.
O createAndRegisterStream é uma função de delegação a ser chamada para a obtenção de um fluxo onde 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 sem diferenciação de maiúsculas e minúsculas. Se a solicitação de renderização aconteceu como resultado do acesso à URL, os parâmetros de URL com formato rc:key=value serã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 itens a seguir no dicionário clientCapabilities: EcmaScriptVersion, JavaScript, MajorVersion, MinorVersion, Win32, Type e AcceptLanguage. Qualquer par de nome/valor de deviceInfo que não for compreendido pela extensão de renderização será ignorado. 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 Render inicial, mas os fluxos não são retornados ao cliente inicialmente. Esse método é usado para fluxos secundários, como imagens em renderização HTML, ou páginas adicionais de uma extensão de renderização de várias páginas, como Imagem/EMF.
Método GetRenderingResource
O método GetRenderingResource recupera as informações sem executar toda renderização do relatório. Existem ocasiões em que o relatório necessita de informações que não exigem que o próprio relatório 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.
Consulte também