VB .NET - Login com Fluent NHibernate, NHibernate 4.0 e PostGreSql - II


 Este artigo mostra como usar o Fluent NHibernate e o NHibernate 4.0 para criar uma aplicação que realiza o login e faz o registro de um novo usuário no banco de dados PostgreSQL mostrando também como realizar as operações CRUD de manutenção dos usuários usando o padrão Repository.

Na primeira parte deste artigo criamos o banco de dados Cadastro e a tabela  usuarios no PostgreSQL , criamos o projeto no Visual Studio, definimos as referências ao NHibernate, Fluent NHibernate e ao provedor Npgsql,  definimos as entidades, o mapeamento e criamos a nossa SessionFactory e o nosso repositório. Quanto trabalho não é mesmo ?

Agora vamos continuar criando os formulários de login e registro no projeto Usuarios e mostrar realizar o login e registrar usuários.

Criando o formulário de login e de registro

No projeto Usuarios altere o nome do formulário form1.vb para frmLogin.vb e a seguir inclua neste formulário os seguintes controles a partir da ToolBox:

Disponha os controles conforme o leiaute da figura abaixo:

 

No código do formulário vamos primeiro incluir uma declaração para referenciar o projeto Repositorio:

Imports Repositorio

Logo após a declaração do formulário vamos definir uma variável do tipo UsuarioRepositorio:

Dim dao As UsuarioRepositorio

A seguir no evento Click do botão Login digite o código abaixo:

Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
        ErrorProvider1.Clear()
        If txtUsuario.Text = String.Empty Then
            ErrorProvider1.SetError(txtUsuario, "Informe o login do usuário")
            Return
        End If
        If txtSenha.Text = String.Empty Then
            ErrorProvider1.SetError(txtSenha, "Informe a senha do usuário")
            Return
        End If
        Try
            Dim usuarioRepo = New UsuarioRepositorio
            If (usuarioRepo.ValidarAcesso(txtUsuario.Text, txtSenha.Text)) Then
                Me.Hide()
                My.Forms.frmMenu.Show()
            Else
                MessageBox.Show("Login e/ou Senha inválidos", "Login Inválido", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If
        Catch ex As Exception
            MessageBox.Show("Erro ao acessar o sistema" & ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub

Este código após realizar as validações das caixas de texto : txtUsuario, txtSenha, cria uma instância da classe UsuarioRepositorio e usa o método ValidarAcesso() para verificar se o usuário esta cadastrado e ativo na tabela usuarios.

Vamos criar uma rotina chamada ExibirUsuarios() que exibe os usuários cadastrados no controle DataGridView - dgvUsuarios.

A seguir temos o código desta rotina criada no formulário:

Private Sub ExibirUsuarios()
        dao = New UsuarioRepositorio
        dgvUsuarios.DataSource = dao.Consultar().ToList
End Sub

No menu Exibir inclua o código abaixo que irá chamar a rotina ExibirUsuarios:

 Private Sub ExibirToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ExibirToolStripMenuItem.Click
        ExibirUsuarios()
    End Sub

Agora vamos incluir dois formulários ao projeto.

No menu PROJECT clique em Add Windows Forms e informe o nome frmRegistro.vb.

Repita o procedimento e inclua o formulário frmMenu.vb.

No formulário frmRegistro inclua os seguintes controles a partir da ToolBox:

Disponha os controles no formulário conforme o leiaute abaixo:

No código do formulário vamos primeiro incluir uma declaração para referenciar o projeto Repositorio:

Imports Repositorio

A seguir no evento Click do botão Incluir digite o código abaixo:

Private Sub btnIncluir_Click(sender As Object, e As EventArgs) Handles btnIncluir.Click
        ErrorProvider1.Clear()
        If txtNome.Text = String.Empty Then
            ErrorProvider1.SetError(txtNome, "Informe o nome do usuário")
            Return
        End If
        If txtLogin.Text = String.Empty Then
            ErrorProvider1.SetError(txtLogin, "Informe o login do usuário")
            Return
        End If
        If txtSenha.Text = String.Empty Then
            ErrorProvider1.SetError(txtSenha, "Informe a senha do usuário")
            Return
        End If
        Dim usuarioRepo As New UsuarioRepositorio
        If (usuarioRepo.ValidarLogin(txtLogin.Text)) Then
            MessageBox.Show("Login já esta Cadastrado", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            Try
                Dim user As New Usuario
                user.Login = txtLogin.Text
                user.Nome = txtNome.Text
                user.Senha = txtSenha.Text
                user.Status = retornaStatus()
                usuarioRepo .Inserir(user)
            Catch ex As Exception
                MessageBox.Show("Erro ao cadastrar " & ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Warning)
            End Try
            MessageBox.Show("Login Cadastrado com sucesso", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        End If
    End Sub

 Este código após realizar as validações das caixas de texto : txtNome,  txtLogin e txtSenha, cria uma instância da classe UsuarioRepositorio e usa o método ValidarLogin() para verificar se o login do usuário esta cadastrado. Se o login estiver cadastrado será exibida uma alerta, ao usuário caso contrário será criado um novo objeto Usuario que receberá os valores digitados nas caixas de texto e usando o método Inserir do repositório para incluir o novo usuário.

Nota: Talvez a utilização da combobox para exibir o status do usuário não fosse necessária e a  definição de ativo ou inativo no registro de usuário devesse ser automática para o registro de usuário. No entanto resolvi mostrar como podemos tratar esse item. Se desejar pode remover o controle e o código correspondente.

A rotina retornaStatus() apenas ajusta o valor atribuído ao campo Status. O seu código é dado abaixo:

  Private Function retornaStatus() As Char
        If cboStatus.Text = "Ativo" Then
            Return "A"
        ElseIf cboStatus.Text = "Inativo" Then
            Return "I"
        Else
            Return "A"
        End If
    End Function

No evento Click do botão Sair temos o código abaixo que encerra o formulário:

Private Sub btnSair_Click(sender As Object, e As EventArgs) Handles btnSair.Click
        Me.Close()
 End Sub

O formulário frmMenu é usado apenas para exibir uma mensagem de bem-vindo ao usuário quando o login é efetuado com sucesso. Abaixo temos o seu leiaute:

Executando o projeto teremos:

 
 

Você pode incluir outros campos no login como email (usado para enviar a senha quando o usuário a esquece) e data de registro e também não precisa exibir a senha do usuário no DataGridView ocultando essa informação. Esses detalhes são simples de tratar e fica como exercício você decidir se vai ou não usar.

Na última parte do artigo irei implementar as funcionalidades para procurar um usuário, alterar e realizar a exclusão.

Pegue o projeto completo aqui: ControleUsuarios.zip (sem as referências)

João 3:17 Porque Deus enviou o seu Filho ao mundo, não para que julgasse o mundo, mas para que o mundo fosse salvo por ele.

João 3:18 Quem crê nele não é julgado; mas quem não crê, já está julgado; porquanto não crê no nome do unigênito Filho de Deus.

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

 

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti