Clique aqui para ler este artigo em pdf imagem_pdf.jpg

msdn03_capa.jpg

Clique aqui para ler todos os artigos desta edição

 

Treinamento em ASP.NET (Parte III)

por Renato Haddad

 

Esta é a última parte do treinamento em ASP.NET. Aqui, você aprenderá o conceito de Session, bem como a criar e ler variáveis de Session, enviar e-mails para um conjunto de clientes selecionados e criar e ler arquivos XML a partir de um Dataset. Você verá também como criar arquivos de cabeçalho e rodapé que serão usadas em todas as páginas de seu site.

 

Na parte I deste treinamento, foi criada uma solução chamada MSDNMag, que contém todos os arquivos desenvolvidos até aqui. Portanto, abra esta solução e adicione um novo User Control (Add / Add Web User Control) chamado cabecalho.ascx. Repare na extensão desse arquivo - ele será utilizado como cabeçalho em todas as páginas do site. No layout deste documento, adicione uma tabela (componente Table da Toolbox HTML) que contenha uma imagem (por exemplo, o logotipo da sua empresa). Adicione três controles Hyperlinks para criar um link para os demais arquivos que criaremos. Veja na Figura 1 o layout do cabeçalho. Para cada Hyperlink, configure as seguintes propriedades:

 

Text

NavigateUrl

Session

Session.aspx

Gerencia E-mails

GerenciaEmails.aspx

Arquivos XML

ArquivosXML.aspx

 

image002.gif

Figura 1 – Arquivo de cabeçalho

 

Adicione um novo User Control (Add / Add Web User Control), chamado rodape.ascx, para ser o rodapé de todas as páginas do site (veja a Figura 2). Com isso, você pode criar apenas um arquivo padrão e usá-lo em qualquer página, eliminando a necessidade de repetir o mesmo código diversas vezes.

 

image004.gif

Figura 2 – Arquivo de rodapé

 

Para utilizar os User Controls criados em sua aplicação, basta clicar no respectivo User Control dentro do Solution Explorer e arrastá-lo para dentro de sua página aspx (formulário) que contém o design de sua página web através do Visual Studio .NET.

 

Session

O conceito de Session é fundamental para que você usufrua os recursos que o ASP.NET e a Internet proporcionam às aplicações. Sempre que você abre um site, é criada uma Session para cada Internauta no servidor. Isso significa que, se dez mil internautas acessarem o mesmo site ao mesmo tempo, serão criadas dez mil Sessions no servidor. Portanto, não há nenhum problema em manter diversas Sessions, mesmo porque isso já é feito de forma automática no servidor. Como uma Session não enxerga a outra, é possível trabalhar com os dados de seus respectivos internautas. Todas as variáveis de Session criadas poderão ser enxergadas em qualquer página até que o internauta feche o site ou que a conexão caia. Em resumo, uma Session é uma área restrita para cada internauta.

Em aplicações para WEB é possível se criar variáveis “globais”, de forma que todos os Internautas possam acessar estas variáveis em todas as páginas do site. Essas variáveis podem ser criadas por meio do tipo chamado Application. A variável de Session pertence ao Internauta, ao passo que Application pertence à aplicação (site). Veja o exemplo a seguir:

 

Session("Status") = "válido"

Application("Contador") = 0

 

Crie um novo formulário (Add / Add Web Form) chamado Session.aspx. Para inserir o cabeçalho (User Control) já criado, arraste o arquivo cabecalho.ascx para dentro do documento e insira os seguintes controles com suas respectivas propriedades:

 

TextBox1 (ID)

TxtNome

TextBox2 (ID)

TxtSenha

TextMode

Password

Button1 (ID)

BtnCria

Text

Cria Session

Button2 (ID)

BtnLer

Text

Ler Session

Button3 (ID)

BtnAbandona

Text

Abandona Session

Label1 (ID)

LblSession

Hyperlink1 (ID)

Hyperlink1

Text

Gerencia E-mails

NavigateUrl

GerenciaEmails.aspx

Target

_self

 

Após inserir estes controles listados anteriormente na tabela, arraste o User Control rodapé.ascx logo abaixo do último controle do formulário, finalizando assim o layout do formulário.

Veja na Figura 3 o layout do formulário em tempo de criação (Design Time).

 

image006.gif

Figura 3 – Layout final do Session.aspx

 

Dê um duplo clique em cada botão e digite o código relevante a ele para manipular as variáveis de Session, conforme Listagem 1. É importante notar que, para criar uma variável de Session, basta informar o nome da variável e seu conteúdo. A explicação está na própria listagem.

 

Listagem 1. Códigos dos botões

Private Sub btnCria_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCria.Click

    'Verifica se existem dados digitados

    If txtNome.Text.Trim <> "" And txtSenha.Text.Trim <> "" Then

        'Cria variáveis de Session

        Session("Usuario") = txtNome.Text.Trim

        Session("Senha") = txtSenha.Text.Trim

        lblSession.Text = "Variáveis criadas na Session"

    Else

        lblSession.Text = "A Session não foi criada"

    End If

End Sub

 

Private Sub btnLer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLer.Click

    ' Lê as variáveis de Session

    lblSession.Text = "Session ID: " + _

    Session.SessionID + _

    " - Usuário: " + Session("Usuario") + _

    " - Senha: " + Session("Senha")

End Sub

 

Private Sub btnAbandona_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAbandona.Click

    ' Abandona a Session

    Session.Abandon()

End Sub

 

No Solution Explorer, defina o formulário Session.aspx como default (Set As Start Page), salve o projeto, compile-o e o execute (Ctrl + F5) para ver o resultado. A Figura 4 exibe o formulário no navegador com o cabeçalho, o rodapé e todos os controles do Session.aspx. Digite o nome, a senha e clique nos botões correspondentes para testar. O objetivo de criarmos uma Session é que, nas próximas páginas a serem criadas (veja mais adiante) seja verificado se a Session existe. Essa será a forma de  validar o internauta a navegar somente em páginas autorizadas. Você notará nestas outras páginas carregadas que esse teste já foi executado no evento Page_Load. Se não existir a variável criada para Session(“Usuário”), o Internauta será redirecionado à página Session.aspx para efetuar o login.

 

 

image008.jpg

Figura 4 – Execução da página Session.aspx


Envio de E-mail

O envio de e-mail é um recurso usado com freqüência em aplicações de Internet. O exemplo criado neste artigo não só envia um e-mail como permite ao Internauta selecionar, em uma lista de uma tabela do banco de dados, os clientes aos quais ele deseja enviar o e-mail. Com isso, é possível criar um mecanismo de envio direcionado de e-mails.

Para que o exemplo funcione corretamente, você precisa criar uma tabela chamada Clientes, na qual os campos Cliente e Email contenham alguns dados válidos para testes, ou seja, nomes e e-mails válidos. Em seguida, adicione um novo formulário (Add / Add Web Form) chamado GerenciaEmail.aspx e que contenha os arquivos cabecalho.ascx, rodape.ascx (não se esqueça, basta clicar nos User Controls no Solution Explorer e arrastá-los para dentro de seu formulário) e os seguintes controles:

 

CheckBoxList1 (ID)

CklClientes

RepeatColumns

2

TextBox1 (ID)

TxtAssunto

TextBox2 (ID)

TxtMensagem

TextMode

MultiLine

Button1 (ID)

BtnEnviar

Text

Enviar

 

Para você ter uma referência do layout desta página, veja na Figura 5 a página executada no navegador. Digite os códigos conforme a Listagem 2. Para exemplificar uma das funcionalidades da Session, quando esse formulário for aberto, será verificado se a variável de Session “Usuario” existe. Se ela existir, ele poderá executar o código desse formulário Caso contrário, o Internauta será redirecionado para o formulário Session.aspx para que ele possa se logar e criar a Session. Essas ações proporcionam segurança ao site e evitam que uma página seja aberta diretamente na URL. Você deve aplicar essa técnica a todos os formulários existentes que requeiram login.

A string declarada para a conexão com o banco de dados Northwind está expressa no código. Caso necessite, declare a Password e os demais parâmetros da conexão, pois as definições dependerão de como o SQL Server foi instalado. A parte II de nosso treinamento mostrou o acesso a banco de dados.

 

Listagem 2. Códigos do gerenciador de e-mails

'Referencia as classes do SQL Server e e-Mail

Imports System.Data.SqlClient

Imports System.Web.Mail

 

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

    Try

        'Verifica se a Session existe. Caso não exista

        'o Internauta será redirecionado para outra página

        If Session("Usuario") = Nothing _

            Then Response.Redirect("Session.aspx")

    Catch ex As Exception

        Response.Redirect("Session.aspx")

    End Try

    If Not Page.IsPostBack Then

        'Abre a conexão com o banco de dados

        Dim conn As New SqlConnection("Database=Northwind;Server=(local);user id=sa")

        'Monta o SQL, o Adapter e o DataSet

        Dim sql As String = "SELECT * FROM Clientes ORDER BY Cliente"

        Dim da As New SqlDataAdapter(sql, conn)

        Dim ds As New DataSet

        Try

            'Abre a conexão

            conn.Open()

            'Preenche o DataSet com a DataTable Clientes

            da.Fill(ds, "clientes")

            'Define as propriedades do controle

            With cklClientes

                .DataTextField = "Cliente"

                .DataValueField = "Email"

                .DataSource = ds.Tables("clientes").DefaultView

                .DataBind()

            End With

        Finally

            conn.Close()

        End Try

    End If

End Sub

 

Private Sub btnEnviar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnviar.Click

    'Verifica se os dados foram digitados

    If txtAssunto.Text.Trim <> "" And txtMensagem.Text.Trim <> "" Then

        'Monta um looping para todos os items do controles

        Dim objItem As ListItem

        For Each objItem In cklClientes.Items

            'Se o cliente estiver selecionado

            If objItem.Selected Then

                'Dispara o e-mail

                Dim email As New MailMessage

                With email

                    .From = "editormsdn@hotmail.com"

                    .To = objItem.Value.ToString()

                    .Subject = txtAssunto.Text.Trim

                    .Body = txtMensagem.Text.Trim

                    SmtpMail.Send(email)

                End With

            End If

        Next

    End If

End Sub

 

Assim que a página GerenciaEmail (exibida na Figura 5) for aberta, ela aparecerá montada e exibirá a lista de clientes cadastrados na tabela Clientes no banco de dados. Selecione os clientes que irão receber o e-mail e digite o assunto e a mensagem. Para disparar o e-mail, clique no botão Enviar. Caso queira melhorar este exemplo, você pode criar grupos de clientes organizados por estados, categorias etc. e disparar e-mails para um determinado grupo.

 

image010.jpg

Figura 5 – Execução da página de e-mail.

 

Arquivos XML

 

XML (Extensible Markup Language) consiste em um padrão mundial que tem conquistado o mercado em aplicativos de integração de dados entre plataformas, aplicações e fontes de dados. Neste exemplo, veremos como ler uma tabela do banco de dados, gerar um Dataset e gravar um arquivo XML. Por outro lado, caso você receba um arquivo XML de outra empresa ou aplicação, precisa saber como ler o respectivo arquivo.

 

Adicione um novo formulário (Add / Add Web Form) chamado ArquivosXML.aspx que contenha o cabeçalho e o rodapé existentes nos arquivos ascx. Inclua os seguintes controles:

 

Button1 (ID)

BtnGrava

Text

Gravar Arquivo

Button2 (ID)

BtnLer

Text

Ler Arquivo

DataGrid1 (ID)

DataGrid1

Visible

False

Label1 (ID)

LblMensagem

Visible

False

 

Veja na Figura 6 o layout do formulário ArquivoXML.aspx com os controles inseridos, tanto os User Controls cabecalho.ascx, rodape.ascx como os demais controles.

 

image012.gif

Figura 6 – Layout do formulário ArquivoXML.aspx.

 

Para criar um arquivo XML, monte um DataTable no DataSet e use o método WriteXml para gravar o arquivo propriamente dito. Digite os códigos para gravar e ler o arquivo ProdutosMSDN.xml conforme a Listagem 3. Note que no evento Page_Load é feita a verificação para conferir se existe uma variável de Session Usuario, pois o Internauta só conseguirá executar a página se essa variável estiver presente. Após executar este formulário, se você tiver outro arquivo XML, experimente trocar o nome do arquivo XML a ser lido e faça o teste.

Listagem 3. Códigos para gravar e ler o arquivo XML

'Referencia a classe do SQL Server

Imports System.Data.SqlClient

 

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

    'Verifica a Session

    Try

        If Session("Usuario") = Nothing _

            Then Response.Redirect("Session.aspx")

    Catch ex As Exception

        Response.Redirect("Session.aspx")

    End Try

End Sub

 

Private Sub btnLer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLer.Click

    Try

        'Cria o DataSet

        Dim dsXML As New DataSet

        'Lê o arquivo

        dsXML.ReadXml("c:\produtosMSDN.xml")

        'Exibe o Grid e o Label

        DataGrid1.Visible = True

        lblMensagem.Visible = True

        'Define a origem do DataGrid

        DataGrid1.DataSource = dsXML

        DataGrid1.DataBind()

        'Exibe a qtde de registros

        lblMensagem.Text = "Existem " + _

            dsXML.Tables(0).Rows.Count.ToString() + _

            " registros"

    Catch ex As Exception

        lblMensagem.Text = "Ocorreu um erro na leitura"

        DataGrid1.Visible = False

    End Try

End Sub

 

Private Sub btnGrava_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGrava.Click

    'Define a conexão

    Dim conn As New SqlConnection("Database=Northwind;Server=(local);user id=sa")

    'Define a string SQL

    Dim sql As String = "SELECT ProductID, ProductName, UnitPrice FROM Products"

    'Define o Adapter e o DataSet

    Dim da As New SqlDataAdapter(sql, conn)

    Dim dsXML As New DataSet

    'Oculta o DataGrid e o Label

    DataGrid1.Visible = False

    lblMensagem.Visible = True

    Try

        'Abre a conexão

        conn.Open()

        'Preenche o DataSet com a DataTable produtos

        da.Fill(dsXML, "produtos")

        'Grava o arquivo XML

        dsXML.WriteXml("c:\produtosMSDN.xml")

        lblMensagem.Text = "Arquivo gerado com sucesso"

    Finally

        conn.Close()

    End Try

End Sub

 

A Figura 7 mostra o arquivo XML gerado pelo código criado no botão Gravar da página ArquivosXML.aspx.

 

image014.jpg

Figura 7 – Arquivo XML aberto no navegador.

 

Conclusões

Neste artigo, vimos como o uso de Session pode ser útil na programação dos formulários e como o uso de Web User Control pode ajudá-lo a padronizar o layout (poupando-o de ter de recriar controles padrão).

O uso de e-mails em aplicações de marketing, vendas, CRM e outras é fundamental para o relacionamento com os clientes. O código apresentado neste artigo demonstrou o uso real deste recurso, que pode ser implementado em qualquer aplicação na empresa.

Espero que, com esta série de artigos sobre o ASP.NET, você consiga desenvolver aplicações para WEB e colocar os dados de sua empresa ao alcance de todos os interessados.  “No stress, think .NET”.

 

Referências:

http://www.asp.net

http://www.gotdotnet.com

http://www.codeproject.com

http://www.linhadecodigo.com.br