Este artigo foi traduzido por máquina.

SQL Server Reporting Services

Estendendo o SSRS: Desenvolvendo componentes de criação de gráficos personalizados e extensões de processamento

Manpreet Singh

Baixar o exemplo de código

SQL Server Reporting Services (SSRS) oferece excelentes recursos gráficos que permitem que você representar dados e estatísticas visualmente em forma de gráficos convencionais e não convencionais, e uma variedade de extensões de processamento de relatório permitem que você salvar um relatório em uma variedade de diferentes formatos como PDF, CSV, XML, Word e Excel. Ainda, as opções nativas nem sempre podem satisfazer suas necessidades de negócios ou processar um relatório exatamente da maneira que quiser. Felizmente, você pode estender os reporting services para criar seus próprios componentes de gráficos personalizados e usando os vários recursos de extensibilidade que SSRS fornece extensões de renderização. Neste artigo, vou dar uma visão geral do processo de criação de um componente de gráfico personalizado e as várias maneiras de integrá-lo com um relatório do SSRS. Também descreverei como você pode desenvolver um renderizador de relatório personalizado (por extensão nativa) para renderizar um relatório apenas como você gostaria. Para experimentar este você mesmo, faça download do código completo em archive.msdn.microsoft.com/mag201201SSRS e usá-lo como seu ponto de partida. Observe que o processo de criação de um itens de relatório e extensão de renderização não mudou muito desde o SQL Server 2005. Embora eu construí os exemplos de código usando um ambiente SQL Server 2008 R2, os conceitos discutidos neste artigo são muito aplicáveis ao SQL Server 2005 e 2008 também. Se você estiver desenvolvendo para o SQL Server 2008 R2 Reporting Services, você pode criar componentes personalizados usando o Microsoft.NET Framework 4 também. Para SQL Server 2008 Reporting Services, no entanto, a.NET Framework 3.5 é a versão mais recente da.NET Framework com suporte.

O relatório de usuários do Web Site

Para apreciar o processo de desenvolvimento de um componente gráfico personalizado e extensão de renderização, considere um cenário em que uma organização deseja gerar um relatório de uso do Web Site mensal para ilustrar a popularidade de seu, digamos, e-commerce Web site em diferentes regiões. O coração do relatório é um gráfico de usuários do Web Site, que representa graficamente a distribuição geográfica dos usuários por região, conforme representado na Figura 1.

Web Site Users Chart
Figura 1 os usuários do Web Site gráfico

Embora o gráfico é bastante semelhante a um gráfico de barras, nenhum dos componentes gráficos nativos caber a conta porque você não pode substituir as barras do gráfico com uma imagem personalizada que representa uma pessoa, como a de Figura 1.

Tal cenário chama-se definitivamente para criar seu próprio componente gráfico personalizado. Usando GDI + de bibliotecas de classe base (parte da.NET Framework) e um pouco matemática, é fácil desenhar o gráfico usando formas básicas, como círculos e retângulos e gerar o gráfico sob a forma de uma imagem de bitmap regular. A saída de um componente, que gera uma imagem usando o.Bibliotecas de gráficos de NET Framework, pode ser integrado com o relatório SSRS em várias maneiras:

  • Usando itens de relatório personalizados: SSRS apoia a criação de itens de relatório personalizados, tais como componentes gráficos incorporados, que podem ser integrados em um relatório. Os itens de relatório personalizados são processados como imagens. O artigo, "Jazz Up Your dados usando personalizado relatório itens no SQL Server Reporting Services" (msdn.microsoft.com/magazine/cc188686), demonstra como criar um item de relatório personalizado.
  • Usando uma função SQL CLR: Você também pode usar uma função definida pelo usuário SQL CLR para integrar um componente baseado em GDI + gráficos com SSRS. Isso requer carregar sistema.desenho.dll no SQL Server. Uma vez que o assembly principal para geração de gráfico é carregado no SQL Server, você pode criar uma função definida pelo usuário com base nele. A imagem do item de relatório, em seguida, pode ser configurada para processar a imagem de gráfico de um banco de dados.
  • Usando um ASP.NET manipulador: Você pode usar um ASP.Manipulador de líquido para integrar o componente gráfico com um relatório do SSRS e um aplicativo da Web. Um ASP.NET manipulador pode retornar o componente gráfico como uma imagem de bitmap para download, com todos os parâmetros sendo passados a ele usando uma seqüência de caracteres de consulta. Para integrar o manipulador de saída com SSRS, tudo que você precisa fazer é definir a origem da imagem da caixa de imagem para externo e fornecer o URL do manipulador como uma expressão.

Os exemplos de código que acompanha este artigo demonstram o processo de criação do gráfico de usuários do Web Site e integrá-la com o relatório de uso do Site da Web usando uma função SQL CLR. O projeto WebSiteUsersChartCore contém a classe WebSiteUsersChart, que processa o gráfico sob a forma de uma imagem JPEG com base em dados de uso mensal retornados pelo procedimento dbo.usp_GetUsageData armazenado. O arquivo WebSiteUsersReportDB.bak contém um backup do banco de dados WebSiteUsersReportDB com as tabelas de back-end necessárias e procedimentos armazenados. A função SQL CLR GetUsersChart é responsável por fornecer os parâmetros necessários para o componente gráfico e obter a saída de imagem. O conjunto de dados DataSetWebSiteUsageChart do RegionWiseReport Obtém a imagem da função SQL CLR usando a seguinte consulta SQL, passando os parâmetros necessários:

    SELECT dbo.usp_GetUsersChart(500, 300, N'Website Users', @RegionName,
      @DateID % 100, @DateID / 100) AS Chart

Finalmente, o controle de imagem ImageChart processa a imagem vinda do banco de dados.

A principal vantagem de usar a função SQL CLR ou o ASP.Abordagem de líquido manipulador em vez de desenvolver um item de relatório personalizado é que você pode usar o mesmo componente gráfico fora do SSRS, diz em um aplicativo da Web, sem a necessidade de qualquer esforço de desenvolvimento ou personalização.

Word personalizado processamento extensão

Embora a extensão de renderização do Word nativa processa o relatório de uso do Web Site perfeitamente, não há suporte para alguns recursos, como uma tabela de conteúdo ou de ter algumas páginas na orientação de paisagem, retrato e outros.

Escrever uma extensão de processamento personalizado do zero não é uma tarefa trivial; você quer que seja capaz de tomar várias combinações de elementos de relatório e convertê-los para o correspondente formatação e elementos de dados suportados pelo formato de destino. Além disso, estendendo as extensões de renderização SSRS nativas não é suportado diretamente. Felizmente, a saída da extensão de renderização do Word nativa atende a maioria de minhas necessidades para o relatório, então tudo que eu realmente quero é uma maneira de adicionar uma tabela de conteúdo para ele e ser capaz de controlar a orientação no nível da página.

Para alcançar meus objetivos, eu pode escrever uma extensão de processamento personalizada, que obtém a saída de relatório processada pela extensão do Word nativo, em seguida, usar automação do Word para modificar o resultado do relatório na forma desejada e transmitir a saída final para o usuário.

A classe CustomWordRenderer no projeto CustomWord­RenderingExtension no código-fonte destaca as etapas importantes envolvidas em alcançar o efeito desejado. A saída da extensão de renderização do Word nativa é mesclada com um modelo de cabeçalho padrão que contém uma página de título e uma tabela de conteúdo e também pode conter itens como uma nota de copyright, um aviso de isenção e assim por diante. Os rótulos do mapa do documento, que são processados como entradas de tabela pelas extensões nativas, têm estilos de título apropriado aplicados para torná-los aparecer no sumário. Finalmente, a tabela de conteúdo é atualizada e o documento mesclado é transmitido para o usuário.

Todas as extensões de serviços relata devem implementar as interfaces IRenderingExtension e IExtension. Essas interfaces exigem que você fornecer implementação para os seguintes métodos e propriedades:

Membros da interface IExtension:

  • Propriedade LocalizedName.
  • Função SetConfiguration

Membros da interface IRenderingExtension:

  • Função GetRenderingResource
  • Processar função
  • Função RenderStream

De todos esses membros, o método Render é mais importante e contém a implementação de núcleo para o processador do Word personalizado. Porque eu já recebi o relatório formatado saída from a extensão de renderização do Word nativa, eu não tenho que analisar os vários elementos do relatório, e, portanto, o método render não contêm qualquer código para lidar diretamente com dados de relatório ou elementos de formatação. Tudo o que preciso fazer é obter o relatório da extensão de renderização do Word nativa, abri-lo com o Microsoft Word (usando a automação do Word), realizar as modificações necessárias e fluxo de documentos modificados para o usuário.

Para obter mais informações sobre o processo de desenvolvimento de extensões de processamento personalizado, consulte o artigo "Display Your dados Your Way com personalizado Renderers para Reporting Services," em msdn.microsoft.com/magazine/cc163840.

Um ponto importante a observação antes de decidir fazer uso dos conceitos discutidos aqui é que a Microsoft não oferece suporte automação de servidor do Microsoft Office. Se você considerar desenvolver uma extensão de processamento personalizado baseada na abordagem discutido, primeiro dar uma olhada no artigo, "Considerações para servidor automação de escritório," em support.microsoft.com/kb/257757.

Se você não quiser usar a automação de escritório, há outra abordagem interessante você pode considerar — renderizar o relatório como um XML do arquivo usando a extensão de renderização XML nativa e aplicando uma folha de estilos XSLT personalizada para gerar um documento WordML. A desvantagem desta abordagem é que você vai acabar armazenar relatório formatação em dois lugares: um folha de estilos XSLT e outro no arquivo RDL do relatório.

Usando o código de exemplo

O código-fonte para este artigo contém os seguintes artefatos:

  • Projeto WebSiteUsersChartCore
  • Projeto TestHarness
  • Projeto CustomWordRenderingExtension
  • Arquivo RDL WebSiteUsersReport
  • Arquivo RDL RegionWiseReport
  • Arquivo de backup de banco de dados de WebSiteUsersReportDB
  • Arquivo de modelo de cabeçalho do relatório

O projeto WebSiteUsersChartCore demonstra o processo de criação do componente de criação de gráficos de usuários do site de estatísticas de uso region-wise. O projeto TestHarness é usado para testar e verificar a saída da Assembléia WebSiteUsersChartCore pelo processamento da imagem gerada pelo componente gráfico usando um aplicativo de formulário do Windows. O projeto CustomWordRenderingExtension contém a implementação para a extensão de renderização Word personalizada, baseada na abordagem de automação do Word. O site­UsersReport é o relatório principal que chama o sub-relatório de RegionWiseReport para cada região, para processar o conteúdo de region-wise. O relatório de RegionWiseReport também chama o componente gráfico do site os usuários para processar o gráfico de usuários do WebSite. Ele faz por isso usando a imagem controlar por meio de uma chamada para o usp_GetUsersChart função de valor escalar SQL CLR, passando os parâmetros apropriados. O arquivo WebsiteUsersReportDB.bak contém o backup do banco de dados WebSiteUsersReportDB. Os relatórios e os componentes gráficos baseados em dados deste banco de dados. O arquivo de modelo de cabeçalho contém uma página de título e uma tabela de conteúdo, no formato de retrato. Este ficheiro é anexado ao início do relatório de documento de Word nativo, usando a automação do Word.

Para implantar o código de exemplo, construir a solução WebSiteUsersChart contendo o WebSiteUsersChartCore e o Custom­WordRenderingExtension projetos. Copie o assembly CustomWordRenderingExtension.dll ao diretório de bin do servidor de relatório. Faça a seguinte entrada no arquivo de rssrvpolicy do servidor de relatórios para conceder confiança total para a extensão de renderização personalizado:

<CodeGroup
class="UnionCodeGroup" version="1"
PermissionSetName="FullTrust"
Name="CUSTOM WORD"
Description="This code group grants Custom Word Renderer code full trust.">
  <IMembershipCondition
    class="UrlMembershipCondition"
    version="1"
    Url="C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting
        Services\ReportServer\bin\CustomWordRenderingExtension.dll" />
</CodeGroup>

Em seguida, fazer a seguinte entrada no arquivo RSReportServer. config para registrar a extensão de renderização no servidor de relatório:

<Extension Name="Custom WORD" Type=
  "CustomWordRenderingExtension.CustomWordRenderer,
  CustomWordRenderingExtension">
  <Configuration>
    <DeviceInfo>
    <SourceHeaderFileName>C:\WorkingDirectory\
      Header.doc</SourceHeaderFileName>
    <SourceBodyFileName>C:\WorkingDirectory\Body.doc</SourceBodyFileName>
    <MergedFileName>C:\WorkingDirectory\MergedOutput.doc</MergedFileName>
    </DeviceInfo>
  </Configuration>
</Extension>

Criar um diretório de trabalho sobre o c:. unidade para a extensão de renderização e cópia Header.doc a ele. Se você quiser usar um diretório diferente, não se esqueça de fazer as alterações necessárias no arquivo RSReportServer. Essas entradas de configuração são recebidas pelo processador do Word personalizado. Naturalmente, você deve ter o Microsoft Word instalado para a extensão de renderização para trabalhar.

Em seguida, implante os relatórios WebSiteUsersReport e RegionWiseReport no servidor de relatório. Execute o relatório de WebSiteUsersReport. Clique no menu de exportação e examinar o conteúdo de soltar-para baixo — você deve ver a extensão de renderização "CUSTOM WORD" na lista. Vá em frente e fazer uma exportação. Se você acabar ficando um documento vazio, examine o log de eventos para erros.

Resumindo

Sempre que componentes gráficos nativos não cabem a conta, você deve considerar a implementar um componente personalizado. Você pode desenvolver gráficos complexos, aproveitando sua habilidade de desenvolvimento GDI +. Tenha em mente que você pode escrever renderizadores personalizados sem ter que escrever tudo do zero, modificando a saída dos nativos.

Embora sempre seja possível ir completamente personalizada e criar novos aplicativos para geração de relatórios, muitas vezes é muito fácil de obter o mesmo efeito usando SSRS com alguns pedaços de código personalizado conectados em lugares certos. Então vá em frente e construir seus próprios componentes gráficos e processadores de relatório sem medo.

Manpreet Singh é um consultor com entrega Global de serviços Microsoft, onde ele é uma parte do Business Intelligence e grupo de engenharia de integração. Ele trabalha principalmente em design e desenvolvimento de.NET-centric soluções de Business Intelligence baseadas na pilha Microsoft Business Intelligence.

Graças ao seguinte especialista técnico para revisão deste artigo: Yaswant Vishwakarma