Permettre de choisir plusieurs dates dans un flux d'écran (Screen Flow) Salesforce
Un flux vous donne un champ Date par élément d'écran. Si quelqu'un doit choisir neuf jours, ça coince. Voici les options, et leurs inconvénients.
Tôt ou tard, tout administrateur y est confronté. Une demande de congés, un formulaire de disponibilités, une inscription à une formation : l'utilisateur doit choisir plusieurs dates, pas forcément consécutives, et le composant Date standard des flux n'en saisit qu'une.
Les contournements, et pourquoi ils font mal
| Approche | Comment ça se passe | Le prix à payer |
|---|---|---|
| Plusieurs champs Date sur un écran | Date 1, Date 2, Date 3, Date 4... | Plafond fixe, peu élégant, et surtout vide |
| Une boucle qui demande une date à la fois | « Ajouter une autre date ? » puis retour à l'écran | Pénible au-delà de trois dates environ |
| Un champ de texte libre | L'utilisateur tape les dates en texte | Impossible à analyser ou à exploiter en rapport, source d'erreurs |
| Date de début et de fin uniquement | Tout traiter comme une seule plage continue | Faux dès que les jours ne se suivent pas |
| Une liste de sélection multiple de dates | Générer les valeurs de date à l'avance | Devient obsolète, demande une maintenance constante |
| Un composant calendrier multi-dates | Cliquer sur toutes les dates voulues, sur un seul écran | Renvoie une collection, prête pour une boucle |
Le contournement début-fin est le plus courant et le plus sournoisement faux. « J'ai besoin du 3, du 4, du 11 et du 18 » devient du 3 au 18, soit seize jours d'absence implicite. Les données ont l'air propres et sont tout simplement fausses.
La vraie solution : un composant d'écran qui renvoie une collection
Ce dont un flux a réellement besoin, c'est d'un composant d'écran qui permet de cliquer sur autant de dates que voulu et qui renvoie une collection. Une fois que vous l'avez, le reste du flux est classique : une boucle sur la collection, un enregistrement par date, c'est fait.
MultiDatePick renvoie plusieurs sorties, selon ce que vous saisissez :
| Sortie | Contenu | Nom d'API |
|---|---|---|
| Selected Dates | Une collection de texte de dates ISO, prête pour une boucle | selectedDates |
| Date Ranges JSON | Des plages consolidées, quand des jours consécutifs doivent former un seul enregistrement | selectedDateRangesJson |
| Dates With Times JSON | Heures de début et de fin par date | selectedDatesWithTimesJson |
| Successful Bookings Count, Conflict Dates | Ce qui a été enregistré, et ce qui était en conflit | bookingSuccessCount |
Retransformer le JSON en enregistrements
Deux de ces sorties sont en JSON, car Flow n'a pas de type natif pour « une liste d'objets ayant chacun plusieurs champs ». On n'analyse pas du texte dans une formule. Le package fournit une action de flux, Parse Date Entries from JSON, qui prend le JSON et renvoie une vraie collection avec From Date, To Date, Start Time et End Time. Vous la parcourez avec une boucle, comme n'importe quelle autre collection.
Le piège qui fait perdre une heure
$GlobalConstant.True ou $GlobalConstant.False sur les cases qui vous importent.
Vous voulez que le composant enregistre lui-même les enregistrements ? Transmettez l'Id de l'enregistrement parent dans Parent Record Id et il crée un enregistrement enfant par date. Laissez-le vide pour parcourir la sortie et créer les enregistrements à votre façon.
Choisissez la forme des enregistrements avant de construire
Les mêmes neuf dates sélectionnées peuvent donner neuf enregistrements, ou quatre si les jours consécutifs forment des plages, ou un enregistrement parent avec des sous-blocs. Chaque option convient à un rapport différent. Décidez-le avant de construire le flux, car en changer ensuite implique de migrer les données en plus de modifier le flux.
Un vrai sélecteur multi-dates dans votre prochain flux
Cliquez sur les dates dans la démo en direct, puis suivez la prise en main pour ajouter le composant à un écran de flux.
- $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