StrataFrame Forum

BrowserDialog search, not filter. BrowserDialog pesquisar, não filtrar.

http://forum.strataframe.net/Topic20405.aspx

By Malcon M. Mikami - 10/29/2008

As I can do to only select (seektoprimarykey or seek(where)) in a browserdialog?

Has as I know what the filter used? Or which enrollment selected for after search with a seek?

Como posso fazer para apenas selecionar (seektoprimarykey ou seek(where)) em um browserdialog?

Tem como eu saber qual o filtro utilizado? Ou qual registro selecionado para depois pesquisar com um seek?

By Edhy Rijo - 10/29/2008

Why will you need that information?

What are you trying to accomplish?

By Malcon M. Mikami - 10/29/2008

Forgive my English, I will reformulate the question.

Today to find a given, we used the BrowserDialog on BO.

The problem is that the BrowserDialog makes a FILL in BO, what one obliges the user to make a new search to return to all the data of BO.

As I could make to only the BrowserDialog make a search (Seek) and not a filter (Fill) in the data?

Desculpe o meu inglês, vou reformular a pergunta.
Hoje para pesquisar um determinado dado, utilizamos o BrowserDialog sobre o BO.
O problema é que o BrowserDialog faz um FILL no BO, oque obriga ao usuário a fazer uma nova pesquisa para retornar a todos os dados do BO.

Como eu poderia fazer para apenas o BrowserDialog fazer uma pesquisa (Seek) e não um filtro (Fill) nos dados?

By Edhy Rijo - 10/29/2008

Hi,

I am sorry, still I don't quite understand your question or problem.  It looks like it has something to do with the records found in the Browser Dialog which are copied to your form's BO.  There is a property of the BD ReturnSelectedRecordOnly which control how records are copied back to the form's BO.

I am sure Ivan will get here at any time and would be able to figure out what your problem is to help you out.  I also read/speak Spanish but have not luck with Portuguese, I may understand a bit but in this case not enough to help you.

By Ivan George Borges - 10/29/2008

Hiya, sorry for not showing up before, I am out of the office today.

Well, I think you want to be able to keep the last BO search result, and when the user go back to the Browse Dialog the previous result show up without having the need to enter the search criteria, is that so?

By Malcon M. Mikami - 10/29/2008

Ivan. Vamos la em bom e velho portugues... rs

Tabela Grupo

[codigo] [descricao]

1 - teste

2 -teste 2

3- outro

4 - outro 2

Estou usando o mesmo BO no form e no browserDialog.

Quando faço um browsedialog  e filtro pela palavra teste como na imagem o meu BO do formulario passa a ter apenas 2 registros (teste e teste2). Tenho que abrir novamente o browserdialog, fazer uma pesquisa sem nada para que todos os registros do BO volte.

Não tem como ele somente fazer a pesquisa sem fazer o filtro?

http://interno.sistemairis.com.br/br/filtro.jpg 

By Ivan George Borges - 10/29/2008

Oi Ronald.

O BrowseDialog na verdade não filtra seu BO em nenhum momento. Quanto você faz uma busca e preenche os campos de procura, o BD vai ao seu banco de dados e traz de volta os registros que correspondem aos critérios passados, como no seu exemplo contendo a palavra "teste" no se campo IGR_DESCRICAO. Quando você clicka OK, o BD popula o Business Object que você setou como BusinessObjectToPopulate, e neste instante tudo o que o seu BO possui são os registros que satisfizeram seus critérios de busca, nenhum outro foi trazido do banco de dados, logo não existe um filtro para que seja mostrado para você só os registros com a palavra "teste".

Por isto, se você quiser popular seu BO com todos os registros da tabela, ou com algum outro critério qualquer, você precisará ir de volta ao BrowseDialog e oferecer os critérios que deseja, como no caso do seu exemplo, fazer uma busca sem nenhum critério, o que trará todos os registros do banco de dados, dentro do limite da propriedade do BO MaximumReturnedRecords.

By Malcon M. Mikami - 10/29/2008

Perfeito Ivan, entendi.

Como eu poderia fazer para que o BD nao fizesse nova busca, somete me retorne o resultado selecionado da pesquisa para que o usuario apenas localize o dado, mas que continue navegando em todos os registros?

Oque voce sugere?

By Ivan George Borges - 10/29/2008

Bom Malcon, o BD não te serveria para isto, se eu entendi direito o que você quer fazer. Pelo jeito, você quer fazer uma busca dentro dos registros que já foram buscados antes, é isto?

Provavelmente, você teria que desenvolver sua própria ferramente de busca. Com o BD como é hoje, o seu usuário teria que entrar com a condição para ter os registros com os quais ele precisa trabalhar a cada vez que fosse ao BD. Por curiosidade, por que você traria mais registros do que o necessário para popular o seu BO?

By Malcon M. Mikami - 10/30/2008

Não Ivan... não é uma nova busca.

Vamos la.. quando uso o BD ele faço um filtro, ele vai ate meu banco de dados e popula novamemente me BO. Para usar o BD como um filtro nos dados isso esta 100%.

Eu gostaria que o usuario apenas reposiciona-se o cursor no registro selecionado pelo BD. Entendeu??

Ex: meu bo tem 100 registros, quando o usuario ir ao BD, informar o criterio de pesquisa,  eu queria apenas que ele reposiciona-se no registro selecionado, e nao repopula-se o BO com os novos registros que atendem a esse criterio.

Se ele digita-se a letra "M" no nome eu apenas faria um seek(where nome like "M%"); e posicionaria no primeiro registro que atende a esse paramentro. Ele continua a navegar em todos os registros.

Acho que o BD nao faz isso, mas se ele tiver um parametro ou metodo com os paramentros informados pelo usuario na pesquisa dele, no retorno do BD eu implementaria o metodo atraves do Seek(where) no meu formulario, entendeu?

Como voce indicaria fazer?

By Ivan George Borges - 10/30/2008

Então, acho que eu entendi direito sim. O que parece estar gerando confusão é o conceito de filtro. Você quer que o usuário vá ao BrowseDialog e que ele já tenha um BO populado e então faça esta busca (posicionar no registro que satisfaz a condição dada) no BO já populado.

Aí que está. O BD sempre irá ao banco de dados buscar os registros que satisfaçam seus critérios pedidos. Não há filtro.

Acho que o que poderia te ajudar é utilizar um ListView no seu form que seja populado com o conteúdo do seu BO. Quando você popular o seu BO, por exemplo, através do resultado de um BrowseDialog, você copia o conteúdo deste seu BO para o seu ListView. Desta maneira, seu usuário poderia navegar entre os registros do ListView e parar naquele que ele desejar. Claro, se houver muitos registros no seu BO, esta pode não ser a melhor solução, e você teria que criar algum form de busca utilizando o seu BO já populado. o BrowseDialog não foi projetado para isto.

By Malcon M. Mikami - 10/30/2008

OK Ivan, obrigado pela paciencia.

Vou alterar o BD pra prover esse servico.

É possivel em uma proxima versao a inclusao desta sugestao?

Att.

By Ivan George Borges - 10/30/2008

Eu vou passar o seu pedido.
By Ivan George Borges - 10/30/2008

Malcon, por que você não cria um form com um textbox para usar de search field e até um listview abaixo dele com todos os registros atualmente populados no BO? Você poderia usar o textbox para uma procura incremental até, o usuário iria digitando e você iria fazendo um SEEK no BO. Quando ele desse um OK, seu BO estaria posicionado no registro escolhido.

Tentar mexer no BrowseDialog pode se tornar uma grande dor de cabeça para você.

By Malcon M. Mikami - 10/31/2008

Boa ideia Ivan, Vou criar o formulario de de pesquisa.
Outra duvida. Tenho um BO com 14 registros (boEstados.Count.ToString()), apos fazer o BD fiquei monitorando o banco para ver o criterio de pesquisa no SQL. Como voce havia me falado, ele nao filtra e sim popula novamente meu BO, o estranho que nao ha a chamado no SQL Profile e apos o BD que me retornou apenas 6 registro, se faço um count novamente ele continua a mostrar 14 registro, mas somente navego em 6.

Oque pode ser?

By Malcon M. Mikami - 10/31/2008

Ivan desconsidera a parte onde falo sobre o SQL, entendi oque o SF faz, quando ele cria o list ele ja tem os dados para onde ele ira clonar.

Mas nao entendi pq ele continua retornando 14 linhas. Ja que ele sobrescreveu os dados antigos..

By Ivan George Borges - 10/31/2008

Deve haver algo mais inserido neste processo na sua lógica. Se o BrowseDialog retornar 6 registros, o seu BusinessObjectToPopulate vai ter 6 registro quando voltar.