Desenvolvimento - Visual Basic .NET

.NET Class Libary - Componente Exportador Excel (*.xls)

Durante seu estudo sobre arquitetura de software certamente vai se deparar com desenvolvimento em camadas. Deixando a camada de negócios separada da camada de aplicação. A chegada do .NET no meu ponto de vista foi fundamental para esse tipo de solução...

por Ramon Durães



Introdução

Durante seu estudo sobre arquitetura de software certamente vai se deparar com desenvolvimento em camadas. Deixando a camada de negócios separada da camada de aplicação. A chegada do .NET no meu ponto de vista foi fundamental para esse tipo de solução. Pois dentre todas as novidades dessa plataforma, temos a facilidade de se criar projetos do tipo Class Libary (Biblioteca de classes). Esse tipo de projeto permite que o programador separe o código de negócio, como uma classe de acesso a dados ou uma funcionalidade para exportar para Excel que vamos fazer nesse projeto do restante da aplicação podendo com isso distribuir facilmente esse componente para todas aplicações .NET . O outro ponto de muita importância é que você não vai ter que escrever um novo código. Você aproveita toda codificação já feita, efetua o Build e pronto!!! Já pode distribuir sua nova dll. Não acredita!!! Acompanhe os passos!

Class Libary

Inicie um novo Projeto conforme Figura 1 digite o nome para a classe e conforme, o Visual Studio vai gerar todos arquivos para esse novo projeto. Como o projeto é Class Libary ele não tem interface de tela como nos outros projetos. Neste modelo você coloca o código de sua classe que antes você armazenava em conjunto com sua aplicação.


Figura 01 - Iniciando novo projeto de Class Libary

Por padrão o Visual Studio vai criar o arquivo Class1.vb conforme Figura 2. Esse tipo de projeto vem com básico de referencias, como vamos implementar uma rotina para exportar para excel (*.xls) e vamos precisar dos recursos disponibilizados pela classe System.Web vamos precisar adicionar referencia dessa dll ao nosso projeto, veja como fazer isso na Figura 3 e na Figura 4.


Figura 02 - Class Libary padrão


Figura 03 - Adicionando referência

Selecione a dll System.Web.dll depois clique em {Select} e finalmente em {OK} para confirmar.


Figura 4 - Adicionando referência System.Web.dll

Feito isso dentro desse projeto já podemos acessar os recursos contidos dentro de System.Web.

Classe Exportador XLS

Para melhor demonstrar a criação de um Class Libary vamos finalmente adicionar o código da classe que exporta os dados de um DataTable para o excel (*.xls), localize o arquivo de class (class1.vb) e modifique conforme a Listagem 1. Essa classe recebe um DataTable como parâmetro e o carrega em um objeto DataGrid depois direciona esse objeto diretamente para o Stream usando response. Que vai gerar um arquivo para download do tipo XLS que possa ser importado no Excel.

Listagem 01 - Código para criar classe de exportação XLS

Public Class ExportadorXLS 
    Public Shared Sub Exportar(ByVal dt As System.Data.DataTable) 

        Dim g As New Guid
        Dim oResponse As System.Web.HttpResponse _ 
        = System.Web.HttpContext.Current.Response
        oResponse.Clear()
        oResponse.AddHeader("Content-Disposition", _ 
        "attachment; filename=Exportador" + g.NewGuid.ToString + ".xls")
        oResponse.ContentType = "application/vnd.ms-excel"
        Dim stringWrite As New System.IO.StringWriter
        Dim htmlWrite As New System.Web.UI.HtmlTextWriter(stringWrite)
        Dim dg As New System.Web.UI.WebControls.DataGrid
        dg.DataSource = dt
        dg.DataBind()
        dg.RenderControl(htmlWrite)
        oResponse.Write(stringWrite.ToString)
        oResponse.End() 

    End Sub 

End Class 

Após adicionar o código da Listagem 1 efetue o Build do seu projeto e pronto. Seu componente já está pronto e você acabou de criar uma dll que pode ser usada por outras aplicações .NET. Com isso você está expandindo mais ainda as classes já oferecidas pelo .Net Framework pois pode distribuir imediatamente para outros desenvolvedores. Utilizando uma DLL (Class Libary)

Depois que você transportou seu código para dentro do projeto Class Libary e compilou (Build) já tem sua dll disponível para usar em outra aplicações .NET. Portanto inicie agora mesmo um novo projeto web e adicione a referência para dll (util.dll) clicando em Reference>Add Reference conforme Figura 5 selecionar Browser e localizar a nova dll que acabamos de criar, neste exemplo salvamos em c:\projetos\util e dentro da pasta bin vou encontra a dll "util.dll". Caso não esteja localizando sua dll retorne ao projeto Class Libary clique com botão direito no projeto e veja qual pasta da aplicação conforme Figura 6.


Figura 5 - Adicionando referencia a dll Util.dll (Class Libary)


Figura 6 - Localizando pasta do projeto Class Libary (Util)

Concluído essa etapa adicione uma pagina aspx pelo solution explorer > projeto > add web form (exportador.aspx), após adicionar efetue um duplo clique na pagina e adicione o código conforme a Listagem 2. Essa listagem apenas tem uma chamada no Page_Load que aciona nosso Class Libary (Util.ExportadorXLS.Exportar) de forma que o programador final apenas precise passar um parâmetro que neste caso é um System.data.DataTable. E ter facilmente no código o comando para exportar para excel (*.xls). O método Retorna_DataTable efetua uma consulta no banco de dados e retorna um DataTable que vamos passar para a classe que vai exportar.

Listagem 2 - Código pagina (exportador.aspx)

Public Class exportador 

    Inherits System.Web.UI.Page  

    Private Sub Page_Load(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles MyBase.Load 

        "Chamando rotina dentro da DLL e passando
        "DataTable como parametro
        Util.ExportadorXLS.Exportar(Retorna_DataTable)  

    End Sub 

    "////////////////////////////////////////////////////
    "Esse método tem objetivo de consulta banco de dados
    "e retornar DataTable com os dados para exportar
    "-> Modifique o ConnString
    "//////////////////////////////////////////////////// 

    Function Retorna_DataTable() As DataTable
        Dim dt As New System.Data.DataTable

        Try
            Dim conn As New System.Data.SqlClient.SqlConnection( _
	      "Data Source=127.0.0.1;Initial Catalog=Northwind;User ID=sa;Pwd=") 

            Dim da As New System.Data.SqlClient.SqlDataAdapter("Select * from Products", conn)
            da.Fill(dt) 

        Catch ex As Exception 

            Response.Write("Erro processando:" + ex.Message)
            Response.End() 

        End Try 

        Return dt 

    End Function  

End Class 

Adicionando o código da Listagem 2 efetue o build da aplicação e teste você mesmo. Para meu caso a url será http://localhost/treinamento/exportador.aspx conforme Figura 7.


Figura 07 - Testando aplicação

Conforme visto na Figura 7 essa pagina não vai mostrar nenhum contéudo apenas opção para Download. Caso queria abrir o Excel dentro do browser comente a linha abaixo:

oResponse.AddHeader("Content-Disposition","attachment; filename=Exportador" + g.NewGuid.ToString + ".xls")

Considerações

Quando você adicionar uma referência como apresentado na Figura 5 em que estando numa aplicação você adiciona a referencia de "util.dll" o visual studio faz uma cópia dessa dll para pasta \bin de sua aplicação. Ponrtando fique atento caso recompile seu Class Libary terá que atualizar em sua aplicação, mas para isso basta copiar a dll!

Conclusão

Desenvolver aplicação em varias camadas realmente está muito mais fácil. Nesse exemplo coloquei um simples código para usarmos como modelo. Mas dentro dessa classe você armazena toda sua lógica de negócios de forma que possa separar o código de negocio da camada de apresentação ou caso queria disponibilizar alguma funcionalidade para outro programador.

"Construa seu próprio FrameWork ! "

Sua participação é fundamental. Mande suas sugestões.

Você é de Salvador/Bahia venha para o grupo de usuários http://www.mutex.com.br.

Até o próximo artigo!

Ramon Durães

Ramon Durães - Especialista em desenvolvimento de software e Microsoft Most Valuable Professional (MVP) em Visual Studio Team System. Realiza treinamentos de .NET Framework em empresas, consultoria em arquitetura de software e implantação de Visual Studio Team System. Palestrante nos principais eventos da Microsoft no Brasil (Tech-Ed 2005, Tech-Ed 2006, Tech-Ed 2007, Tech-Ed 2008, Tech-ED 2009), Microsoft Innovation Days 2007 (Salvador, Brasília, Recife, Goiânia, Natal, Maringá), Microsoft Innovation Days 2009 (Salvador) , Campus Party Brasil 2009 e eventos regionais relacionados a grupos de usuários e universidades. Conhecido autor de artigos para os principais portais de conteúdo e autor de 10 publicações eletrônicas em CD (Video-Aula) pela editora Linha de Código além dos livros "Desenvolvendo para web usando o Visual Studio 2008" e "Gerenciando projetos de software usando Visual Studio Team System" pela editora Brasport. Pode ser encontrado em seu blog http://www.ramonduraes.net e @ramonduraes no Twitter.