Creare un selettore di fasce orarie con calendario in Salesforce
Salesforce ti dà un selettore di date e un campo ora. Non ti dà una griglia di fasce selezionabili. Ecco cosa serve davvero per un selettore di fasce orarie in Salesforce, e come averlo senza svilupparlo.
Un selettore di fasce orarie è un'interfaccia precisa: un calendario in cui scegli il giorno e, sotto, una griglia che divide quella giornata in intervalli prenotabili, con quelli occupati ben visibili come non disponibili. Lo riconoscono tutti, perché lo usa ogni sito di prenotazione su internet. Salesforce non ne include uno.
Cosa ti dà davvero Salesforce
Un campo Data/ora standard appare come un campo data più un menu a discesa per l'ora. È un controllo di modulo, e non sa cos'altro è prenotato. Niente impedisce a un utente di scegliere una fascia già presa, perché il campo non sa che esistono altri record. Il controllo arriva dopo, in una regola di convalida o in un flusso, quando l'utente ha già fatto la sua scelta.
Ecco la lacuna. Un selettore di fasce orarie interroga i record esistenti prima che l'utente scelga, e propone solo ciò che è libero.
Cosa deve fare un vero selettore di fasce orarie
| Requisito | Campi standard | Con MultiDatePick |
|---|---|---|
| Dividere la giornata in intervalli | Nessun concetto di intervallo | Qualsiasi intervallo (di solito 15, 30 o 60 minuti) |
| Conoscere l'orario di lavoro | Qualsiasi orario è valido | Ora minima e massima, oppure l'orario lavorativo di ogni risorsa |
| Mostrare cosa è occupato | Non viene mostrato nulla | Prenotazioni esistenti disegnate sulla griglia |
| Più persone per fascia | Non esprimibile | Capacità con badge prenotati su capacità in tempo reale |
| Orari diversi in giorni diversi | Un campo, un valore | Consenti orari diversi per data |
| Bloccare una sovrapposizione al salvataggio | Solo con logica personalizzata | Conflict Behavior (Comportamento conflitto): blocca, salta o consenti |
Perché svilupparlo da soli è più lavoro di quanto sembri
La grafica è la parte facile. Queste sono le parti che nessuno mette in preventivo:
Interrogare le prenotazioni
In modo efficiente, senza sforare i governor limit quando qualcuno apre una vista di due mesi.
Calcolo delle sovrapposizioni
Si complica appena le prenotazioni hanno durate diverse.
Fusi orari
Il fuso orario dell'utente e quello del record non sempre coincidono.
Accessi concorrenti
Due persone che guardano la stessa fascia libera nello stesso momento.
Sicurezza a livello di campo
Il componente deve rispettare ciò che l'utente può vedere.
Accessibilità
Una griglia di div cliccabili non è navigabile da tastiera di default.
L'accessibilità richiede più attenzione di tutto. Una griglia di fasce orarie ha bisogno di vera semantica ARIA di griglia, navigazione con i tasti freccia e uno stato comunicato non solo dal colore. È la parte che quasi tutti gli sviluppi interni saltano, ed è quella su cui una revisione di procurement fa domande.
Raggruppare le fasce perché si leggano davvero
Una giornata dalle 9 alle 17 a intervalli di 15 minuti fa 32 fasce. In un elenco piatto è un muro. Raggrupparle per periodo (mattina, pomeriggio, sera) le trasforma in tre blocchi brevi. Aiuta soprattutto quando a scegliere è un cliente dal telefono.
Quando il calendario non serve proprio
A volte la data è già implicita. Nella pagina record di un appuntamento che ha già una data, un calendario mensile è superfluo. Time Grid Only (Solo griglia oraria) elimina il calendario e mostra solo la griglia delle fasce per quella data, presa da un campo del record che ospita il componente o impostata direttamente.
Le impostazioni che compongono il selettore
Ognuna è un campo della configurazione guidata. Niente di tutto ciò richiede codice.
| Impostazione | Cosa fa | Nome API |
|---|---|---|
| Intervallo di tempo (Time Slot Interval, minuti) | La durata di ogni fascia. Un numero qualsiasi di minuti. | timeInterval |
| Ora minima / Ora massima (Earliest Time / Latest Time) | La finestra coperta dalla griglia nel componente Dates & Times. | minTime, maxTime |
| Campo inizio / fine orario lavorativo (Business Hours Start / End Field) | Orario di lavoro per singola risorsa nel componente Booking. | businessHoursStartField |
| Campo capacità (Capacity Field) | Quante prenotazioni può accogliere una risorsa per fascia. | capacityField |
| Raggruppa fasce orarie per periodo (Group Time Slots by Period) | Sezioni Mattina, Pomeriggio e Sera. | groupTimeSlotsByPeriod |
| Comportamento conflitto (Conflict Behavior) | Blocca, salta o consenti una sovrapposizione al salvataggio. | conflictBehavior |
| Solo griglia oraria (Time Grid Only) | Solo la griglia delle fasce, per una data implicita. | timeGridOnly |
Domande frequenti
Cos'è un selettore di fasce orarie con calendario?
Un calendario in cui scegli un giorno, con sotto una griglia che divide la giornata in intervalli prenotabili. Le fasce già occupate risultano non disponibili, così si scelgono solo orari liberi.
Salesforce ha un selettore di fasce orarie?
Non per i tuoi oggetti. Un campo Data/ora standard è un campo data con un menu a discesa per l'ora, e non vede gli altri record. MultiDatePick aggiunge un selettore di fasce orarie che legge le prenotazioni esistenti al caricamento del calendario e propone solo ciò che è libero.
Le fasce orarie possono avere qualsiasi durata?
Sì. L'intervallo è un numero qualsiasi di minuti. I più comuni sono 15, 30 o 60 minuti, ma una fascia da 45 minuti per un colloquio funziona allo stesso modo.
Servono Apex o uno sviluppatore per aggiungere un selettore di fasce orarie?
No. La configurazione guidata scrive la configurazione, e il componente si inserisce in una pagina record, una pagina app, un sito Experience Cloud o un flusso su schermo (Screen Flow) impostando Config Name. Non c'è codice da scrivere.
Il tuo selettore di fasce orarie Salesforce, pronto da configurare
Scegli una fascia libera nella demo live, poi segui Per iniziare per averne uno nella tua organizzazione.
- $20/utente/mese, tutte le funzionalità
- Prova gratuita di 30 giorni, senza carta
- 100% nativo Salesforce
- Senza Apex
- Presto disponibile su Salesforce AppExchange