[resolvido] Função getVisible

Moderador: Avelino Sampaio

ney santos
Mensagens: 15
Registrado em: 10 Jun 2015, 19:31

[resolvido] Função getVisible

Mensagempor ney santos » 04 Jan 2018, 12:02

Bom dia !
Avelino, lendo o artigo que vem no monta ribons onde voce fala sobre Os Gets tem um exemplo dizendo o seguinte:

Código:
Public Sub fncGetVisible(control As IRibbonControl, ByRef visible)
Select Case control.id
Case "btClientes" 'Trata o botão clientes
if usuário = "joão" then
visible = false
else
visible = true
end if
End Select
End Sub


bom, eu tentei adaptar esse codigo para um botao onde cadastro Usuarios"BtUsuario"
No meu caso quando e feito o login tenho uma Tabela chamada Usuario onde um dos campos se chama "NIVEL"
Tentei adaptar paar que o nivel do Usuario fosse buscado e se ele for menor que "5" o botão fique invisivel, mas nao consigo, na verdade num detrminado momento a o botao ficou invisivel em qualquer Nivel de Usuario, ai fiz outra alteração e a ribom simplesmente deixou de ser carregada.
veja o codigo:

Código:
Public Sub fncGetVisible(control As IRibbonControl, ByRef visible)
Dim MeuUsuario As Database
Dim Usuario As Recordset
Set MeuUsuario = DBEngine.Workspaces(0).Databases(0)
Set Usuario = MeuUsuario.OpenRecordset("Usuario", DB_OPEN_TABLE)

Usuario.index = "IndiceNumero"
Usuario.Seek "=", 1
Select Case control.id
Case "btUsuario" 'Trata o botão Usuários
if Usuario("NIVEL") <5 then
visible = false
else
visible = true
end if
End Select


A Tabela Usuario não é vinculada, ela fica junto com o front end
Pode me ajudar?

Disable adblock

Precisamos do seu apoio. Faca uma doacao para o site atraves do Paypal.


Avatar do usuário
Avelino Sampaio
Mensagens: 2214
Registrado em: 04 Jun 2015, 18:27
Contato:

Re: Função get visible

Mensagempor Avelino Sampaio » 04 Jan 2018, 13:24

Ney

lembrando que a função fncGetVisible é disparada pelo comando INVALIDATE. Lá no formulário de login, vc deve dispara o comando abaixo, logo após o usuário ser logado:

Código:
objRibbon.Invalidate


o botão da ribbon deve conter o atributo getVisible. Exemplo:

Código:
<button
id = "btUsuario"
label = "Usuários"
getVisible = "fncGetVisible"
onAction = "fncOnAction"
/>


Quando fizer o login pelo formulário de login, passe as identificações do usuário logado para variáveis globais. Como opção, pode utilizar a coleção tempVars para armazenar os dados globalmente. No evento após Atualizar, coloque algo assim:

Código:
tempvars!idUsuario = me!idusuario 'passando a identificação exclusiva do usuário para a variável
tempVars!NomeUsuario = me!Usuario 'passando o nome do usuário para a variável
tempVars!Nível = me!nivel 'passando o nível do usuário para a variável


Com os dados armazenados na tempVars vc agora pode usar na função fncGetVisible.

Código:
Public Sub fncGetVisible(control As IRibbonControl, ByRef visible)
Select Case control.id
Case "btUsuario"
visible = tempVars!nivel < 5
End Select
End sub


Nota: Ative a interface de erros do Access para detectar erros na ribbon, Veja como, na questão de número 9 do frutos do suporte, no link abaixo:

http://www.usandoaccess.com.br/tutoriais/criar-ribbons-access-frutos-do-suporte.asp?id=1#inicio

Aguardamos
==================================================
Clique no link abaixo e veja um ótimo kit de ensino que tenho para você.
http://www.usandoaccess.com.br
==================================================

ney santos
Mensagens: 15
Registrado em: 10 Jun 2015, 19:31

Re: Função get visible

Mensagempor ney santos » 04 Jan 2018, 14:16

onde eu coloco esse codigo da variavel tempvars?

ney santos
Mensagens: 15
Registrado em: 10 Jun 2015, 19:31

Re: Função get visible

Mensagempor ney santos » 04 Jan 2018, 14:33

Prezado avelino: na ribom está da seguinte forma:

Código:
<!-- *** GUIA PRINCIPAL ***-->
<tab id = "guiaPrincipal" label = "Principal" getVisible = "fncGetVisible" >


No botão:

Código:
<button
id = "btUsuario"
image = "CadUser.ico"
label = "Usuários"
getVisible = "fncGetVisible"
onAction ="=fncAbrirObjeto('Funcionario',1)"
/>


No evento após atulizar do campo selcionar o Usuario:

Código:
Private Sub Selecionar_Usuario_AfterUpdate()
On Error GoTo Err_Selecionar_Usuario
TempVars!idusuario = Me![Selecionar Usuario].Column(1) 'passando a identificação exclusiva do usuário para a variável
TempVars!NomeUsuario = Me![Selecionar Usuario].Column(0) 'passando o nome do usuário para a variável
TempVars!Nível = Me![Selecionar Usuario].Column(3) 'passando o nível do usuário para a variável

[CpSenha].SetFocus
Exit Sub

Exit_Selecionar_Usuario:
Exit Sub

Err_Selecionar_Usuario:
MsgBox Error$
Resume Exit_Selecionar_Usuario

End Sub


no form de login ao clicar no botao "OK"

Código:
Private Sub Ok_Click()
'--------------------------------------------------------------------------------------------
If IsNull([Selecionar Usuario]) Then 'Verifica Se foi
MsgBox "Selecione um Usuario !", 64, "Identificação" 'Selecionado um funcionario
[Selecionar Usuario].SetFocus
Exit Sub
End If

Dim Meubd As Database ' Declara o banco de dados.
Dim Usuario As Recordset ' Declara a tabela.
Set Meubd = DBEngine.Workspaces(0).Databases(0) ' Cria uma referência ao ' banco de dados.
Set Usuario = Meubd.OpenRecordset("Usuario") ' Cria uma referência à tabela.

Usuario.index = "IndiceNumero"
Usuario.Seek "=", 1

If [CpContador] < 4 Then
If ([CpSenha]) = [Selecionar Usuario].Column(2) Then
If Not Usuario.NoMatch Then
Usuario.Edit
Usuario("CdUsuario") = [Selecionar Usuario].Column(1)
Usuario("NmUsuario") = [Selecionar Usuario].Column(0)
Usuario("NIVEL") = [Selecionar Usuario].Column(3)
Usuario.Update
End If
Flag = True
Usuario.Close
DoCmd.Close
DoCmd.OpenForm "Menu Principal"
objRibbon.Invalidate
Else
MsgBox "Senha inválida", 48, "Identificação"
Forms![Abertura]![CpContador] = Forms![Abertura]![CpContador] + 1
[CpSenha] = Null
[CpSenha].SetFocus
Usuario.Close
Exit Sub
End If

__________________________________________-----------------------------------------------------------------
Resultado a Ribon não carrega..

Disable adblock

Precisamos do seu apoio. Faca uma doacao para o site atraves do Paypal.


ney santos
Mensagens: 15
Registrado em: 10 Jun 2015, 19:31

Re: Função get visible

Mensagempor ney santos » 04 Jan 2018, 14:35

esqueci a função:

Código:
Public Sub fncGetVisible(control As IRibbonControl, ByRef visible)
Select Case control.Id
Case "btUsuario"
visible = TempVars!nivel < 6
End Select
End Sub

Avatar do usuário
Avelino Sampaio
Mensagens: 2214
Registrado em: 04 Jun 2015, 18:27
Contato:

Re: Função get visible

Mensagempor Avelino Sampaio » 04 Jan 2018, 15:34

ney,

considero que tempVars deve ficar no botão OK. Tire do evento Após atualizar.

Código:
Private Sub Ok_Click()
'--------------------------------------------------------------------------------------------
If IsNull([Selecionar Usuario]) Then 'Verifica Se foi
MsgBox "Selecione um Usuario !", 64, "Identificação" 'Selecionado um funcionario
[Selecionar Usuario].SetFocus
Exit Sub
End If

Dim Meubd As Database ' Declara o banco de dados.
Dim Usuario As Recordset ' Declara a tabela.
Set Meubd = DBEngine.Workspaces(0).Databases(0) ' Cria uma referência ao ' banco de dados.
Set Usuario = Meubd.OpenRecordset("Usuario") ' Cria uma referência à tabela.

Usuario.index = "IndiceNumero"
Usuario.Seek "=", 1

If [CpContador] < 4 Then
If ([CpSenha]) = [Selecionar Usuario].Column(2) Then
If Not Usuario.NoMatch Then
Usuario.Edit
Usuario("CdUsuario") = [Selecionar Usuario].Column(1)
Usuario("NmUsuario") = [Selecionar Usuario].Column(0)
Usuario("NIVEL") = [Selecionar Usuario].Column(3)
Usuario.Update
End If
Flag = True
Usuario.Close
TempVars!idusuario = Me![Selecionar Usuario].Column(1)
TempVars!NomeUsuario = Me![Selecionar Usuario].Column(0)
TempVars!Nível = Me![Selecionar Usuario].Column(3)

DoCmd.Close
DoCmd.OpenForm "Menu Principal"
objRibbon.Invalidate
Else
MsgBox "Senha inválida", 48, "Identificação"
Forms![Abertura]![CpContador] = Forms![Abertura]![CpContador] + 1
[CpSenha] = Null
[CpSenha].SetFocus
Usuario.Close
Exit Sub
End If


Acrescente a parte em vermelho, caso contrário toda guia da sua ribbon estará oculta:

Código:
Public Sub fncGetVisible(control As IRibbonControl, ByRef visible)
Select Case control.Id
Case "btUsuario"
visible = TempVars!nivel < 6
Case "guiaPrincipal"
visible = true

End Select
End Sub


Aguardamos
==================================================
Clique no link abaixo e veja um ótimo kit de ensino que tenho para você.
http://www.usandoaccess.com.br
==================================================

ney santos
Mensagens: 15
Registrado em: 10 Jun 2015, 19:31

Re: Função get visible

Mensagempor ney santos » 04 Jan 2018, 16:01

prezado avelino, a ribbon voltou a ser carregada porem agra esta apresentando um erro
[O retorno de chamada da fncgetvisible emitiu um valor que não pode ser convertido no tipo esperado]
naosei como colocar uma imagem aqui no topico se não eu postaria pra vc ver.

ney santos
Mensagens: 15
Registrado em: 10 Jun 2015, 19:31

Re: Função get visible

Mensagempor ney santos » 04 Jan 2018, 16:09

erro.png
Você deve estar registrado e autenticado para ter acesso ao arquivo anexo.

ney santos
Mensagens: 15
Registrado em: 10 Jun 2015, 19:31

Re: Função get visible

Mensagempor ney santos » 04 Jan 2018, 16:24

o botão em questão fica invisivel independente do novel do usuario

Avatar do usuário
Avelino Sampaio
Mensagens: 2214
Registrado em: 04 Jun 2015, 18:27
Contato:

Re: Função get visible

Mensagempor Avelino Sampaio » 04 Jan 2018, 17:48

Ney,

acrescente a função NZ()

Código:
Public Sub fncGetVisible(control As IRibbonControl, ByRef visible)
Select Case control.Id
Case "btUsuario"
visible = nz(TempVars!nivel,0) < 6
Case "guiaPrincipal"
visible = true
End Select
End Sub



caso não funcione, crie um BD e nele coloque a ribbon, a tabela usuários e o formulário de login. Anexe aqui

Aguardamos
==================================================
Clique no link abaixo e veja um ótimo kit de ensino que tenho para você.
http://www.usandoaccess.com.br
==================================================

ney santos
Mensagens: 15
Registrado em: 10 Jun 2015, 19:31

Re: Função get visible

Mensagempor ney santos » 04 Jan 2018, 19:32

Avelino estou enviando o exemplo como vc pediu pois o botao esta visivel independente do usuario logado:
exemplo :
Usuario Ney Santos - NIVEl 6 --> Botão visivel .. OK (senha 967201)
Usuario Reginaldo Nivel 4 ----> botao deveria ficar invisivel (senha 123456)
em anexo segue bd conforme voce solicitou
Você deve estar registrado e autenticado para ter acesso ao arquivo anexo.

Avatar do usuário
Avelino Sampaio
Mensagens: 2214
Registrado em: 04 Jun 2015, 18:27
Contato:

Re: Função get visible

Mensagempor Avelino Sampaio » 04 Jan 2018, 20:07

Ney

acrescente a função nz() na parte indicada em vermelho (no botão OK)

Código:
...
If Nz([CpContador]) < 4 Then
If ([CpSenha]) = [Selecionar Usuario].Column(2) Then
If Not Usuario.NoMatch Then
Usuario.Edit
Usuario("CdUsuario") = [Selecionar Usuario].Column(1)
Usuario("NmUsuario") = [Selecionar Usuario].Column(0)
Usuario("NIVEL") = [Selecionar Usuario].Column(3)
Usuario.Update
End If
...


A variável "Nível" estava sem o acento na função abaixo e também acrescentei o NOT para atender as regras de quem deve visualizar o botão:

Código:
Public Sub fncGetVisible(control As IRibbonControl, ByRef visible)
Select Case control.Id
Case "btUsuario"
visible = Not Nz(TempVars!NíVEL, 0) < 6
Case "guiaPrincipal"
visible = True
End Select
End Sub


Com estas modificações, funciounou aqui comigo.

Aguardamos
==================================================
Clique no link abaixo e veja um ótimo kit de ensino que tenho para você.
http://www.usandoaccess.com.br
==================================================

ney santos
Mensagens: 15
Registrado em: 10 Jun 2015, 19:31

Re: Função get visible

Mensagempor ney santos » 04 Jan 2018, 20:40

Prezado Avelino , mais uam vez voce matou a cobra e mostrou a cobra morta ( kkk)
Funcinou perfeitamente.
Não tinha me atentado que a variável estava escrita de forma errada.
como faço pra dar o tópico como rsolvido?

Disable adblock

Precisamos do seu apoio. Faca uma doacao para o site atraves do Paypal.



Voltar para “Ribbons”

Quem está online

Usuários neste fórum: Nenhum usuário registrado e 1 visitante