Para realizar filtros em Fontes de dados provenientes de Web Services, é necessário que o serviço suporte essa funcionalidade de forma nativa. No entanto, mesmo que o Web Service não ofereça filtros de forma nativa, é possível implementá-los de maneira manual, usando blocos de programação. A seguir, apresentamos um exemplo prático, utilizando a API do IBGE (Instituto Brasileiro de Geografia e Estatística), onde selecionamos dinamicamente o município correspondente a cada estado em uma caixa de seleção.
Exemplo de uso de filtros
Neste exemplo, utilizaremos duas Fontes de dados do tipo Web Services para representar estados e municípios, com a implementação de quatro funções voltadas para o gerenciamento dessas informações. Com o objetivo de otimizar a performance, foi adotado um sistema de cache nas funções, garantindo respostas mais rápidas ao armazenar os resultados de consultas anteriores.
Para ambos os blocos, Estados e Municípios, criamos as funções "ObterComCache", responsáveis por buscar e armazenar os dados em cache, acelerando futuras requisições, e a função "Listar", utilizada para exibir as listas de estados ou municípios, possibilitando a aplicação de filtros sobre os dados armazenados.
A seguir, explicaremos como configurar as funções relacionadas aos Estados e Municípios, bem como as respectivas Fontes de dados.
Primeiramente, verifica se a lista de estados já está armazenada na sessão com a chave "LISTA_ESTADOS". Se a lista for encontrada, ela é imediatamente retornada. Caso contrário, a função realiza uma requisição GET para a API do IBGE e converte a resposta JSON em uma lista. Para cada item dessa lista, é criado um mapa contendo o "id" e o "nome" do estado, que então é armazenado no cache. A lista final de estados é, por fim, salva na sessão com a chave "LISTA_ESTADOS" e retornada para uso posterior.
Figura 1 - Função ObterComCache para os Estados
A função Listar (figura 1.1) tem como objetivo listar os estados brasileiros, aplicando um filtro pelo nome, se fornecido. Ela recebe um parâmetro chamado filtro, que é utilizado para filtrar os estados com base em seu nome. Primeiramente, a função chama ObterComCache para obter a lista de estados, que pode estar armazenada em cache. Em seguida, uma nova lista vazia, chamada lista, é criada. A função então itera sobre os estados obtidos (armazenados na variável cache) e, se o filtro estiver vazio ou se o nome do estado começar com o texto do filtro (ignorando maiúsculas e minúsculas), o estado é adicionado à lista. Por fim, a função retorna a lista filtrada ou, caso o filtro não tenha sido informado, retorna a lista completa de estados.
Figura 1.1 - Função para listar os Estados
A função ObterComCache (figura 1.2) tem como objetivo buscar a lista de municípios de um estado, utilizando o cache para melhorar a performance. O parâmetro "idEstado" especifica o estado cujos municípios serão buscados. Inicialmente, a função define a chave do cache como "LISTA_MUNICIPIOS" e, caso o "idEstado" seja fornecido, ajusta essa chave para incluir o identificador do estado.
Em seguida, a URL da API do IBGE é configurada, e, se houver um "idEstado", a URL é modificada para buscar os municípios do estado específico. A função verifica se a lista de municípios já está armazenada no cache da sessão, acessada pela chave configurada. Se os dados não estiverem no cache, a função faz uma requisição GET à API do IBGE, obtém os dados em formato JSON e os converte em uma lista. Depois, itera sobre os dados, criando um mapa para cada município com os campos "id" e "nome", e os armazena na lista de cache. Finalmente, a lista de municípios é armazenada na sessão e retornada.
Figura 2 - Função ObterComCache para os Municípios
A função Listar (figura 2.1) tem como objetivo listar os municípios de um determinado estado, aplicando um filtro opcional pelo nome. O parâmetro filtro é utilizado para filtrar os municípios com base no nome, enquanto o "idEstado" especifica o estado cujos municípios serão listados. A função começa chamando ObterComCache para obter a lista de municípios, que pode já estar armazenada em cache ou ser baixada da API do IBGE.
Em seguida, uma lista vazia é criada, e a função itera sobre os municípios armazenados na variável "cache". Se o filtro estiver vazio ou se o nome do município começar com o texto do filtro (ignorando maiúsculas e minúsculas), o município é adicionado à lista. No final, a função retorna a lista filtrada ou, caso o filtro não tenha sido informado, a lista completa de municípios é exibida.
Figura 2.1 - Função par listar os Municípios
Agora vamos configurar as Fontes de dados para Estados e Municípios. Primeiro, acesse o menu do sistema (destaque 1 na figura 3) e, em seguida, selecione a opção "Fonte de dados" (2). Clique em "Bloco de Programação" (3) e, por fim, escolha a opção "Nova fonte de dados" (4).
Figura 3 - Criando a Fonte de dados
O processo de criação das Fontes de dados para Estados e Municípios é semelhante, com a única diferença sendo o uso do parâmetro "idEstado" (destaque 1 da figura 3.2) na fonte de dados dos Municípios. Para configurar, altere o identificador (destaque 1 da figura 3.1) para "estados" ou "municipios", conforme o caso. O nome da consulta (2) também deve corresponder ao nome do identificador escolhido.
Em seguida, selecione o tipo da fonte de dados como "Bloco de Programação" (3) e selecione a função "Listar" (4) tanto para Estados quanto para Municípios. O parâmetro "filtro" (5) deve ser configurado como "simpleFilter", que é aplicado para filtrar os dados e retornar apenas os itens que correspondem aos critérios definidos. No caso dos Municípios, isso garantirá que sejam exibidos apenas os municípios correspondentes a cada Estado.
Figura 3.1 - Aba Filtro da Fonte de dados "Estados"
Figura 3.2 - Aba Filtro da Fonte de dados "Municipios"
Na aba Campos (destaque 1 da figura 3.3), insira os valores "nome" e "id" (2), e clique no botão "Adicionar" (3).
Figura 3.3 - Aba Campos da Fonte de dados "Estados"
Para concluir nosso exemplo, inserimos dois componentes Caixa de seleção dinâmica na view "home", responsáveis por exibir os dados dos estados e seus respectivos municípios. No campo "Campo Texto" (destaque 1 da figura 4), inserimos o valor "nome", que será exibido como o rótulo visível para o usuário. No campo "Campo Chave" (destaque 2), inserimos o valor "id", que representará o identificador único de cada item selecionado.
Figura 4 - Configurando os componentes Caixa de seleção dinâmica
Na Fonte de dados "Municipio" (destaque 1 da figura 4.1), acesse a propriedade Filtros e Parâmetros (2) e insira o valor "Estados.active.id" (3) no parâmetro "idEstado", isso fará com que os municípios sejam exibidos para o estado atual presente na caixa de seleção "Estados". Por fim, finalize a configuração (4).
Figura 4.1 - Configurando a propriedade Filtros e Parâmetros da caixa de seleção dos Municípios
Ao executar o projeto, selecionamos a opção "Bahia" na caixa de seleção correspondente aos Estados. Na caixa de seleção destinada aos Municípios, aplicamos um filtro para exibir apenas as opções que começam com o prefixo "sa", conforme ilustrado na figura 4.2.
Figura 4.2 - Listagem dos municípios referentes ao estado da Bahia
Nesta página