Share
Explore

Loop Backend Workflow - Bubble

Artigo retirado de uma postagem feito na Comunidade Sem Codar, intuito é isolar a resposta e mostrar os casos de uso para quando for necessário realizar um looping usando Backend Workflow e principalmente recebendo um array de uma API.

megaphone

Originalmente essa postagem usava como exemplo de caso a API do Mercado Livre, para que você pudesse receber uma lista (array) de produtos e salvar cada produto em uma linha do banco de dados.

Primeiro é importante ressaltar que esse recurso, é um recurso pago, portanto, até o momento você consegue acessar ele a partir do primeiro plano pago, ou usando o recurso do template. Irei deixar algumas observações abaixo. Obs: Meu banco de dados está setado com uma tabela "Produto" que contém um "ID". Obs²: Para níveis de estudo, estou usando a que gera dados fictícios, inclusive, de produtos, embora vi que você esteja usando do Mercado Livre, e eu já tenha brincado com ela, não estou com nenhuma conta no momento para emular o exato resultado, mas o resultado final será o mesmo após você testar!

Crie um backend workflow, e coloque os parâmetros que você quer iterar, fiz de uma forma simples, então só passei o ID. Lembrando que o ponto mais importante aqui é que você precisa passar isso como uma lista/array, clicando em "Is a list/array", como está feito abaixo.
hjbcjj81rr2ppofu7golvlb4uzi5.png
Agora irei destrinchar um pouco os passos que você irá seguir nesse workflow, como eu estou fazendo a coisa mais simples do mundo, serão apenas 2 passos, que serão suficientes para que você consiga emular exatamente o que você quer e depois você vai brincando com variações.

Esse é o workflow:

aomovoc1l23twjsvqd9r0wq05ih1.png
Step 1: Criar um novo Produto.
0lumajsm410164oh4zb7yc5pq3a3.png
Nele, eu crio um ID na tabela Produto, que eu já havia mencionado antes. A grande sacada aqui é que você salvará apenas o Primeiro Item (:first item)


95trkl6017v5flpirap9gy5y7dop.png
O segundo passo é Agendar API Workflow (Schedule API Wokflow) e escolha exatamente o Backend Wokflow que criamos anteriormente. Nele haverá dois campos:
Schedule Date
ID (Referência ao Backend Workflow criado)
O Schedule Date você pode colocar Current Date/Time + Quantidade de Segundos que você achar interessante para não dar gargalos. ​Agora começa a mágica efetivamente, o ID você colocará exatamente a expressão como está no print. Vou destrinchar ela: - No primeiro passo você está salvando apenas o primeiro item ID no seu banco de dados, mas você recebe uma lista de IDs, então quando você agenda a API Workflow você está fazendo com que esse backend workflow fique recursivo, fazendo com que ele rode o primeiro passo novamente, salvando em outra linha o Primeiro ID, porém não queremos salvar os ID's repetidamente, portanto, usamos essa expressão ID:minus item ID:first item, isso faz com que quando rode a segunda vez pela lista, ele retire aquele primeiro item anterior e agora o item atual será o primeiro e assim por diante (parece que ficou confuso, mas segue o raciocínio)
cy6b66xah2qw37gifr9zwwjrgf79.jpg
Quando você tem essa pilha de livros e retira o primeiro livro (id) dessa pilha de livros o segundo livro passa a se tornar o primeiro até que essa pilha de livros não exista mais. (Tentei fazer de uma forma visual, com livros, pois acho que fica mais didático até mesmo para iniciantes que caírem nesse tópico, se você já é mais avançado, não fique com raiva desse exemplo haha) Antes de irmos para o próximo passo, é importante se atentar a condicional do loop, isso que faz o loop acontecer juntamente com ele não entrar no famoso loop infinito (quem é de programação sabe o que é isso haha) Essa condicional basicamente é: Roda a lista, desde que todos os items daquela lista, sejam maior que zero. ​Em termos didáticos: Só retire os livros da pilha de livros se eles foram maior que zero, ou seja, se não tiver mais livros (0), não retire nada.
Agora vamos para o front, eu criei um botão genérico na tela.

e641fi5wcs43vaq2n6p25x9kdgr3.png
O workflow desse botão é o seguinte.
0fhs6xitgjw5sy0mqe2eqa1u5bz7.png
1 - Eu chamo minha API, como disse no início, é uma API fake que me retorna 5 IDs de produtos. 2 - O segundo passo eu agendo uma API Workflow (Schedule API Workflow). Bem semelhante como é feito no Backend Workflow.
13abje1cn4vf2s74w6xa2epnlmn4.png
Os parâmetros continuam os mesmo, Data + ID, porém agora você pode apenas colocar o Current date/time e no ID você vai passar o Result of step 1 each items, por que você, finalmente vai passar sua lista de IDs para que o backend possa fazer o loop 😄 Por fim, o resultado é esse:
muxhp9jwwp67ygei5da1mqwk3v77.png
Os 5 IDs que eu mencionei anteriormente foram salvos no meu banco de dados, um em cada linha, vindo da mesma chamada de API que me retorna um array de IDs. Acho que é exatamente isso que você gostaria e essa é a melhor forma que eu vejo para fazer isso e é bem versátil. O Bubble possui a função Schedule API Workflow on a List, porém eu abandonei essa opção depois de ver vários relatos no próprio fórum do Bubble que dependendo da quantidade de itens na sua lista, pode ocorrer falhas, dessa forma, usando uma ação recursiva no backend é mais seguro e evita o maior número de falhas possíveis. Bom, apesar de longo, espero ter te ajudado. Pretendo sempre trazer atualizações para esse documento, com alguns outros exemplos amais, corrigir bugs e outras coisas do gênero.
Se possuir alguma dúvida, sugestão ou precisar de uma consultoria privada, pode me procurar nos seguintes canais: ​Email:
Telefone (whatsapp): 27 99600-0882

Want to print your doc?
This is not the way.
Try clicking the ⋯ next to your doc name or using a keyboard shortcut (
CtrlP
) instead.