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") = NothingResponse.Redirect("Default.aspx") 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)
Dim parmConfirma As OleDbParameter = New OleDbParameter("@confirma", OleDbType.Boolean) parmConfirma.Value = Truecmd.Parameters.Add(parmConfirma) Dim parmnumPedido As OleDbParameter = New OleDbParameter("@numeroPedido", OleDbType.VarChar, 50) parmnumPedido.Value = numeroPedido cmd.Parameters.Add(parmnumPedido) Dim parmCodPedido As OleDbParameter = New OleDbParameter("@pedidoID", OleDbType.Integer) parmCodPedido.Value = Session( "codigoPedido")cmd.Parameters.Add(parmCodPedido) Try 'abre a conexao e executa a stored procedure conn.Open() cmd.ExecuteNonQuery() Catch ex As ExceptionlblMensagem.Text = "Erro ao acessar os dados : " & vbCrLf & ex.Messageconn.Close() Exit Sub End Try Try Email.enviaMensagemEmail(Application("emailOrigem"), Session("Email"), "", "", "Pedido no. " & numeroPedido, montaTexto()) Response.Redirect( "finalizaCompras.aspx") Catch ex As ExceptionlblMensagem.Text = "Erro ao acessar os dados : " & vbCrLf & ex.Message Finally If conn.State = ConnectionState.Open Thenconn.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
' </summary> ' <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> Public Shared Sub enviaMensagemEmail(ByVal from As String, ByVal recepient As String, ByVal bcc As String, _ ByVal cc As String, ByVal subject As String, ByVal body As String) ' cria uma instância do objeto MailMessage Dim mMailMessage As New MailMessage() ' Define o endereço do remetente mMailMessage.From = New MailAddress(from)' Define o destinario da mensagem mMailMessage.To.Add( New MailAddress(recepient))' Verifica se o valor para bcc é null ou uma string vazia If Not bcc Is Nothing And bcc <> String.Empty Then ' Define o endereço bcc 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 mensagemmMailMessage.Body = body ' Define o formato do email como HTMLmMailMessage.IsBodyHtml = True ' Define a prioridade da mensagem como normalmMailMessage.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 emailmSmtpClient.Send(mMailMessage) End SubEnd 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
If Session("cesta") Is Nothing Then Response.Redirect( "Default.aspx") End IfIf 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