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:
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:
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:
Executando o projeto, teremos:
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