Passar para o conteúdo principal
Todas as coleçõesIntegrações e fórmulas externas
Otimização de código para buscar dados em vários níveis (expands)
Otimização de código para buscar dados em vários níveis (expands)
João Pedro Ledo avatar
Escrito por João Pedro Ledo
Atualizado há mais de 3 anos

INTRODUÇÃO
Muitas vezes é necessário buscar dados de várias entidades distintas em uma mesma consulta para tratá-los para trabalhar com automações e integrações, o problema é que trazer dados de diferentes fontes pode ser uma operação pesada e causar Timeout em sua requisição.

Vamos pegar como exemplo o seguinte cenário: queremos buscar a última revisão de uma proposta cujo negócio foi Ganho e queremos trazer dados detalhados de:

  1. Proposta, incluindo os Campos customizados

  2. Cliente relacionado, incluindo seus Marcadores e Campos customizados.

  3. Negócio incluindo os Marcadores

  4. Responsável pelo Negócio

  5. Produtos incluindo oc Campos customizados e os Opcionais (e também seus Campos customizados)



DESAFIO
O problema é que para que esta consulta seja executada, a API do Ploomes tem que percorrer entidades em vários níveis para encontrar todos os dados necessários, e esta operação será realizada para cada resultado que corresponda aos parâmetros da busca. Imagine que o filtro desta consulta encontre 15 resultados em uma base de 1.000 Negócios, para cada um dos resultados seria necessário percorrer os diferentes níveis e muito provavelmente a operação sofreria um Timeout (estouro de tempo de requisição) antes de ser completa e os dados desejados não serão retornados.



SOLUÇÃO
A solução para este caso é bastante simples: fazer o filtro buscando todos os selecionando apenas o ID da entidade, e depois iterar sobre os resultados buscando informações complementares. Então a mesma operação seria dividida em duas etapas. Na primeira, seria feito somente o seguinte:

O quote["Id"] destacado acima representa o ID da proposta da vez dentro do Loop. Embora ainda estejamos fazendo vários Expands e trazendo as mesmas informações da consulta não otimizada, iterando assim a busca fica extremamente mais rápida porque estamos dizendo para a API que queremos um ID específico.

Respondeu à sua pergunta?