ASP.NET 2005 - Criando uma
site completo com carrinho de compras VII
Para acompanhar o desenvolvimento sobre a construção do site completo com carrinho de compras veja os artigos já publicados:
Este será o último artigo da segunda parte faltando apenas as páginas da administração do site.
No artigo anterior efetuamos a gravação do pedido do usuário e seus itens nas tabelas Pedidos e ItensPedidos após identificar o cliente solicitando a sua autenticação, desta forma os dados do cliente são armazenados na sessão e exibidos na página Confirma.aspx , abaixo , onde o usuário deverá confirmar o pedido feito;
![]() |
No menu WebSite->Add New Item selecione o template Web Form e informe o nome da página confirma.aspx selecionando o code-behind e a master page e clicando no botão OK.
A seguir defina o leiaute da página conforme abaixo usando os controles Label , TextBox e Button;
![]() |
O código associado ao evento Click do botão Cancelar deverá esvaziar a cesta do usuário e redirecioná-lo para página padrão conforme o código a seguir:
Protected
Sub btnCancelar_Click(ByVal
sender As
Object,
ByVal e
As System.EventArgs)
Handles
btnCancelar.Click
Session("Cesta")
=
Nothing End Sub |
O código do botão Confirmar irá chamar a rotina confirmaPedido()
Protected
Sub btnConfirmar_Click(ByVal
sender As
Object,
ByVal e
As System.EventArgs)
Handles
btnConfirmar.Click confirmaPedido() End Sub |
A rotina confirmaPedido() possui o seguinte código:
Private
Sub
confirmaPedido() Dim strcon As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\home\macoratti\dados\JcmSoft.mdb" Dim conn As OleDbConnection = New OleDbConnection(strcon) Dim cmd As OleDbCommand = New OleDbCommand("sp_ConfirmaPedido", conn)
parmConfirma.Value = True cmd.Parameters.Add(parmConfirma)
parmnumPedido.Value = numeroPedido cmd.Parameters.Add(parmnumPedido)
parmCodPedido.Value = Session("codigoPedido") cmd.Parameters.Add(parmCodPedido)
'abre a conexao e executa a stored procedure conn.Open() cmd.ExecuteNonQuery() Catch ex As Exception lblMensagem.Text = "Erro ao acessar os dados : " & vbCrLf & ex.Message conn.Close() Exit Sub End Try
Try Email.enviaMensagemEmail(Application("emailOrigem"), Session("Email"), "", "", "Pedido no. " & numeroPedido, montaTexto()) Response.Redirect("finalizaCompras.aspx") Catch ex As Exception lblMensagem.Text = "Erro ao acessar os dados : " & vbCrLf & ex.Message Finally If conn.State = ConnectionState.Open Then conn.Close() End If End Try End Sub |
Neste código eu estou atualizando a tabela Pedidos gravando a confirmação e o número do pedido que foi gerado para identificação do pedido.
Eu estou usando um procedimento armazenado chamado sp_ConfirmaPedido que possui o seguinte código:
UPDATE Pedidos SET confirmado =
[@confirma], numeroPedido = [@numeroPedido] WHERE PedidoID=[@PedidoID]; |
Este procedimento usa 3 parâmetros : confirma ,numeroPedido e PedidoID que são definidos no código. A seguir o comando é executado usando a instrução ExecuteNonQuery() que não retorna nenhum registro.
Nesta rotina , na sequência, é usado o método enviaMensagem() da classe Email. A classe Email foi criada no projeto da seguinte forma:
No menu WebSite->Add New Item selecione o template Class e informe o nome Email.vb. O arquivo será colocado na pasta App_Code. A seguir inclua o seguinte código no arquivo:
Imports System.Net.mail
' <param name="from">Endereco do Remetente</param> ' <param name="recepient">Destinatario</param> ' <param name="bcc">recipiente Bcc</param> ' <param name="cc">recipiente Cc</param> ' <param name="subject">Assunto do email</param> ' <param name="body">Corpo da mensagem de email</param>
ByVal cc As String, ByVal subject As String, ByVal body As String)
Dim mMailMessage As New MailMessage()
mMailMessage.From = New MailAddress(from)
mMailMessage.To.Add(New MailAddress(recepient))
If Not bcc Is Nothing And bcc <> String.Empty Then
mMailMessage.Bcc.Add(New MailAddress(bcc))
End
If ' verifica se o valor para cc é nulo ou uma string vazia If Not cc Is Nothing And cc <> String.Empty Then ' Define o endereço cc mMailMessage.CC.Add(New MailAddress(cc))
End
If ' Define o assunto mMailMessage.Subject = subject ' Define o corpo da mensagem mMailMessage.Body = body ' Define o formato do email como HTML mMailMessage.IsBodyHtml = True ' Define a prioridade da mensagem como normal mMailMessage.Priority = MailPriority.Normal ' Cria uma instância de SmtpClient - Nota - Define qual o host a ser usado para envio ' de mensagens, no local de smtp.server.com use o nome do SEU servidor Dim mSmtpClient As New SmtpClient("localhost") ' Envia o email mSmtpClient.Send(mMailMessage) End Sub End Class |
Como o método enviaMensagemEmail é estático (shared) não precisamos instanciar a classe Email para usá-lo.
Nota: Eu estou usando o servidor STMP padrão da minha máquina local para enviar os emails. Veja como configurar o servidor SMTP do IIS neste artigo: Configurando o servidor SMTP no IIS
Todos os dados necessários ao envio do email ao cliente são passado no método conforme vemos a seguir:
Email.enviaMensagemEmail(Application("emailOrigem"), Session("Email"), "", "", "Pedido no. " & numeroPedido, montaTexto())
Perceba que estamos usando a função montaTexto() para montar o texto que será efetivamente enviado ao cliente. O código desta rotina esta abaixo:
Private Function montaTexto() As String
Dim texto As New StringBuilder(" O B R I G A D O P O R C O M P R A R N O MACORATTI.NET")
texto = texto.AppendLine texto = texto.AppendLine texto = texto.Append("Prezado(a) " & Session("nomeCliente")) texto = texto.AppendLine texto = texto.AppendLine texto = texto.Append("Esta é a confirmação de que seu pedido de No. " & numeroPedido & " foi finalizado com sucesso.") texto = texto.AppendLine texto = texto.AppendLine texto = texto.Append("Data do Pedido : " & DateTime.Now) texto = texto.AppendLine texto = texto.Append("Valor total do pedido : " & String.Format("{0:c}", Session("Total"))) texto = texto.AppendLine texto = texto.AppendLine texto = texto.Append("Você deve efetuar o pagamento do pedido em um dos seguintes bancos: ") texto = texto.AppendLine texto = texto.AppendLine texto = texto.Append("Banco do Brasil Agência: 0057-4 Conta: 42179-0 Variação=01 POUPANÇA") texto = texto.AppendLine texto = texto.Append("Banco Bradesco Agência: 2962-9 Conta: 4565-9 POUPANÇA") texto = texto.AppendLine texto = texto.AppendLine texto = texto.Append("Após o pagamento envie um email para macoratti@yahoo.com informando o número do documento.") texto = texto.AppendLine texto = texto.AppendLine texto = texto.Append("Seu pedido será enviado via correio para o endereço: ") texto = texto.AppendLine texto = texto.AppendLine texto = texto.Append(Session("endereco")) texto = texto.AppendLine texto = texto.Append(Session("cidade") & " - " & Session("estado")) texto = texto.AppendLine texto = texto.Append(Session("cep")) texto = texto.AppendLine texto = texto.AppendLine texto = texto.Append("O prazo médio da entrega é 5 dias.") Return texto.ToString End Function |
A função MontaTexto usa a classe StringBuilder para montar uma string contendo o texto a ser enviado ao cliente no corpo do email.
Nota: Para saber mais sobre a classe StringBuilder leia o artigo: VB .NET - StringBuilder : tratando Strings de modo mais eficiente
Após enviar o email o cliente é redirecionado para a página finalizaCompras.aspx que apresenta um resumo da sua compra e indica que ela foi finalizada com sucesso.
![]() |
No menu WebSite->Add New Item selecione o template Web Form e informe o nome da página finalizaCompras.aspx selecionando o code-behind e a master page e clicando no botão OK.
A seguir defina o leiaute da página conforme abaixo usando os controles Label , TextBox e Hyperlink;
![]() |
No evento Load desta página verificamos se o cliente esta logado e se a cesta não esta vazia, em seguida preenchemos os controles com os dados obtidos na sessão e no final esvaziamos a cesta do cliente conforme o código a seguir.
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim mes As Integer = DateTime.Now.Month
Response.Redirect("Default.aspx") End If
If Session("ClienteID") Is Nothing Then Response.Redirect("login.aspx") End If
'obtem os valores do pedido Dim nomeCliente As String = Session("nomeCliente")
lblNumeroPedido.Text = nomeCliente.Substring(0, 3).ToUpper & dia.ToString & mes.ToString & Session("cep") & Session("estado") lblValorTotal.Text = String.Format("{0:c}", Session("Total"))
Session("Cesta") = Nothing End If End Sub |
Clicando no botão Retornar o cliente retorna a página inicial do site.
Com isso terminamos todo ciclo de compras feito pelo cliente a próxima etapa será criar as páginas para administrar o site onde serão realizadas operações de cadastramento e manutenção de produtos, artigos e cliente.
Veja a continuação do artigo em : Site completo com carrinho de compras VIII
A vídeo Aula deste artigo esta no Super DVD Vídeo Aulas
Até o próximo artigo .NET
José Carlos Macoratti