.NET

9 out, 2014

Login com Fluent NHibernate, NHibernate 4.0 e PostgreSQL – Parte 02

Publicidade

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 Usuários 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 Usuários, realizar o login e registrar usuários.

Criando o formulário de login e de registro

No projeto Usuários, 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:

  • 2 GroupBox – Text = Login e Text = Usuários
  • 2 Label
  • 2 TextBox – txtUsuario e txtSenha
  • 1 Button – btnLogin
  • 1 DataGridView – dgvUsuarios
  • 1 Picturebox
  • 1 MenuStrip – Login : Exibir, Registrar e Sair
  • 1 ErrorProvider
  • 1 LinkLabel – Text = Registrar Novo Usuário

Disponha os controles conforme o leiaute da figura abaixo:

c_lpgnha

No código do formulário, vamos primeiro incluir uma declaração para referenciar o projeto Repositório.

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 está cadastrado e ativo na tabela Usuários.

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:

  • 1 GroupBox : Text = Registrar Usuario

  • 4 Label

  • 3 TextBox : txtNome, txtLogin, txtSenha

  • 1 Combobox : cboStatus  ( Ativo e Inativo)

  • 2 Button : btnIncluir e btnSair

  • 1 ErrorProvider

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

c_lpgnhb

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

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étodoValidarLogin() 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 Usuário 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:

c_lpgnhc

Executando o projeto, teremos:

c_lpgnhd

c_lpgnhe

Você pode incluir outros campos no login como e-mail (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