Há muita confusão entre qual método utilizar quando falamos em atualização de dados de formulário. É muito comum vermos desenvolvedores utilizando de, por exemplo, o seguinte código abaixo:

 formDataSource.refresh(); formDataSource.reread(); 
 formDataSource.reread(); formDataSource.research(); 
 formDataSource.research(); formDataSource.executeQuery(); 
 formDataSource.research(); formDataSource.reread(); 

O que, na verdade, pode vir a ser um erro ou redundante. Abaixo, uma explicação melhor em detalhes:

  1. refresh() – Atualiza os dados exibidos no controle de formulário que está armazenado no cache do formulário para aquele registro do datasource. Isso significa que, se por um acaso o registro foi alterado num outro processo, esse método não irá reler o registro no banco de dados, apenas atualizar os controles, ou seja, a atualização não será exibida;
  2. refreshEx() – Resedenha única e exclusivamente, as linhas da grid, dependendo do argumento especificado: –1, para redesenhar todas as linhas do grid ou –2, para redesenhar registros marcados/com o método displayOption(). Esse método não substitui os refresh(), uma vez que qualquer controle diferente do grid pode continuar com os registros desatualizados;
  3. reread() – Consulta o banco de dados e recupera o conteúdo do registro atual, passando-o para o cache do formulário. Ele não mostra as alterações no formulário até que o conteúdo do grid seja redesenhado (por exemplo, se você navegar para outra linha ou reabrir o formulário). Você não deve usá-lo para atualizar os dados do formulário, caso você tenha adicionado/removido um registro;
  4. research() – Vai executar novamente a query conectada ao formulário, no banco de dados, atualizando a lista com os novos/removidos registros e as linhas existentes. Ela mantém todos os filtros e classificações definidas pelo usuário. No AX 2009, o argumento pode ser true – mantém o cursor na posição atual do registro – ou false.
  5. executeQuery() – Executa novamente a query conectada ao formulário, porém somente deve ser utilizado quando você alterar os critérios de pesquisa dessa query, de maneira que queira alterar o resultado da consulta e isso possa vir influir no formulário;

Considerações importantes

  • Para atualizar os dados do formulário de maneira a exibir também o controle atualizado, como através de uma chamada deupdate() a partir do tableBuffer, utiliza, consecutivamente, dos métodos reread() e refresh();
  • A diferença básica entre researh() e executeQuery() é que o primeiro respeita os filtros especificados pelo usuário no formulário, diferente do segundo, que você manipula os critérios, excluindo qualquer outro que vir a existir.
  • formDataSource.query() é a query original do dataSource; formDataSource.queryRun().query() é query atual utilizada pelo usuário, na aplicação de filtros, classificações, etc. o método research() utiliza do segundo, enquanto o executeQuery(), do primeiro.

Espero que agora todos tenham compreendido a diferença básica e, sem dúvida, possa vir a utilizar corretamente, dos métodos relacionados ao dataSource do formulário.

Fonte: http://kashperuk.blogspot.com/

Abraços, até a próxima.

Bookmark and Share

--