Desenvolvimento - ASP. NET

Aplicações Móveis no .NET

As aplicações desenvolvidas para telefones celulares ganharam um espaço grande no mundo sem fio, como bancos, mercado financeiro, notícias, índices, área médica, entre outras.

por Renato Haddad



As aplicações desenvolvidas para telefones celulares ganharam um espaço grande no mundo sem fio, como bancos, mercado financeiro, notícias, índices, área médica, entre outras. No entanto, antes do Mobile .NET você desenvolvia basicamente utilizando WML (Wireless Markup Language) e caso precisasse de páginas dinâmicas, incrementava o ASP (Active Server Pages), entre outras tecnologias. Com o Visual Studio .NET é possível criar uma aplicação para executar em telefones celulares ou diretamente em um navegador. Para isso, você precisa instalar o Mobile internet Toolkit 1.0 (veja em downloads www.microsoft.com/mobile), que é um SDK para desenvolvimento.

Para simular uma aplicação dentro do Visual Studio .NET você pode instalar o Microsoft Mobile Emulator 3.0 ou qualquer outro dispositivo que suporte o Framework. Outros simuladores podem ser conseguidos nos fabricantes como Nokia e Ericson, fato que cresce a cada dia o número de dispositivos criados para essa finalidade.

Neste artigo vamos criar uma simples aplicação com alguns formulários e controles para consultas de Saldos, Extratos e Contas diretamente no telefone celular. A facilidade que o ambiente RAD (Rapid Application Development) proporciona dentro do Visual Studio .NET, permite um desenvolvimento sem traumas, usando todos os recursos das classes que o Framework dispõe. Quando você instala o SDK irá perceber que a Toolbox de controles chamada Mobile Web Forms contém uma quantidade de componentes que uma aplicação móvel suporta, e a IDéia é exibir os mais utilizados.

Uma aplicação móvel é considerada uma aplicação ASP.NET porque será armazenada em um servidor de aplicações na WEB rodando sob o internet information Server. Crie um novo projeto chamado VSPJ do tipo Mobile Web Application. No Solution Explorer, adicione um novo item chamado BancoVirtual.aspx do tipo Mobile Web Form. No formulário atual, altere o ID para frmMain e o Title para Banco Virtual .NET e adicione os seguintes controles: três TextBox nomeados Agencia, Conta e Senha respectivamente; para o controle Senha altere a propriedade Password para True; Adicione um Command (botão de comando) com o Text = Entrar; Adicione um Label chamado ResultadoSenha. Esse formulário fará a autenticação do usuário da conta, se for inválido o menu de opções não será exibido. Vale dizer que todos os controles derivam da classe System.Web.Ui.MobileControls.MobilePage.

Formulário de Autenticação

Figura 1: Formulário de Autenticação

Veja a estrutura das tabelas e o relacionamento existente.

Banco de dados

Figura 2: Banco de dados

Como o banco de dados é o SQL Server, então vá até a janela de código (F7) e insira na primeira linha a referência para a classe para acessar o ADO.NET.

Imports System.Data.SqlClient

Como a conexão será usada em diversas partes do código, insira a seguinte linha antes do evento Page_Load para que fique disponível em qualquer parte do aplicativo.

Dim conn As New SqlConnection("initial Catalog=Bancos;Data Source=wind;User ID=sa")

Digite o código no botão de comando Entrar que identifica o correntista. isso pode ser feito dando um duplo clique no respectivo botão na janela de Design.

Private Sub Command1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
	Handles Command1.Click
    Dim agencia As integer = Me.Agencia.Text
    Dim conta As integer = Me.Conta.Text
    Dim senha As String = Me.Senha.Text
    Dim sql As String
    sql = "SELECT IDConta, email FROM Correntistas WHERE Agencia=" 
	_& agencia & " AND conta=" & conta & " AND senha="" & senha & """
    Dim cmd As New SqlCommand(sql, conn)
    Dim dr As SqlDataReader
    Try
        conn.Open()
        dr = cmd.ExecuteReader()
        if Not dr.Read() Then
            ResultadoSenha.Text = "Dados incorretos !!!"
            dr.Close()
        Else
            Session("IDConta") = dr("IDConta")
            Session("email") = dr("email")
            dr.Close()
            ActiveForm = frmMenu
        End if
    Finally
        conn.Close()
    End Try
End Sub

Se o correntista for válido, é preciso exibir o formulário com as opções de menu. Para isso, adicione um objeto Form (formulário) com o ID = frmMenu contendo um componente List. Altere as seguintes propriedades do List: Decoration = Numbered; para adicionar os itens selecione a propriedade items, clique no construtor (...) e digite as opções (item Text) com os respectivos valores (Value): Saldo Atual - 1; Extrato Conta - 2; Pagar Contas - 3. Desta forma você já tem as opções de menu.

Formulário com as opções do menu

Figura 3: Formulário com as opções do menu

Para cada opção existirá um formulário específico para tal finalidade com controles distintos, a fim de explorar os recursos da aplicação. insira mais três formulários com os seguintes controles e propriedades:

Formulário de Saldo Bancário

  • ID: frmSaldo
  • Label: ID = Saldo
  • Command: Text = voltar

Formulário de Extrato Conta Corrente

  • ID: frmExtrato
  • TextView: ID = extrato
  • Command: Text = Enviar e-mail
  • Command: Text = voltar

Figura 4 - Formulários de Saldo e Extrato.

Formulários de Saldo e Extrato

Figura 4: Formulários de Saldo e Extrato

Formulário de Contas

  • ID: frmContas
  • List: SelectType = CheckBox
  • Command: Text = Selecionar
  • TextView: ID = contas
  • Command: Text = Efetuar Pagto
  • Label: ID = ResultadoContas
  • Command: Text = voltar
Formulários de Contas

Figura 5: Formulários de Contas

Salve o projeto, compile e execute no navegador ou no simulador. Caso você tenha instalado o MME 3.0, selecione o menu View/Mobile Explorer Browser / Show Browser. O endereço da URL é http://localhost/VSPJ/BancoVirtual.aspx. Digite os dados e clique no botão Entrar.

Execução do aplicativo para um usuário válido

Figura 6: Execução do aplicativo para um usuário válido

Para ativar os formulários é preciso identificar qual opção o usuário selecionou e preencher os respectivos dados, portanto no frmMenu dê um duplo clique no List e digite o seguinte código de acordo com a opção:

Private Sub List1_itemCommand
	(ByVal sender As System.Object, ByVal e As System.Web.Ui.MobileControls.ListCommandEventArgs)
	Handles List1.itemCommand
    Select Case Cint(e.Listitem.Value)
        Case 1
            ActiveForm = frmSaldo
            Saldo.Text = "R$ " & FormatNumber(VerificaSaldo(), 2)
…
End Sub

Se a opção selecionada for Saldo, é invocada uma rotina que ativa o formulário frmSaldo e preenche o controle Saldo com o conteúdo da função VerificaSaldo formatado com duas casas decimais. Digite a função que lê o valor do saldo na tabela. Esta função pesquisa o campo Saldo na tabela Correntistas de acordo com a Identificação da conta contida na Session("IDConta"), que é a variável de sessão criada quando da autenticação no aplicativo. Em seguida são definidos o Command, o DataReader, a abertura da conexão e a execução do DataReader.

Pesquisa o saldo na conta

Figura 7: Pesquisa o saldo na conta

Continuando o código do List1_itemCommand, veja como fica a segunda opção para consulta de extrato bancário que exibe o formulário frmExtrato.

Case 2
    ActiveForm = frmExtrato
    VerificaExtrato()

Note que é preciso digitar a rotina VerificaExtrato que exibe a movimentação dos últimos 5 dias. Essa rotina pode ser digitada após o End Sub do List1_itemCommand.

Case 2
    ActiveForm = frmExtrato
    VerificaExtrato()
Note que é preciso digitar a rotina VerificaExtrato que exibe a movimentação dos últimos 5 dias. Essa rotina pode ser digitada após o End Sub do List1_itemCommand.
Sub VerificaExtrato()
    Dim saldoAtual As Double = VerificaSaldo()
    Dim sql As String = "SELECT Data, Tipo, Valor FROM Movimentacao WHERE IDConta=" 
	_& Session("IDConta") & " AND Data>= getDate()-5"
    Dim cmd As New SqlCommand(sql, conn)
    Dim dr As SqlDataReader
    Try
        conn.Open()
        dr = cmd.ExecuteReader()
        With extrato
            .Text = "Saldo: " & FormatNumber(saldoAtual, 2) & "<br>"
            Do While dr.Read()
                .Text += Day(dr("Data")) & "/" & Month(dr("Data")) & " "
                if dr("Tipo") = "c" Then
                    .Text += "+ "
                    saldoAtual += dr("Valor")
                Else
                    .Text += "- "
                    saldoAtual -= dr("Valor")
                End if
                .Text += FormatNumber(dr("Valor"), 2) & "<br>"
            Loop
            .Text += "
Saldo Atual: " & FormatNumber(saldoAtual, 2)
        End With
    Finally
        dr.Close()
        conn.Close()
    End Try
End Sub
Extrato da conta no celular

Figura 8: Extrato da conta no celular

Caso você queira enviar o extrato para a sua conta de e-mail cadastrada no banco, clique no botão e-mail. A classe utilizada é a imports System.Web.Mail que deve ser digitada no início das linhas dos códigos. Veja o código para enviar o e-mail no formato HTML cujo corpo do e-mail estará armazenado na variável msg.

Private Sub Command2_Click
	(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Command2.Click
    Dim email As New MailMessage()
    Dim saldoAtual As Double = VerificaSaldo()
    Dim sql As String = "SELECT Data, Tipo, Valor FROM Movimentacao WHERE IDConta="
	_& Session("IDConta") & " AND Data >= getDate()-2"
    Dim cmd As New SqlCommand(sql, conn)
    Dim dr As SqlDataReader
    Dim msg As String
    Try
        conn.Open()
        dr = cmd.ExecuteReader()
        msg = "<HTML><BODY>Confira o extrato<br>"
        msg += "<font color=blue size=7><b>Saldo: "
		_& FormatNumber(saldoAtual, 2) & "</b></font><br>"
        msg += "<font color=black size=4>"
        Do While dr.Read()
           msg += Day(dr("Data")) & "/" & Month(dr("Data")) & " "
           if dr("Tipo") = "c" Then
               msg += "+ "
               saldoAtual += dr("Valor")
           Else
               msg += "- "
               saldoAtual -= dr("Valor")
           End if
           msg += FormatNumber(dr("Valor"), 2) & "<br>"
        Loop
        msg += "</font><br>Saldo Atual: " & FormatNumber(saldoAtual, 2)
        msg += "</BODY></HTML>"
    Finally
        dr.Close()
        conn.Close()
    End Try
    With email
        .From = "banco@banco.com.br"
        .To = Session("email")
        .Subject = "Extrato bancário"
        .Body = msg
        .BodyFormat = MailFormat.Html
    End With
    SmtpMail.Send(email)
End Sub

Para explorarmos os recursos de alguns controles, vamos inserir um conjunto de contas que você pode autorizar o débito automático pelo telefone celular. No entanto, não iremos desenvolver a rotina de débito, e sim, mostrar como manipular o controle. Como isso refere-se a terceira opção do menu, veja o restante do código referente ao List1_itemCommand.

Case 3
            ActiveForm = frmContas
            Dim arrayContas As New ArrayList()
            With arrayContas
                .Add("Telefone")
                .Add("Celular")
                .Add("Mercado")
                .Add("Aluguel")
                .Add("Carro")
                .Add("Luz")
                .Add("Agua")
                .Add("Academia")
            End With
            Me.lstContas.DataSource = arrayContas
            Me.lstContas.DataBind()
            lstContas.Visible = True
            Command8.Visible = False
            Command9.Visible = True
            contas.Text = ""
    End Select
End Sub

Note que o formulário frmContas é ativado, é montado um array com as opções de contas e o controle lstContas é carregado com o array. É interessante notar que a propriedade DataSource define a origem dos dados e o método DataBind preenche o controle, dispensando assim, ter que montar um looping e adicionar cada linha do array.

Figura 9

Figura 9

Private Sub Command9_Click
	(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Command9.Click
    Dim objitem As MobileControls.MobileListitem
    contas.Text = ""
    lstContas.Visible = False
    For Each objitem in Me.lstContas.items
        if objitem.Selected Then
            contas.Text &= objitem.Text & " - "
        End if
    Next
    Command9.Visible = False
    Command8.Visible = True
End Sub

Para autorizar o pagamento crie o código para o botão Efetuar Pagto que poderia conter uma rotina para realmente efetivar o débito na conta corrente. Aqui só estamos exibindo um texto para verificação.

Private Sub Command8_Click
	(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Command8.Click
    ResultadoContas.Text = "Suas contas serão debitadas automaticamente na sua conta"
End Sub

Este artigo serviu para você explorar alguns controles disponíveis para celulares, acessar um banco de dados via ADO.NET, e verificar o funcionamento da aplicação.

Desenvolver aplicativos para telefones celulares deixou de ser um mercado fechado a poucos desenvolvedores. O Mobile internet Toolkit nos proporciona através do Visual Studio .NET integrar as aplicações existentes que rodam na internet ou Windows Application com o telefone celular, aumentando a abrangência da sua aplicação.

Bem vindos ao mundo móvel. "No stress, think .NET".

Renato Haddad

Renato Haddad - MVP, MCPD e MCTS, palestrante em eventos da Microsoft em diversos países, ministra treinamentos focados em produtividade com o VS.NET 2008, ASP.NET 3.5, Reporting Services e Windows Mobile.