Veja neste artigo uma funcionalidade muito bacana e rápida, para exportar arquivos (Excel e PDF) no seu sistema, dando uma cara mais profissional para seu usuário final, assim como facilitando o trabalho dele.

Reporting Services - Geração de relatórios no SQL Server

Uma necessidade bastante comum em boa parte dos sistemas é a necessidade de impressão de diversos tipos de relatórios como fichas cadastrais, listagens, movimentação de estoque, etc. A emissão desses relatórios pode ser facilitada e automatizada usando o Microsoft SQL Server Reporting Services, que permite a geração de relatórios através de uma ferramenta de fácil manipulação e customização.

Pode ocorrer ainda de o usuário precisar que esses relatórios sejam não só exibidos, mas gerados em arquivos para diversos fins, como compartilhar com a equipe através de PDF. Também nesse ponto o Reporting Services no auxilia, tornando esse processo muito mais prático.

Vários cenários existem no nosso dia-a-dia, então nada melhor do que poder criar tais funcionalidades dentro do sistema, permitindo o mesmo atender todas as expectativas do usuário.

A seguir veremos os principais parâmetros necessários para a geração de um relatório no Reporting Services e, logo após, um exemplo prático utilizando ASP.NET, no qual faremos a chamada a um relatório previamente criado.

Observação: Lembre-se que para acompanhar os exemplos desse artigo é necessário possuir um ambiente com Reporting Services instalado.

O Html Viewer Commands (rc:)

O (rc:) disponibiliza comandos para melhor formatar a página que será responsável pela requisição do relatório.

Tipo de Parâmetros (rc:)

Toolbar

Quando o valor for false, o mesmo irá ocultar a barra de ferramentas do browsers, tornando uma janela mais simples. Default é true.

Parameters

Quando o valor for false, o mesmo irá ocultar a barra de endereço do browser. Default é true.

LinkTarget

Assim como em javascript é possível informar como a página de geração do relatório será chamada. Ex: _top

O Reporting Service Command (rs:)

O (rs:) disponibiliza diversos parâmetros via URL, que quando informados via QueryString, permitem a geração de relatórios diretamente para um formato de arquivo requerido, assim como passar um idioma para o Reporting Services em casos de sistemas com diversas regionalidades.

Sempre que for informar um command do tipo O (rs:), preceda o comando com a abreviação.

Tipo de Parâmetros (rs:)

Command

Existem diversos tipos, más a ênfase é no parâmetro Render. O Render é o responsável por gerar o relatório e devolvê-lo no formato desejado.

Format

O formato são os diversos tipos de arquivos nos quais o relatório pode ser apresentado, o valor default caso nenhum formato seja informado, é o HTML4.0.

Os formatos são: ATOM, HTML4.0, MHTML, IMAGE, EXCEL, WORD, CSV, PDF, XML.

ParameterLanguage

Informando este parâmetro o relatório gerado respeitará a regionalidade informada, caso não informe, o mesmo será gerado pela regionalidade do browser.

Montando os parâmetros

A montagem da URL é simples, pois existe um padrão, facilitando a criação de um método que a gere adaptando-se a todas as chamadas de relatório do sistema.

No início virá o endereço do servidor de relatórios, note o ‘?’. A partir desse ponto tudo é um parâmetro para o Reporting Services.

Listagem 1: Diretório do Servidor

http://SrvHost/ReportServer?/

Em seguida o nome do relatório, caso ele esteja em subdiretórios, aponte corretamente:

Listagem 2: Pasta do Relatório

FolderSystem/System

Agora, os parâmetros do relatório, caso possua, todos eles devem ser concatenados por ‘&’, observe.

Listagem 3: Concatenação de parâmetros

&Param1=Value&Param2=Value

Pronto, os próximos parâmetros são responsáveis por informar ao Reporting Services, quais as necessidades na hora da geração do relatório. Note que podemos mesclar (devemos) os tipos de comandos de (rs:) e (rc:).

Listagem 4: Concatenação dos comandos

&rs:Command=Render&rc:LinkTarget:=_top&rs:Format=EXCEL

Resultado

A seguir temos exemplo de como ficaria a URL montada com as informações acima:

http://SrvHost/ReportServer?/ FolderSystem/System&Param1=Value&Param2=Value&rs:Command=Render&rc:LinkTarget:=_top&rs:Format=EXCEL

Codificar

Abaixo está uma implementação em ASP.NET onde será exibido um relatório. O código a seguir tem a declaração de botões e um dropdownlist, necessários para passar as informações do tipo de arquivo no qual desejamos gerar no retorno das informações.

Listagem 5: Objetos da tela - Client-Side

 
    <div>
        <asp:DropDownList runat="server" ID="drpTipos">
            <asp:ListItem Text="PDF" Value="PDF" Selected></asp:ListItem>
            <asp:ListItem Text="EXCEL" Value="Excel"></asp:ListItem>
            <asp:ListItem Text="ATOM" Value="ATOM"></asp:ListItem>
            <asp:ListItem Text="HTML" Value=" HTML4.0"></asp:ListItem>
            <asp:ListItem Text="MHTML" Value="MHTML"></asp:ListItem>
            <asp:ListItem Text="IMAGE" Value="IMAGE"></asp:ListItem>
            <asp:ListItem Text="WORD" Value="WORD"></asp:ListItem>
            <asp:ListItem Text="CSV" Value="CSV"></asp:ListItem>
            <asp:ListItem Text="XML" Value="XML"></asp:ListItem>
        </asp:DropDownList>    
    </div>    
    
    <asp:Button runat="server" ID="btnImprimir" Text="Imprimir" onclick="btnImprimir_Click" />
    

Pronto, agora vamos codificar o onClick do botão Imprimir no code-behind.

O click do botão é onde tudo acontece, a passagem de parâmetros, o tipo de documento, o nome do relatório e o caminho do servidor para apresentação do relatório.

Listagem 6: Codificação do botão Imprimir

    protected void btnImprimir_Click(object sender, EventArgs e)
            {
                const string nomeRelatorio = "rel_all_files";
                const string paramGruCodigo = "&Gru_Codigo=Valor";
    
    var script = ConfigurationManager.AppSettings["ReportServer"] 
    + nomeRelatorio + paramGruCodigo + 
    "&rs%3aCommand=Render&rs:ClearSession=true&rs%3aFormat=" 
    + drpTipos.SelectedValue + 
    "&rc%3aToolbar=False&rc%3aJavaScript=False&rc%3aLinkTarget=_top&rc%3aArea=Params');";
    
    ScriptManager.RegisterClientScriptBlock(this, Page.GetType(), 
    Guid.NewGuid().ToString(), script, true);
            }
    

Note que o caminho do servidor que hospeda o reporting service está sendo requisitado do appSettings, no nosso caso esse appSettings está localizado dentro do web.config da aplicação.

Listagem 7: AppSettings no WebConfig

      
      <appSettings>
        <add key="ReportServer" value="http://Servidor/ReportServer?%2fNOMEDOPROJETO%2f" />    
      </appSettings>
    

E Pronto, o usuário seleciona o tipo de arquivo que ele espera que retorne e o restante é trabalho do Sistema e do banco de dados em realizar o processo!

Como vimos, é muito prático e funcional.

Conclusões

Você viu então que além de uma bela ferramenta de relatórios, você pode tornar um sistema mais completo com essa solução, sem ter muita curva de aprendizagem.

Os formatos existente não deixam a desejar em nenhuma necessidade, basta adapta-los!

Observação: Os tipos de parâmetros não foram todos explanados, são diversos tipos, então foquei em coisas mais corriqueiras e rápidas para introduzir o assunto, veja que em referências há diversos links que complementaram o assunto.

Qualquer dúvida/sugestão/reclamação estou apto a atende-las e espero o feedback de todos.

Referências

Access Report Server Items Using URL Access
http://msdn.microsoft.com/en-us/library/ms154497.aspx

Pass a Report Parameter Within a URL
http://msdn.microsoft.com/en-us/library/ms155391.aspx

HTML Device Information Settings (rc:)
http://msdn.microsoft.com/en-us/library/ms155395(v=sql.90).aspx

LinkTarget
http://www.w3schools.com/tags/att_link_target.asp