Telescope (core)
T2 - Como customizar um autocomplete em tempo de execução?
ADS.FAQ-12675
Por padrão, a consulta que é utilizada no autocomplete é preparada na carga do serviço. Isso permite fazer com que o autocomplete seja dependente, por exemplo, de variáveis de sessão mas não permite que o autocomplete tenha um comportamento diferente dependendo de outros parâmetros que estejam no formulário que está sendo preenchido.
Se for necessário alterar a lista de valores sugeridos para o autocomplete com base em outras informações, tais como, outros campos do formulário ou parâmetros de contexto, será necessário programar um código que especifique o objeto de query a ser utilizado.
Isso pode ser feito incluindo um método chamado pelo evento PRE_AUTO_COMPLETE no formulário desejado.
Para recuperar os valores de contexto, este método deverá obrigatoriamente iniciar com:
getCurrentFeature().readFormParameters(getForm());
// ... implementar lógica qualquer ...
aCampo.setListOfValuesQuery( ... );
ATENÇÂO: O evento é programado por função, ou seja, se o tratamento é o mesmo nas funções de INSERT e UPDATE, ambas deverão ter a chamada do evento.
Exemplo:
No exemplo abaixo, um autocomplete de produtos inclui ou não produtos inativos conforme configuração do tipo de pedido.
getCurrentFeature().readFormParameters(getForm());
EntPedidos p = new EntPedidos(ctx);
EntTiposPedidos t = p.joinTipoPedido();
p.findById(pPedidoId);
String where;
if (t.valueOfAceitaProdutosInativos().equals("N"))
where = " where PROD.ATIVO='S'";
} else {
where = "";
}
aProduto.setListOfValuesQuery(createQuery()
.select("*")
.from("(select PROD.PRODUTO as valor"
+ " , PROD.PRODUTO || ' - ' || PROD.DESCRICAO as descricao"
+ " , PROD.PRODUTO || '-' || PROD.DESCRICAO as pesquisar"
+ " from PRODUTOS PROD" + where + ")", "q"));
}
Ver também: