Runtime
Como configurar o SQL de uma LOV e/ou autocomplete de um campo de uma tela?
RT.FAQ-873
Para customizar o SQL de uma Lista de Valores e/ou AUTOCOMPLETE, basta criar uma propriedade LOOKUP_SQL para o item da interface. Esta propriedade segue herança por domínio, ou seja, é possível informa-la no atributo da entidade. Caso o item da interface tenha uma LOV explícita, então a propriedade também é verificada nesta interface. Neste caso, a propriedade teria que ficar registrada diretamente abaixo do bloco que define a LOV.
Por padrão, o SQL é montado com base nas entidades do modelo. Com esta preferência, o desenvolvedor poderá definir o SQL livremente. O SQL deverá resultar 4 colunas que devem ter os seguintes nomes:
- ID (opcional)
- VALOR (valor que será colocado no campo da LOV)
- DESCRICAO (texto que acrescentará uma informação a mais sobre o registro)
- PESQUISAR (texto onde o sistema irá pesquisar com o operador LIKE)
Deve-se tomar cuidado com colunas que podem conter valores nulos - Nestes casos, é importante usar uma função tipo COALESCE ou CASE WHEN.
Exemplo:
select id as id
, codificador as valor
, codificador || ' - ' || descricao as descricao
, codificador || coalesce(descricao, ' ') as pesquisar
from codificadores
where situacao in ( 'D' )
order by codificador
Assim como as expressões WHERE utilizadas para filtrar as lookups de um bloco, esta query pode utilizar as seguintes macros para parametrizar a consulta:
- Informar uma preferência (do usuário ou não). Ex: [ERP.ESTABELECIMENTO_PADRAO]
- Informar uma variável de sessão. Ex: [USER_ID]
Customização em tempo de execução
O autocomplete de um campo pode ser customizado em tempo de execução, simplesmente configurando a preferência com o mesmo nome global do utilizado no desenvolvimento. Exemplo:
PEDREPR02.CAD_PEDIDOS_REPRESENTACAO_02.FORNECEDOR_GRUPO.LOOKUP_SQL =
select pessoa as valor
, pessoa || ' - ' || nome_completo as descricao
, pessoa || nome_completo as pesquisar
from pessoas
Observações
- A propriedade para gerar o autocomplete nas interfaces é GENERATE_AUTOCOMPLETE (O valor default é "S", para gerar) e deve ser informada abaixo do BUILD do projeto.
- AUTOCOMPLETE_LENGTH
- Quando usamos uma LOOKUP_SQL, estamos sobrepondo o comportamento gerado automático na leitura das definições do bloco e, por consequencia, ignorando qualquer filtro/restrição informado no Telescope para a respectiva lookup.
- O SQL pode utilizar macros do tipo [NOME_GLOBAL_TELESCOPE] para variáveis de sessão a parametrizações (preferencias) do ambiente de produção.
- Caso o SQL utilizado não tenha uma clausula "ORDER BY", os valores sugeridos para o usuário são ordenados pela coluna descrição.
- O número de caractéres que deverão ser digitados para que o autocomplete comece a ser informado é definido através da propriedade AUTOCOMPLETE_LENGTH para o item ou atributo. Quando esta propriedade não estiver configurada, o sistema abrirá o autocomplete apenas após o segundo caractér.
Melhores práticas
Quando uma entidade é muito referenciada nas interfaces e possui muitas variações nas pesquisas devido a registros de diferentes categorias, sugere-se criar um conjunto de preferências mapeando os SQLs a serem utilizados nas diferentes situações e nas interfaces configurar a propriedade LOOKUP_SQL com o valor da preferência desejada entre colchetes.
Estas preferências deverão ser colocadas log abaixo do SISTEMA utilizando um nome lógico no singular precedido da silga "AC_".
Um exemplo disso é a entidade PESSOAS onde podemos ter um autocomplete diferenciado para pessoas (geral), vendedores, representantes, clientes, fornecedores, pessoas físicas, pessoas jurídicas, etc.:
- AC_PESSOA
- AC_VENDEDOR
- AC_PESSOA_JURIDICA
- etc.
Ver também