Em breve no Salesforce AppExchange

Loop no Salesforce Flow: um registro para cada data ou turno

Uma tela, muitos registros. O padrão de loop de que todo criador de fluxos de tela precisa, com três fluxos prontos para copiar: turnos, folgas e intervalos de datas.

Publicado em 29 de outubro de 2026 · MultiDatePick

Um recrutador precisa adicionar doze turnos a uma vaga. Uma gestora aprova uma semana de folga. Um organizador de eventos reserva um workshop de três dias e mais um dia de acompanhamento. Cada caso é uma única decisão em uma única tela, e cada um deveria virar vários registros.

O fluxo de tela não tem um elemento que diga "crie um registro por data". Você monta isso com três peças padrão: um loop, uma atribuição e um único salvamento. Este post mostra esse padrão passo a passo e entrega três fluxos prontos construídos com ele.

O padrão nasceu em um projeto de recrutamento no TalentRover, em que os recrutadores precisavam adicionar uma série de turnos a uma vaga. Lançar um registro de cada vez levava mais tempo do que o próprio agendamento. Escolher os dias e horários uma vez e deixar um loop gravar os turnos resolveu o problema, e funciona do mesmo jeito para qualquer objeto.

O padrão em cinco elementos

Um fluxo de tela do Salesforce no Flow Builder que adiciona turnos: uma tela do MultiDatePick, uma ação Parse Date Entries, um loop que monta cada turno e um único Criar registros depois do loop
O fluxo pronto Add Shifts. O salvamento fica depois do loop, não dentro dele.
  1. Tela. Um calendário do MultiDatePick em que o usuário escolhe todas as datas, e os horários se você precisar, de uma vez.
  2. Conversão. A ação Parse Date Entries from JSON transforma as escolhas em uma lista que o Flow consegue percorrer.
  3. Loop. Um elemento Loop percorre a lista, uma entrada por vez.
  4. Atribuição. Dentro do loop: copie a data e os horários da entrada para uma variável de registro e depois adicione esse registro a uma coleção de registros.
  5. Criar registros. Depois do loop, um único Criar registros salva a coleção inteira.

Por que o salvamento fica depois do loop

É tentador colocar um Criar registros dentro do loop: uma passada, um registro. Funciona com três datas e quebra com trinta. Cada Criar registros é um salvamento separado no banco de dados, e o Salesforce permite 150 deles por transação, divididos com todos os acionadores e fluxos que esses salvamentos disparam. Um salvamento dentro do loop gasta um por data.

Montar uma coleção e salvá-la uma vez gasta um único salvamento no total, não importa o que o usuário escolheu. Também é mais rápido, e salva tudo ou nada, então uma falha nunca deixa metade dos turnos para trás.

Criar registros dentro do loopColeção salva depois do loop
Salvamentos para 30 datas301
Risco de limiteCresce a cada data escolhidaNenhum vindo do loop
Em caso de erroAlguns registros salvos, outros nãoTudo ou nada

Caso de uso: adicionar turnos a uma vaga

O recrutador abre o fluxo a partir da vaga, escolhe os dias dos turnos no calendário e os horários na grade de horários e clica em Avançar. O fluxo grava um turno por dia, vinculado à vaga.

Seletor de data e hora do MultiDatePick em um fluxo de tela do Salesforce: três dias de turno escolhidos em novembro, com 13:00 às 14:00 selecionado para todos
Três dias de turno e um intervalo de horário, escolhidos em uma única tela. O fluxo transforma isso em três registros de turno.

O calendário entrega as escolhas ao fluxo como JSON na saída selectedDatesWithTimesJson. O Flow não lê JSON, e é aí que entra o conversor. Cada entrada que ele devolve tem estes campos:

CampoTipoContém
fromDateDateO dia do turno
toDateDateO mesmo dia, para um turno; o último dia, para um intervalo
startTimeHorárioO primeiro horário escolhido
endTimeHorárioO fim do último horário escolhido

Horários vizinhos formam um único turno, então 13:00 e 13:30 viram 13:00 às 14:00. Escolher dois blocos separados no mesmo dia, como uma manhã e uma tarde, gera duas entradas e dois turnos naquele dia.

Fluxo pronto: Add Shifts

Escolha dias e horários e salve um turno por bloco, vinculado ao registro a partir do qual o fluxo foi iniciado. MDP_Starter_Add_Shifts.flow-meta.xml

Baixar

Caso de uso: um registro para cada dia de folga

Folgas normalmente são controladas por dia: a folha de pagamento conta dias, e um pedido aprovado só em parte precisa ser dividido por dia de qualquer jeito. Aqui você nem precisa do conversor. O componente Date também devolve selectedDates, uma lista de texto simples com cada dia escolhido, com os intervalos desdobrados dia a dia.

Percorra essa lista diretamente em um loop. O único detalhe é que cada item é um texto como 2026-11-09, então uma fórmula de uma linha, DATEVALUE({!Loop_Days}), o transforma em data antes de a atribuição copiá-lo para o registro.

Fluxo pronto: Record per Day

Escolha dias e intervalos e salve um registro para cada dia, sem precisar do conversor. MDP_Starter_Record_Per_Day.flow-meta.xml

Baixar

Caso de uso: um registro por intervalo de datas

Algumas coisas duram vários dias, mas são uma coisa só: um workshop de três dias, a locação de um equipamento, uma visita técnica de segunda a quarta. Elas pedem um registro com data de início e data de término, não três.

Para isso existe a saída selectedDateRangesJson. O calendário junta dias vizinhos em um único intervalo, então escolher os dias 9, 10 e 11 gera uma entrada do dia 9 ao dia 11. Converta, percorra em um loop e copie fromDate e toDate para os campos de início e de término.

Fluxo pronto: Record per Range

Escolha datas e intervalos e salve um registro por intervalo, com a data de início e de término. MDP_Starter_Record_Per_Range.flow-meta.xml

Baixar
Vai reservar um recurso? Você não precisa de loop. O componente Booking salva as próprias reservas, verificando capacidade e conflitos pelo caminho, e informa ao fluxo quantas salvou em bookingSuccessCount e quais datas entraram em conflito em bookingConflictDates.

Use um fluxo pronto na sua organização

Os fluxos prontos salvam nos objetos Schedule e Event que vêm com o MultiDatePick, então são implantados do jeito que estão e funcionam logo após a instalação. Troque pelos seus próprios objetos depois de vê-los funcionando.

  1. Copie ou baixe o XML do fluxo acima.
  2. Implante-o pelo VS Code. Implantar um fluxo com o VS Code mostra o passo a passo.
  3. Abra-o no Flow Builder e clique no calendário da primeira tela. Digite o Config Name de uma configuração que você salvou no Assistente de Configuração, ou de uma que importou da Config Library, para aplicar as suas configurações.
  4. Aponte-o para os seus objetos, se não for usar Schedule e Event: mude o objeto da variável de registro e os campos da atribuição.
  5. Ative-o e adicione-o à página de registro com o componente Flow ou como uma ação. Ele lê o Id do registro na variável recordId.

Erros que custam uma tarde

  • Salvar dentro do loop. Funciona em um teste com três datas e dá erro de limite em produção com quarenta.
  • Esquecer de adicionar o registro à coleção. A atribuição precisa de duas partes: definir os campos e depois Adicionar a variável de registro à coleção. Sem a segunda, o salvamento no final não tem nada para salvar.
  • Atribuir texto a um campo de data. A lista selectedDates é texto. Envolva cada item em DATEVALUE() antes.
  • Deixar o Output As JSON desligado. As saídas JSON só são preenchidas quando a opção Output As JSON do calendário está ligada. Os fluxos prontos já a ligam.
  • Iniciar do lugar errado. O fluxo vincula cada registro a recordId. Execute-o a partir da vaga, do evento ou da pessoa a que os registros pertencem, ou o vínculo fica vazio.

Perguntas frequentes

Como criar vários registros a partir de um único fluxo de tela (Screen Flow) do Salesforce?

Reúna as escolhas em uma tela, percorra-as em um loop e, dentro do loop, use uma Atribuição para preencher uma variável de registro e adicioná-la a uma coleção de registros. Depois do loop, um único elemento Criar registros salva a coleção inteira.

O Criar registros deve ficar dentro de um loop do Flow?

Não. Um Criar registros dentro de um loop salva uma vez por item, e uma transação permite 150 desses salvamentos, então uma lista longa falha e toda lista fica mais lenta. Monte uma coleção de registros no loop e salve-a uma vez, quando o loop terminar.

Como percorrer um JSON em um loop no Salesforce Flow?

O Flow não lê JSON sozinho. Transforme-o antes em uma coleção: o MultiDatePick inclui uma ação, Parse Date Entries from JSON, que converte a saída JSON do calendário em uma lista de entradas com fromDate, toDate, startTime e endTime, que um elemento Loop consegue percorrer.

Como adicionar vários turnos a uma vaga no Salesforce?

Coloque um seletor de data e hora em um fluxo de tela iniciado a partir do registro da vaga, deixe o recrutador escolher os dias e horários dos turnos, converta as escolhas em uma lista e percorra-a em um loop para montar um registro de turno por dia, vinculado à vaga. Salve todos em um único Criar registros depois do loop.

Preciso de Apex para percorrer as datas escolhidas?

Não. A ação de conversão vem com o MultiDatePick, e o loop, a atribuição e o salvamento são elementos padrão do Flow. Para dias inteiros, você nem precisa da ação: o calendário também devolve uma lista simples dos dias escolhidos.

Uma tela, todos os registros que ela deve gerar.

Copie um fluxo pronto acima, ou experimente antes o calendário na demo ao vivo.

  • US$ 20/usuário/mês, todos os recursos
  • Teste grátis de 30 dias, sem cartão
  • 100% nativo do Salesforce
  • Sem Apex
  • Em breve no Salesforce AppExchange