Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Requisição de todos os registros

Através da nova documentação da nossa API nos foi passado a seguinte consulta:

let
       body =  "{
                        ""call"":""ListarRecebimentos"",
                        ""app_key"":""XXXXXXXXXXXXXXXXXXXXXXXX"",
                        ""app_secret"":""XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"",
                        ""param"":[
                                    {
  ""nPagina"": 1,
  ""nRegistrosPorPagina"": 50
}
                                  ]
                    }",
       Data=Json.Document(Web.Contents(
                "https://app.omie.com.br/api/v1/produtos/recebimentonfe/", [
                          Headers=[#"Content-Type"="application/json"],
                          Content=Text.ToBinary(body)
                      ]))
in
    Data

A dúvida é: como requisitar toda a informação de uma vez, pois nesse caso a página referenciada é apenas a 1 pois trata-se de um parametro da propria documentação, como receber todas as páginas?

2 respostas
solução!

Oi Marcelo, tudo bem?

Para este caso de requisição de todas as páginas disponíveis, é recomendado criar uma função que itera através das páginas até que não haja mais dados a serem retornados. Deixo abaixo uma sugestão de código, no entanto, destaco que talvez seja necessário fazer algumas adaptações.

let
    // Função para buscar os dados de uma página específica
    FetchData = (pageNum as number) as record =>
        let
            body = "{""call"":""ListarRecebimentos"",""app_key"":""XXXXXXXXXXXXXXXXXXXXXXXX"",""app_secret"":""XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"",""param"":[{""nPagina"": " & Text.From(pageNum) & ",""nRegistrosPorPagina"": 50}]}",
            Data = Json.Document(Web.Contents("https://app.omie.com.br/api/v1/produtos/recebimentonfe/", [Headers=[#"Content-Type"="application/json"], Content=Text.ToBinary(body)])),
            // Verifica se a página atual tem dados
            hasData = not List.IsEmpty(Data[registros])
        in
            Data,

A função FetchData busca dados de uma página específica. Em seguida, você pode fazer uma função recursiva que chama a FetchData. E por fim, combinar os resultados das páginas.

Reforço, que o código é apenas uma sugestão, sendo necessário fazer alguns ajustes.

Espero ter ajudado.

Qualquer dúvida, compartilhe no fórum.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Muito obrigado pela ajuda, mas no final das contas eu acabei optando por deixar o código da documentação mais "limpo" utilizando o Json.FromValue e transformando as etapas em funções, também utilizei parametros para as chaves.

(page as number) =>
  let
    Fonte = Json.FromValue([
      call = "ListarRecebimentos",
      app_key = app_key,
      app_secret = app_secret,
      param = {
        [
          nPagina = page,
          nRegistrosPorPagina = 50
        ]
      }
    ])
  in
    Fonte

Depois utilizei as funções no proximo passo:

(page as number) =>
    let
        request = Json.Document(
            Web.Contents(
                "https://app.omie.com.br/api/v1",
                [
                    RelativePath = "/produtos/recebimentonfe/",
                    Headers = Headers(),
                    Content = body(page)
                ]
            ),
            1252
        )
    in
        request

E finalizei com:

let
   totalpages = Consulta1(1)[nTotalPaginas],
   listOfPages = List.Generate(
       () => [page = 1, data = Consulta1(1) ],
       each [page] <= totalpages,
       each [page = [page] +1, data = Consulta1([page] +1) ]
   )
 in
 listOfPages

Acredito que deve ter uma maneira mais simples, mas a principio resolveu kkk.