Cicli nei flussi Salesforce: un record per ogni data o turno
Una schermata, tanti record. Lo schema di ciclo che serve a chiunque costruisca flussi su schermo, con tre flussi pronti da copiare: turni, giorni di ferie e intervalli di date.
Un recruiter deve aggiungere dodici turni a un lavoro. Un responsabile approva una settimana di ferie. Un organizzatore di eventi prenota un workshop di tre giorni più una giornata di follow-up. Ognuna è una sola decisione in una sola schermata, e ognuna dovrebbe diventare più record.
Nei flussi su schermo non c'è un elemento che dica "crea un record per ogni data". Lo costruisci con tre pezzi standard: un ciclo, un'assegnazione e un solo salvataggio. Questo articolo spiega lo schema e ti dà tre flussi funzionanti costruiti su di esso.
Lo schema nasce da un progetto di recruiting su TalentRover, dove i recruiter dovevano aggiungere una serie di turni a un lavoro. Inserirli un record alla volta richiedeva più tempo della pianificazione stessa. Scegliere giorni e orari una volta sola e lasciare che un ciclo scrivesse i turni ha risolto il problema, e funziona allo stesso modo con qualsiasi oggetto.
Lo schema in cinque elementi
- Schermata. Un calendario MultiDatePick in cui l'utente sceglie tutte le date, e gli orari se servono, in una volta.
- Parsing. L'azione
Parse Date Entries from JSONtrasforma le scelte in un elenco su cui Flow può fare un ciclo. - Ciclo. Un elemento Ciclo percorre l'elenco, una voce alla volta.
- Assegnazione. Dentro il ciclo: copia data e orari della voce in una variabile record, poi aggiungi quel record a una raccolta di record.
- Crea record. Dopo il ciclo, un solo Crea record salva l'intera raccolta.
Perché il salvataggio va dopo il ciclo
Viene la tentazione di mettere un Crea record dentro il ciclo: un passaggio, un record. Funziona con tre date e si rompe con trenta. Ogni Crea record è un salvataggio separato nel database, e Salesforce ne consente 150 per transazione, da dividere con tutti i trigger e i flussi che quei salvataggi avviano. Un salvataggio dentro il ciclo ne consuma uno per data.
Costruire una raccolta e salvarla una volta consuma un solo salvataggio in tutto, qualunque cosa abbia scelto l'utente. È anche più veloce, e salva tutto o niente, quindi un errore non lascia mai a metà i turni.
| Crea record dentro il ciclo | Raccolta salvata dopo il ciclo | |
|---|---|---|
| Salvataggi per 30 date | 30 | 1 |
| Rischio di superare i limiti | Cresce a ogni data scelta | Nessuno dal ciclo |
| In caso di errore | Alcuni record salvati, altri no | Tutto o niente |
Caso d'uso: aggiungere turni a un lavoro
Il recruiter apre il flusso dal lavoro, sceglie i giorni del turno sul calendario e gli orari sulla griglia oraria, e fa clic su Avanti. Il flusso scrive un turno per ogni giorno, collegato al lavoro.
Il calendario passa le scelte al flusso come JSON nel suo output selectedDatesWithTimesJson. Flow non sa leggere il JSON, ed è qui che entra in gioco il parser. Ogni voce che restituisce ha questi campi:
| Campo | Tipo | Contiene |
|---|---|---|
fromDate | Date | Il giorno del turno |
toDate | Date | Lo stesso giorno per un turno; l'ultimo giorno per un intervallo |
startTime | Ora | La prima fascia scelta |
endTime | Ora | La fine dell'ultima fascia scelta |
Fasce adiacenti formano un solo turno, quindi 13:00 e 13:30 diventano dalle 13:00 alle 14:00. Scegliendo due blocchi separati in un giorno, per esempio mattina e pomeriggio, si ottengono due voci e due turni per quel giorno.
Flusso pronto: Add Shifts
Scegli giorni e orari, poi salva un turno per ogni blocco, collegato al record da cui viene avviato il flusso. MDP_Starter_Add_Shifts.flow-meta.xml
Caso d'uso: un record per ogni giorno di ferie
Le ferie di solito si contano a giorni: le paghe contano i giorni, e una richiesta approvata solo in parte va comunque divisa per giorno. Qui non serve nemmeno il parser. Il componente Date restituisce anche selectedDates, un semplice elenco di testo con ogni giorno scelto, intervalli compresi, scritti giorno per giorno.
Fai il ciclo direttamente su quell'elenco. L'unico accorgimento: ogni voce è testo come 2026-11-09, quindi una formula di una riga, DATEVALUE({!Loop_Days}), lo trasforma in una data prima che l'assegnazione lo copi nel record.
Flusso pronto: Record per Day
Scegli giorni e intervalli, poi salva un record per ogni singolo giorno, senza parser. MDP_Starter_Record_Per_Day.flow-meta.xml
Caso d'uso: un record per ogni intervallo di date
Alcune cose durano più giorni ma sono una cosa sola: un workshop di tre giorni, il noleggio di un'attrezzatura, un sopralluogo dal lunedì al mercoledì. Per queste serve un record con data di inizio e data di fine, non tre.
A questo serve l'output selectedDateRangesJson. Il calendario unisce i giorni adiacenti in un unico intervallo, quindi scegliendo il 9, il 10 e l'11 si ottiene una sola voce dal 9 all'11. Fai il parsing, il ciclo, e copia fromDate e toDate nei campi di inizio e fine.
Flusso pronto: Record per Range
Scegli date e intervalli, poi salva un record per ogni intervallo con la sua data di inizio e di fine. MDP_Starter_Record_Per_Range.flow-meta.xml
bookingSuccessCount e quali date sono andate in conflitto in bookingConflictDates.Usa un flusso pronto nella tua organizzazione
I flussi pronti salvano negli oggetti Schedule ed Event inclusi in MultiDatePick, quindi si distribuiscono così come sono e funzionano subito dopo l'installazione. Sostituisci i tuoi oggetti dopo averli visti funzionare.
- Copia o scarica l'XML del flusso qui sopra.
- Distribuiscilo da VS Code. Distribuire un flusso con VS Code ti guida passo per passo.
- Aprilo in Flow Builder e fai clic sul calendario nella prima schermata. Inserisci il Config Name di una configurazione salvata nella configurazione guidata, o importata dalla Config Library, per applicare le tue impostazioni.
- Collegalo ai tuoi oggetti, se non usi Schedule ed Event: cambia l'oggetto della variabile record e i campi nell'assegnazione.
- Attivalo e aggiungilo alla pagina record con il componente Flusso o come azione. Legge l'Id del record dalla sua variabile
recordId.
Errori che costano un pomeriggio
- Salvare dentro il ciclo. Va bene in un test con tre date, diventa un errore di limite in produzione con quaranta.
- Dimenticare di aggiungere il record alla raccolta. L'assegnazione ha due parti: imposta i campi, poi aggiungi (Add) la variabile record alla raccolta. Senza la seconda, il salvataggio finale non ha niente da salvare.
- Assegnare testo a un campo data. L'elenco
selectedDatesè testo. Racchiudi prima ogni voce inDATEVALUE(). - Lasciare disattivato Output As JSON. Gli output JSON vengono compilati solo se l'impostazione Output As JSON del calendario è attiva. I flussi pronti la attivano.
- Avviarlo dal posto sbagliato. Il flusso collega ogni record a
recordId. Avvialo dal lavoro, dall'evento o dalla persona a cui appartengono i record, altrimenti il collegamento resta vuoto.
Domande frequenti
Come si creano più record da un solo flusso su schermo (Screen Flow) Salesforce?
Raccogli le scelte in una schermata, esegui un ciclo e, dentro il ciclo, usa un'Assegnazione per compilare una variabile record e aggiungerla a una raccolta di record. Dopo il ciclo, un solo elemento Crea record salva l'intera raccolta.
Crea record va messo dentro un ciclo del flusso?
No. Un Crea record dentro un ciclo salva una volta per ogni voce, e una transazione ammette 150 salvataggi di questo tipo: un elenco lungo fallisce e ogni elenco è più lento. Costruisci una raccolta di record nel ciclo e salvala una volta sola, dopo la fine del ciclo.
Come si esegue un ciclo su un JSON in un flusso Salesforce?
Flow non sa leggere il JSON da solo. Prima trasformalo in una raccolta: MultiDatePick include un'azione, Parse Date Entries from JSON, che converte l'output JSON del calendario in un elenco di voci con fromDate, toDate, startTime ed endTime, che un elemento Ciclo può percorrere.
Come si aggiungono più turni a un lavoro in Salesforce?
Metti un selettore di data e ora in un flusso su schermo avviato dal record del lavoro, lascia che il recruiter scelga giorni e orari dei turni, converti le scelte in un elenco e fai un ciclo per creare un record turno per ogni giorno, collegato al lavoro. Salvali tutti con un solo Crea record dopo il ciclo.
Serve Apex per fare un ciclo sulle date scelte?
No. L'azione di parsing è inclusa in MultiDatePick, e ciclo, assegnazione e salvataggio sono elementi standard di Flow. Per i giorni interi non serve nemmeno l'azione: il calendario restituisce anche un semplice elenco dei giorni scelti.
Una schermata, tutti i record che deve creare.
Copia un flusso pronto qui sopra, oppure prova prima il calendario nella demo live.
- $20/utente/mese, tutte le funzionalità
- Prova gratuita di 30 giorni, senza carta
- 100% nativo Salesforce
- Senza Apex
- Presto disponibile su Salesforce AppExchange