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: