Browser Dinâmico - Valor Padrão de Filtro de Colunas

Os campos do tipo Lookup são usados para consumir os objetos do tipo “Browser Dinâmico”, e podem ser usado em dois modos diferentes: ComboBox e Popup.

Usando o modo ComboBox, o usuário tem uma praticidade maior, pois todas as opções ficam disponível logo de cara para serem selecionadas. Porém, este modo não é recomendado para grandes quantidades de registros, pois não existe paginação nem carregamento sob demanda.

O modo Popup, é mais completo. Pode exibir várias informações de cada registro, possui paginação e várias opções de filtro. Este modo é recomendado para grandes quantidade de registros. Para fazer a busca, é necessário clicar no ícone da Lupa e abrir uma nova Janela.

Em alguns casos, o desenvolvedor quer unir a praticidade do modo ComboBox com a eficiência do modo Popup. Neste tutorial, vou mostrar como fazer essa implementação no Formulário Dinâmico.

Para ver este exemplo em funcionamento, clique aqui.

Dados

Vamos utilizar uma versão para Postgres do banco de dados de exemplo Northwind do Sql Server.

Browser Dinâmico

Vamos criar um Browser para listar os cliente do banco Northwind.

Este é o Comando SQL que será usado na Fonte de Dados:

SELECT
   customers.customerid
   , customers.companyname
   , customers.contactname
   , customers.country
   , customers.city||COALESCE(' - '||customers.region, '') AS city
FROM customers
ORDER BY companyname

Agora, a parte importante: Vamos adicionar um parâmetro chamado “companyNameFilter”, que será usado como valor padrão no campo de filtro da coluna “companyname”.

Primeiro, adicione o parâmetro:

image

E depois, faça a referência do parâmetro na propriedade “Filtro Padrão” da coluna “companyname”:

image

Formulário Dinâmico

Agora, vamos criar um Formulário Dinâmico, com dois campos: Um Lookup para consumir o Browser Dinâmico, e um TextBox para fazer a pesquisa pelo nome da empresa.

Campos

lkpCustomer

Campo com Id do Cliente, do tipo Lookup em modo Popup.

Na popriedade “Alvo” selecione o Browser Dinâmico e no parâmetro “companyNameFilter” vincule o campo “txtCustomerName” (descrito logo abaixo)

txtCustomerName

Campo com o nome da empresa, do tipo TextBox. O usuário poderá digitar um texto neste campo para fazer a busca no Lookup. Abaixo mais explicações sobre como isso vai funcionar.

Procedimentos

lkpCustomer_Changed

Procedimento vinculado aos eventos PopupItemSelected e LostFocus do campo “lkpCustomer”. Será executado quando o valor do campo for modificado via digitação ou através da seleção de algum registro.

Adicione uma Record buscando o cliente através do Id (campo “lkpCustomer”):

SELECT customerid, companyname FROM customers
WHERE customerid = '{?INPUT lkpCustomer}'

Em seguida, preencha os campos “lkpCustomer” e “txtCompanyName” com o resultado obtido.

O procedimento fica parecido com a imagem a seguir:

OBS: O campo “lkpCustomer” já havia sido preenchido pela digitação do usuário, mas preenche-lo novamente faz com que ele seja limpo caso o código informado não seja encontrado.

txtCompanyName_LostFocus

Procedimento vinculado ao evento LostFocus do campo “txtCompanyName”.

Adicione uma Record buscando os clientes através de uma parte do nome (campo “txtCompanyName”).

SELECT customerid, companyname, COUNT(1) OVER() resultcount
FROM customers
WHERE companyname ILIKE CAST('%'||'{?INPUT txtCompanyName}'||'%' AS VARCHAR)

Neste comando, foi usada a clausula ILIKE, que no PostgreSQL é o mesmo que LIKE mas sem distinção entre letras maiúsculas e minúsculas. Também foi adicionada uma coluna com a quantidade de registros encontrados (coluna “resultcount”).

Em seguida, adicione uma instrução IF e teste se apenas um registro foi encontrado.
Se sim, preencha os campos “lkpCustomer” e “txtCompanyName” com os valores encontrados. Senão, abra a Janela do Browser Dinâmico usando a instrução “Abrir Lookup”.

O procedimento fica parecido com a imagem a seguir: