Treinamento em ASP.NET (Parte III)
Nesse artigo 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.
Clique aqui para ler este artigo em pdf
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 |
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.
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).
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.
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.
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.
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.
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
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo