Telescope (core)
Navegação de contexto
ADS.FAQ-18732
A navegação de contexto é o suporte que o sistema dá para o usuário navegar para outros elementos relacionados ao elemento que ele está visualizando no momento. Por exemplo: Digamos que o usuário está visualizando os dados de um pedido contendo diversas referências para outros elementos do sistema, tais como cliente, vendedor, produtos, tipo de pedido, etc. O objetivo da navegação de contexto é agregar um suporte para o usuário navegar para as telas de consulta do respectivo cliente, vendedor, produtos, etc.
O telescope oferece suporte para a navegação de contexto através da definição de uma operação (tela) que deverá ser aberta através de um link que é acrescentado aos campos que representam uma outra entidade diferente da que ele está consultando
A definição desta tela pode ser realizada em 3 locais:
- Nas entidades do sistema.
- Nos bindings dos blocos de interface.
- Em regras de negócio.
A operação definida como navegação de contexto de um elemento deve ser sempre uma funcionalidade de um bloco, e apesar disso não ser uma regra obrigatória, a funcionalidade deveria ser do tipo VIEW de um bloco cuja entidade base é igual a entidade em questão.
Quando definida, a navegação de contexto é apresentada no primeiro campo que faz referência para a respectiva entidade, sendo que não existe nenhuma exigência deste campo estar relacionado a uma chave única da mesma.
Existem casos onde a tela a ser aberta pela navegação de contexto precisa ser diferente dependendo do registro. Por exemplo: Um título pode set a pagar ou a receber, um pedido pode ser orçamento, venda, compra, produção, etc. Nestes casos, o mais apropriado é ter uma tela genérica que verifica o registro informado e redireciona para a tela correta.
Entidades
O cadastro da entidades no Telescope existe um campo chamado "Navegação de contexto". Para definir a navegação de contexto padrão para os elementos desta entidade, basta informar a tela que se deseja utilizar.
Exemplo:
- Para a entidade PESSOAS, pode-se definir a navegação de contexto como sendo a tela PESSOAS.CAD_PESSOAS.VIEW.
Blocos de interface
Quando os blocos são gerados, as navegações de contexto definidas nas entidade são automaticamente consideradas, ou seja, qualquer apresentação de um elemento diferente do elemento base que possua uma navegação de contexto irá incluir o respectivo link que permitirá ao usuário navegar para a respectiva tela.
Caso o desenvolvedor desejar utilizar uma navegação de contexto diferente da navegação padrão da entidade, ele poderá definir uma diferente no bloco.
Isso pode ser feito acessando os bindings do bloco e informando um valor no campo "Navegação de contexto". A tela que for informada neste campo será utilizada no lugar da tela definida na respectiva entidade. Deixar este campo em branco, significa manter a navegação de contexto definida na respectiva entidade.
Para o caso especial em que desenvolvedor deseja que um bloco seja gerado SEM a navegação de contexto para uma entidade que já tem uma definida, ele deve informar a palavra reservada "NONE".
Regras de negócio
A navegação de contexto também pode ser criada através de programação em regras de negócio. Isso pode ser útil para casos como:
- A tela para onde navegar é diferente de acordo com os dados em uso. Por exemplo, um título financeiro poderia ter que navegar para uma tela do contas a pagar ou uma tela do contas a receber dependendo do seu tipo.
- O elemento referenciado é apresentado na tela através de um item UNBOUND (do tipo custom ou expression).
A programação dependerá da arquitetura utilizada:
Caso desejar montar um link de contexto de forma manual, pode-se descobrir o serviço a ser utilizado como link de contexto nos bindings de uma interface que possua o link de contexto desejado. Neste caso será necessário:
- Instanciar uma interface que tenha uma lookup para a entidade desejada
- Buscar a lista de bindings desta interface com o método
List<EntityBinding> getEntityBindings()
- Achar qual o binding que faz referência à entidade desejada:
bindings.get(i).getEntityName().equals("...")
- Pegar o serviço deste binding
bindings.get(i).getViewService();
Regras de acesso
A navegação de contexto considera as regras de acesso definidas para o usuário. Isso significa que, no caso do usuário não ter o direito de acesso para a tela definida, então a referencia do elemento é apresentada sem o respectivo link.
Customizações globais
As seguintes preferencias definem o comportamento genérico para a navegação de contexto:
- RT.UI.CONTEXT_NAVIGATION_TARGET - Define se os links deverão ser abertos na mesma janela do browser (padrão) ou em uma nova aba. ATENÇÃO: NÃO CONFIGURAR PARA ABRIR EM UMA NOVA ABA POR PADRÃO - O USO EXAGERADO DE ABAS CRIA PROBLEMAS COM O CONSUMO DE MEMÓRIA NA ESTAÇÃO DO CLIENTE !!!!
ORIENTE OS USUÁRIO A UTILIZAR CTRL+CLICK OU CLICAR COM A RODA DO MOUSE.
Customizações
Apesar das definições de navegação de contexto serem normalmente definidas em tempo de desenvolvimento, um ambiente em particular pode ser customizado através de preferencias. Tanto a tela para navegação de contexto genérica da entidade como a definida nas lookups dos blocos podem ser customizadas através de preferencias tipo:
- SISTEMA.ENTIDADE.CONTEXT_NAVIGATION
- SISTEMA.BLOCO.ALIAS.CONTEXT_NAVIGATION
Estas customizações permitem apenas substituir as telas de elementos que já possuem uma tela definida para tal. Não existe a possibilidade de acrescentar uma navegação de contexto em um elemento que não foi gerado com uma.
Para desabilitar a navegação de contexto, basta incluir um espaço.
"Cheat" para selecionar quem pode ou não acessar pelo link
Quando deseja-se que não seja apresentado o link de contexto para algumas pessoas (mesmo que elas tenham acesso à tela do link), deve-se criar uma operação "fake" substituindo uma das letras pelo caracter %NN equivalente.
Por exemplo:
- Digamos que o link seja para PESSOAS.CAD_PESSOAS.VIEW
- Criar uma operação PESSOAS.CAD_PESSOAS.%56IEW (substituindo o "V" por "%56"), com política "Restrito".
- Alterar a navegação de contexto criando uma preferencia PESSOA.PESSOAS.CONTEXT_NAVIGATION=PESSOAS.CAD_PESSOAS.%56IEW
- Incluir esta operação no(s) perfis de acesso desejado
Ver também: