Implementando a interface IRenderingExtension
Como descrito anteriormente nesta seção, a extensão de renderização é responsável por obter os resultados de uma definição de relatório combinada com os dados reais e pela renderização dos dados resultantes para um formato que seja utilizável. A transformação dos dados combinados e a formatação são feitas por meio de uma classe CLR (common language runtime) que implementa IRenderingExtension, que transforma o modelo de objeto em um formato de saída consumível por um visualizador, por uma impressora ou por outro destino de saída.
O IRenderingExtension tem três métodos que devem ser codificados. São eles:
Render - renderiza o relatório.
RenderStream - renderiza um fluxo específico de um relatório.
GetRenderingResource - obtém informações adicionais, como ícones, necessárias 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 próprio 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 da árvore de modelo de objeto de relatório.
O reportServerParameters, que contém o objeto de dicionário de cadeia de caracteres, com os parâmetros para o servidor de relatório, se houver.
Os parâmetros deviceInfo que contêm as configurações do dispositivo. Para obter mais informações sobre as configurações do dispositivo, 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 contendo 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 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
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. Esse método recupera as informações sem executar a renderização completa do relatório.
Consulte também