Boucle dans un flux Salesforce : un enregistrement par date
Un écran, plusieurs enregistrements. Le modèle de boucle dont tout créateur de flux d'écran (Screen Flow) a besoin, avec trois flux modèles à copier : postes, jours de congé et plages de dates.
Une recruteuse doit ajouter douze postes à une mission. Un manager approuve une semaine de congés. Un organisateur d'événements réserve un atelier de trois jours et une journée de suivi. Chaque fois, c'est une seule décision sur un seul écran, et chaque fois, elle doit produire plusieurs enregistrements.
Les flux d'écran n'ont aucun élément « créer un enregistrement par date ». Vous le construisez avec trois éléments standard : une boucle, une affectation et un seul enregistrement. Cet article détaille ce modèle et vous donne trois flux fonctionnels qui l'appliquent.
Ce modèle vient d'un projet de recrutement sur TalentRover, où les recruteurs devaient ajouter une série de postes à une mission. Les saisir un par un prenait plus de temps que la planification elle-même. Choisir les jours et les heures une seule fois et laisser une boucle créer les postes a réglé le problème, et cela fonctionne de la même façon sur n'importe quel objet.
Le modèle en cinq éléments
- Écran. Un calendrier MultiDatePick où l'utilisateur choisit toutes les dates en une fois, avec les heures si besoin.
- Analyse. L'action
Parse Date Entries from JSONtransforme les choix en une liste que le flux peut parcourir. - Boucle. Un élément Boucle parcourt la liste, une entrée à la fois.
- Affectation. Dans la boucle : copiez la date et les heures de l'entrée dans une variable d'enregistrement, puis ajoutez cet enregistrement à une collection d'enregistrements.
- Créer des enregistrements. Après la boucle, un seul Créer des enregistrements enregistre toute la collection.
Pourquoi l'enregistrement se fait après la boucle
On est tenté de placer un Créer des enregistrements dans la boucle : un passage, un enregistrement. Ça marche pour trois dates et ça casse pour trente. Chaque Créer des enregistrements est une écriture distincte en base, et Salesforce en autorise 150 par transaction, partagées avec tous les déclencheurs et flux que ces écritures lancent. Un enregistrement dans la boucle en consomme un par date.
Construire une collection et l'enregistrer une fois n'en consomme qu'un au total, quel que soit le choix de l'utilisateur. C'est aussi plus rapide, et tout est enregistré ou rien ne l'est : une erreur ne laisse jamais la moitié des postes derrière elle.
| Créer des enregistrements dans la boucle | Collection enregistrée après la boucle | |
|---|---|---|
| Écritures pour 30 dates | 30 | 1 |
| Risque de limite | Augmente avec chaque date choisie | Aucun lié à la boucle |
| En cas d'erreur | Certains enregistrements créés, d'autres non | Tout ou rien |
Cas d'usage : ajouter des postes à une mission
Le recruteur ouvre le flux depuis la mission, choisit les jours de poste dans le calendrier et les horaires dans la grille horaire, puis clique sur Suivant. Le flux crée un poste par jour, lié à la mission.
Le calendrier transmet les choix au flux en JSON, dans sa sortie selectedDatesWithTimesJson. Un flux ne sait pas lire le JSON : c'est là qu'intervient l'analyseur. Chaque entrée qu'il renvoie contient ces champs :
| Champ | Type | Contient |
|---|---|---|
fromDate | Date | Le jour du poste |
toDate | Date | Le même jour pour un poste ; le dernier jour pour une plage |
startTime | Heure | Le premier créneau choisi |
endTime | Heure | La fin du dernier créneau choisi |
Des créneaux contigus forment un seul poste : 13:00 et 13:30 deviennent 13:00 à 14:00. Choisir deux blocs séparés dans une journée, par exemple un matin et un après-midi, donne deux entrées et deux postes pour ce jour.
Flux modèle : Add Shifts
Choisissez des jours et des horaires, puis enregistrez un poste par bloc, lié à l'enregistrement depuis lequel le flux est lancé. MDP_Starter_Add_Shifts.flow-meta.xml
Cas d'usage : un enregistrement par jour de congé
Les congés se suivent généralement au jour : la paie compte des jours, et une demande approuvée en partie doit de toute façon être découpée par jour. Ici, l'analyseur n'est même pas nécessaire. Le composant Date produit aussi selectedDates, une simple liste texte de tous les jours choisis, où les plages sont détaillées jour par jour.
Parcourez directement cette liste. Seule subtilité : chaque élément est du texte, comme 2026-11-09. Une formule d'une ligne, DATEVALUE({!Loop_Days}), le convertit en date avant que l'affectation ne le copie dans l'enregistrement.
Flux modèle : Record per Day
Choisissez des jours et des plages, puis enregistrez un enregistrement pour chaque jour, sans analyseur. MDP_Starter_Record_Per_Day.flow-meta.xml
Cas d'usage : un enregistrement par plage de dates
Certaines choses durent plusieurs jours mais n'en font qu'une : un atelier de trois jours, une location de matériel, une visite de site du lundi au mercredi. Il leur faut un seul enregistrement avec une date de début et une date de fin, pas trois.
C'est le rôle de la sortie selectedDateRangesJson. Le calendrier regroupe les jours contigus en une seule plage : choisir le 9, le 10 et le 11 donne une entrée du 9 au 11. Analysez-la, bouclez et copiez fromDate et toDate dans les champs de début et de fin.
Flux modèle : Record per Range
Choisissez des dates et des plages, puis enregistrez un enregistrement par plage avec sa date de début et de fin. MDP_Starter_Record_Per_Range.flow-meta.xml
bookingSuccessCount et quelles dates étaient en conflit dans bookingConflictDates.Utiliser un flux modèle dans votre org
Les flux modèles enregistrent dans les objets Schedule et Event fournis avec MultiDatePick : ils se déploient tels quels et fonctionnent dès l'installation. Remplacez-les par vos propres objets une fois que vous les avez vus fonctionner.
- Copiez ou téléchargez le XML du flux ci-dessus.
- Déployez-le depuis VS Code. Déployer un flux avec VS Code détaille chaque étape.
- Ouvrez-le dans Flow Builder et cliquez sur le calendrier du premier écran. Saisissez le Config Name d'une configuration enregistrée dans l'assistant de configuration, ou importée depuis la Config Library, pour lui appliquer vos paramètres.
- Reliez-le à vos objets si vous n'utilisez pas Schedule et Event : changez l'objet de la variable d'enregistrement et les champs de l'affectation.
- Activez-le et ajoutez-le à la page d'enregistrement avec le composant Flux ou comme action. Il lit l'Id de l'enregistrement dans sa variable
recordId.
Les erreurs qui coûtent un après-midi
- Enregistrer dans la boucle. Aucun souci en test avec trois dates, une erreur de limite en production avec quarante.
- Oublier d'ajouter l'enregistrement à la collection. L'affectation se fait en deux temps : définir les champs, puis Add la variable d'enregistrement à la collection. Sans la seconde partie, l'enregistrement final n'a rien à enregistrer.
- Affecter du texte à un champ date. La liste
selectedDatesest du texte. Encadrez d'abord chaque élément avecDATEVALUE(). - Laisser Output As JSON désactivé. Les sorties JSON ne sont remplies que si le paramètre Output As JSON du calendrier est activé. Les flux modèles l'activent.
- Lancer le flux depuis le mauvais endroit. Le flux lie chaque enregistrement à
recordId. Lancez-le depuis la mission, l'événement ou la personne à qui appartiennent les enregistrements, sinon le lien reste vide.
Questions fréquentes
Comment créer plusieurs enregistrements depuis un seul flux d'écran Salesforce ?
Recueillez les choix sur un seul écran, parcourez-les avec une boucle et, dans la boucle, utilisez une Affectation pour remplir une variable d'enregistrement et l'ajouter à une collection d'enregistrements. Après la boucle, un seul élément Créer des enregistrements enregistre toute la collection.
Faut-il placer Créer des enregistrements dans une boucle de flux ?
Non. Un élément Créer des enregistrements placé dans une boucle enregistre une fois par élément, et une transaction n'autorise que 150 enregistrements de ce type : une longue liste échoue et toutes les listes s'exécutent plus lentement. Construisez une collection d'enregistrements dans la boucle et enregistrez-la une seule fois à la fin de la boucle.
Comment parcourir du JSON dans un flux Salesforce ?
Un flux ne sait pas lire le JSON seul. Transformez-le d'abord en collection : MultiDatePick inclut une action, Parse Date Entries from JSON, qui convertit la sortie JSON du calendrier en une liste d'entrées avec fromDate, toDate, startTime et endTime, qu'un élément Boucle peut parcourir.
Comment ajouter plusieurs postes (shifts) à une mission dans Salesforce ?
Placez un sélecteur de dates et d'heures sur un flux d'écran lancé depuis l'enregistrement de la mission, laissez le recruteur choisir les jours et les horaires des postes, convertissez ces choix en liste et parcourez-la pour créer un enregistrement de poste par jour, lié à la mission. Enregistrez-les tous avec un seul Créer des enregistrements après la boucle.
Faut-il de l'Apex pour parcourir les dates choisies ?
Non. L'action d'analyse est fournie avec MultiDatePick, et la boucle, l'affectation et l'enregistrement sont des éléments de flux standard. Pour des journées entières, l'action n'est même pas nécessaire : le calendrier produit aussi une simple liste des jours choisis.
Un écran, tous les enregistrements qu'il doit créer.
Copiez un flux modèle ci-dessus, ou essayez d'abord le calendrier dans la démo en direct.
- $20/utilisateur/mois, toutes les fonctionnalités
- Essai gratuit de 30 jours, sans carte
- 100 % natif Salesforce
- Sans Apex
- Bientôt disponible sur Salesforce AppExchange