let
Fonte = (
optional MaxPag as number,
optional LoopsRealizados as number,
optional TabelaAnterior as table
) =>
let
//Cada vez que o algoritimo passar por aqui, ele incrementa +1
Loop =
if LoopsRealizados = null
then 1
else LoopsRealizados +1,
//tentamos buscar os dados da págia, e se der erro, carrega a varável com null
TabelaAtual =
try fn_ConsultaChamado(Loop) //1
otherwise null,
// Essa tabela será carregada a cada passagem que o Algorítimo fizer por ela
TabelaAnterior =
if TabelaAnterior = null //será null apenas na primeria passagem
then Table.FromRecords({[]})
else TabelaAnterior,
// Aqui vamos colar cada tabela encontrada, abaixo da outra
TabelaFim =
if
TabelaAtual = null
or Table.RowCount(TabelaAtual) = 0
then TabelaAnterior
else if Loop = 1
then TabelaAtual
else Table.Buffer( Table.Combine({TabelaAnterior, TabelaAtual})),
// Condição para voltar ao início (tipo jogo da vida) ou sair do Loop), finalizand-o
out =
if
TabelaAtual = null
or Table.RowCount(TabelaAtual) = 0
or Loop = MaxPag
then TabelaFim
else @FN_loopChamados(MaxPag, Loop, TabelaFim) in
out
in
Fonte
let
Fonte = (pagina as number) =>
let
Origem = Json.Document(Web.Contents(api_TT_url_chamados & api_TT_token & "/", [RelativePath= Text.From(pagina)&"/"])),
#"Convertido em tabela" = Table.FromRecords({Origem}),
#"Expandido data" = Table.ExpandListColumn(#"Convertido em tabela", "data"),
#"Expandido data1" = Table.ExpandRecordColumn(#"Expandido data", "data", {"idchamado", "protocolo", "titulo", "mensagem", "mimetype", "email_cliente", "prioridade", "tempotrabalho", "tempoabertura", "data_criacao", "deadline", "valoritemhora", "valoritemhoraextra", "valorfinal", "valorfinalextra", "valorfinalbruto", "nomecliente", "tipochamado", "avaliadoproblemaresolvido", "avaliadoatendimento", "avaliacaocomentario", "dataprimeiraresposta", "dataencerramento", "ultimasituacao", "dataultimasituacao", "sla_inicio", "sla_deadline", "sla_inicializacao_cumprido", "sla_deadline_cumprido", "descsituacao", "categoria", "departamento", "atendente", "id_cliente", "status", "dataultimostatus", "nomeorganizacao", "campospersonalizados", "campospersonalizados_finalizados"}, {"data.idchamado", "data.protocolo", "data.titulo", "data.mensagem", "data.mimetype", "data.email_cliente", "data.prioridade", "data.tempotrabalho", "data.tempoabertura", "data.data_criacao", "data.deadline", "data.valoritemhora", "data.valoritemhoraextra", "data.valorfinal", "data.valorfinalextra", "data.valorfinalbruto", "data.nomecliente", "data.tipochamado", "data.avaliadoproblemaresolvido", "data.avaliadoatendimento", "data.avaliacaocomentario", "data.dataprimeiraresposta", "data.dataencerramento", "data.ultimasituacao", "data.dataultimasituacao", "data.sla_inicio", "data.sla_deadline", "data.sla_inicializacao_cumprido", "data.sla_deadline_cumprido", "data.descsituacao", "data.categoria", "data.departamento", "data.atendente", "data.id_cliente", "data.status", "data.dataultimostatus", "data.nomeorganizacao", "data.campospersonalizados", "data.campospersonalizados_finalizados"}),
#"Tipo de coluna alterado" = Table.TransformColumnTypes(#"Expandido data1", {{"erro", type logical}, {"data.idchamado", type text}, {"data.protocolo", Int64.Type}, {"data.titulo", type text}, {"data.mensagem", type text}, {"data.mimetype", type text}, {"data.email_cliente", type text}, {"data.prioridade", Int64.Type}, {"data.tempotrabalho", Int64.Type}, {"data.tempoabertura", Int64.Type}, {"data.data_criacao", type datetime}, {"data.deadline", type datetime}, {"data.valoritemhora", Int64.Type}, {"data.valoritemhoraextra", Int64.Type}, {"data.valorfinal", Int64.Type}, {"data.valorfinalextra", Int64.Type}, {"data.valorfinalbruto", Int64.Type}, {"data.nomecliente", type text}, {"data.tipochamado", type text}, {"data.avaliadoproblemaresolvido", type text}, {"data.avaliadoatendimento", type text}, {"data.avaliacaocomentario", type text}, {"data.dataprimeiraresposta", type datetime}, {"data.dataencerramento", type datetime}, {"data.ultimasituacao", Int64.Type}, {"data.dataultimasituacao", type datetime}, {"data.sla_inicio", type datetime}, {"data.sla_deadline", type datetime}, {"data.sla_inicializacao_cumprido", type logical}, {"data.sla_deadline_cumprido", type logical}, {"data.descsituacao", type text}, {"data.categoria", type text}, {"data.departamento", type text}, {"data.atendente", type text}, {"data.id_cliente", type any}, {"data.status", type text}, {"data.dataultimostatus", type datetime}, {"data.nomeorganizacao", type text}, {"data.campospersonalizados", type any}, {"data.campospersonalizados_finalizados", type any}, {"total_itens", Int64.Type}}),
#"Transformar colunas" = Table.TransformColumnTypes(#"Tipo de coluna alterado", {{"data.id_cliente", type text}, {"data.campospersonalizados", type text}, {"data.campospersonalizados_finalizados", type text}}),
#"Substituir erros" = Table.ReplaceErrorValues(#"Transformar colunas", {{"data.id_cliente", null}, {"data.campospersonalizados", null}, {"data.campospersonalizados_finalizados", null}})
in
#"Substituir erros"
in
Fonte
E a tabela fazendo a chamada da função:
Função invocada
let
Origem = fn_loopChamados(2, null, null)
in
Origem