FW
AutoComplete - TEntry - Performance
Fechado
Pessoal, preciso de mais uma ajuda, ou dica.
Tenho um formulário de solicitação de viagens, e preciso selecionar o Aeroporto de origem e destino.
Fiz em uma primeira versão utilizando o TDBSeekButton, mas não atende muito minha necessidade, pois exibe apenas 1 coluna adicional com a informação, eu precisaria adicionar mais campos.
Então resolvi utilizar o Auto Complete, fiz uma coluna no banco concatenada com o "IATA - Aeroporto - Cidade - País".
Funciona, porém com uma péssima performance, leva 3~5 segundos pra carregar o formulário.
Existe uma maneira mais eficiente para este caso?? Algo que eu possa melhorar?
A consulta retorna 8 mil registros.
Função:
Obrigado.
Tenho um formulário de solicitação de viagens, e preciso selecionar o Aeroporto de origem e destino.
Fiz em uma primeira versão utilizando o TDBSeekButton, mas não atende muito minha necessidade, pois exibe apenas 1 coluna adicional com a informação, eu precisaria adicionar mais campos.
Então resolvi utilizar o Auto Complete, fiz uma coluna no banco concatenada com o "IATA - Aeroporto - Cidade - País".
Funciona, porém com uma péssima performance, leva 3~5 segundos pra carregar o formulário.
Existe uma maneira mais eficiente para este caso?? Algo que eu possa melhorar?
A consulta retorna 8 mil registros.
- <?php
- $autoOrigem->setCompletion(array_values($this->onCargaAuto()));
- $autoDestino->setCompletion(array_values($this->onCargaAuto()));
- ?>
Função:
- <?php
- public static function onCargaAuto()
- {
- try
- {
- // open database transaction
- TTransaction::open('gestao_viagens');
-
- // items repository
- $repository = new TRepository('Aeroportos');
- // load all objects
- $collection = $repository->load(new TCriteria);
- // add the combo items
- $items = array();
- foreach ($collection as $object)
- {
- $items[$object->airport_id] = $object->autocomplete;
- }
-
- TTransaction::close();
-
- return $items;
- }
- catch (Exception $e)
- {
- new TMessage('error', '<b>Error:</b> ' . $e->getMessage());
- }
- }
- ?>
Obrigado.
Fernando, o TDBSeekButton só permite uma coluna, mas você pode utilizar o TSeekButton e customizar com as colunas que quiser.
Outra opção seria usar o TDBEntry que busca as informações no banco de dados de acordo com o que a pessoa for digitando, ou seja, não preenche os dados na criação do formulário, e sim de acordo com o que o usuário digitar.
E outra coisa, você está chamando 2 vezes a função onCargaAuto. Chame 1 vez só e coloque o retorno em uma variável, isso já deve melhorar o desempenho.
Nataniel.
Chamei uma vez apenas o onCargaAuto, reduziu o tempo.
Tentei utilizar o TDBEntry e está dando um erro de javascript.
Nataniel,
Acabei de ver outro detalhe, quando entro no detalhe do erro, VM983:1, ele aparece o HTML de uma modal, com span dizendo: Permissão negada.
Será que preciso liberar alguma coisa?
Nataniel.
Resolvido, habilitei na engine.php o AdiantiAutocompleteService.
Resolveu o problema, excelente performance.
Muito obrigado novamente pela ajuda.