Guia do usuário do MultiDatePick
Cada componente, configuração e armadilha, na ordem em que um administrador os encontra. Sem necessidade de Apex.
Sumário
- Os três componentes
- Formatos de registro
- Passo a passo do Assistente de Configuração
- Conjuntos de permissões e acesso
- Salvar com clique vs. salvar pelo fluxo
- Cores de status e modo de edição
- Visualizações: cinco layouts, um componente
- Reserva de recursos e capacidade
- Limitar o que os usuários selecionam
- Bloquear datas, horários e recursos
- Páginas públicas para convidados
- Armadilhas comuns (perguntas frequentes)
- Receitas de fluxo
- Mapeamento de objetos e campos
- Referência de todas as propriedades
- Segurança e acessibilidade
- Dúvidas / bugs
1. Os três componentes: quando usar cada um
O MultiDatePick traz três Lightning Web Components sobre uma mesma base. Escolha o que combina com os seus dados.
Date
Nos construtores: MultiDatePick - Dates
Escolha várias datas de uma vez. Ideal para confirmações de presença, frequência, folgas, datas bloqueadas e calendários de feriados.
Date Time
Nos construtores: MultiDatePick - Dates & Times
Datas com horários. Ideal para aulas, agendamentos, blocos de treinamento e turnos.
Booking
Nos construtores: MultiDatePick - Resource Booking
Datas, horários e um recurso. Ideal para salas, equipamentos, pessoas e tudo o que tem capacidade.
Comparação de recursos
Os recursos se somam. Tudo o que o Date tem, o Date Time e o Booking também têm. O Date Time acrescenta horários. O Booking acrescenta recursos e capacidade.
| Recurso | Date | Date Time | Booking |
|---|---|---|---|
| Disponível nos três componentes | |||
| Seleção de datas | ✓ | ✓ | ✓ |
| Cinco visualizações | ✓ | ✓ | ✓ |
| Cores de status | ✓ | ✓ | ✓ |
| Datas bloqueadas | ✓ | ✓ | ✓ |
| Carregar registros existentes | ✓ | ✓ | ✓ |
| Modo de edição | ✓ | ✓ | ✓ |
| Padrões recorrentes | ✓ | ✓ | ✓ |
| Só Date Time e Booking | |||
| Horários | ✓ | ✓ | |
| Registros de sub-bloco | ✓ | ✓ | |
| Só Booking | |||
| Seletor de recurso | ✓ | ||
| Selos de capacidade | ✓ | ||
2. Formatos de registro: quando usar cada um
O formato de registro define como uma seleção vira registros. Ele sai de três escolhas independentes, e todas as combinações funcionam.
Date: só datas, sem horários.
Date Time / Booking: cada registro tem hora inicial e final.
Extra: ative Consolidate Time Span (Consolidar Intervalo de Horário) para ter um registro pai cobrindo todo o intervalo de horário, mais um sub-bloco filho para cada lacuna dentro dele.
Nenhum: Date, Date Time ou Booking sem recurso.
Recurso único: Booking com uma lista suspensa de recursos.
Vários recursos: Booking com caixas de seleção, um registro por recurso marcado.
Por clique: cada data selecionada vira um registro. Cinco cliques, cinco registros.
Por intervalo: datas seguidas viram um único registro com início e fim. Defina o End Date Field API Name.
O Assistente de Configuração dá nome a seis formatos: um registro por data, um por intervalo de datas, um por bloco de horário, pai mais sub-blocos, recurso único e vários recursos.
Exemplos práticos: responda às 3 perguntas
Responda a três perguntas por cenário e você chega ao formato. O Assistente de Configuração faz as mesmas três.
Pedido de folga
Você precisa de horários? Não, só datas.
Você precisa de um seletor de recurso? Não.
Datas seguidas devem virar um registro só? Sim. Uma folga de segunda a sexta deve ser UM registro.
→ Por intervalo: um registro, de segunda a sexta.
Reserva de sala de reunião
Você precisa de horários? Sim, cada reserva tem início e fim.
Você precisa de um seletor de recurso? Sim, para escolher uma sala.
Datas seguidas devem virar um registro só? Não, cada reserva é um registro.
→ Recurso único: um registro por data × bloco de horário, vinculado à sala.
Treinamento em 3 salas
Você precisa de horários? Sim, o mesmo início e fim todos os dias.
Você precisa de um seletor de recurso? Sim, várias salas com caixas de seleção.
Datas seguidas devem virar um registro só? Sim, vai de segunda a sexta.
→ Vários recursos, por intervalo: um registro por sala cobrindo a semana inteira.
Treinamento de dia inteiro com pausa para o almoço
Você precisa de horários? Sim, das 9h às 17h com uma pausa para o almoço.
Você precisa de um seletor de recurso? Não.
A pausa precisa ficar registrada? Sim, como um registro filho próprio.
→ Pai mais sub-blocos: um pai das 9h às 17h e um sub-bloco para o almoço.
A grade: todas as combinações
Escolha a linha conforme a sua necessidade de horário e recurso. A coluna depende de o End Date Field API Name estar definido ou não. Todas as células são configurações válidas.
| Horário + recurso | Por clique (sem End Date Field) |
Por intervalo (com End Date Field) |
|---|---|---|
| Date Sem horário. Componente Date. |
Um registro por data 1 data → 1 registro. Use para: confirmações de presença, frequência, check-ins diários. |
Um registro por intervalo de datas Datas seguidas → 1 registro com início e fim. Use para: folgas, viagens, hospedagens de várias noites. |
| Date Time Um bloco de horário por registro. Componente Date Time. |
Um registro por bloco de horário 1 data × 1 bloco de horário = 1 registro. Use para: folhas de ponto, partes de turno, blocos de treinamento. |
Intervalo com o mesmo bloco de horário. Datas seguidas com os mesmos horários → 1 registro. Use para: treinamentos de vários dias com o mesmo horário todo dia. |
| Date Time + Consolidar Intervalo de Horário Registro pai mais sub-blocos filhos para as lacunas |
Pai mais sub-blocos Um pai cobre todo o intervalo de horário. Cada lacuna dentro dele vira um sub-bloco filho. Use para: treinamentos com pausa para o almoço, rotas de campo com deslocamento entre paradas. |
|
| Booking, recurso único Uma lista suspensa de recursos. Componente Booking. |
Recurso único 1 registro por data × bloco de horário, vinculado ao recurso. Use para: salas de reunião, agenda de instrutores. |
Intervalo com recurso único. Datas seguidas em um recurso → 1 registro por intervalo. Use para: hospedagens de várias noites em um quarto, empréstimo de equipamento por vários dias. |
| Booking, vários recursos Caixas de seleção de recursos (Permitir Vários Recursos) |
Vários recursos 1 registro por recurso × data × bloco de horário. Use para: reuniões de equipe em paralelo, treinamento em várias salas. |
Intervalo com vários recursos. Datas seguidas em N recursos → N registros, um por recurso. Use para: uma semana de treinamento em 3 salas ao mesmo tempo. |
| Booking + Consolidar Intervalo de Horário Reserva pai mais sub-blocos filhos para as lacunas |
Reserva pai mais sub-blocos. Um recurso reservado o dia todo, com as pausas registradas. Use para: equipamentos de laboratório com janelas de manutenção. |
|
Resumindo: qualquer combinação das três escolhas funciona. Se o seu cenário não tem nome na lista, defina cada escolha separadamente e o componente faz o resto.
3. Passo a passo do Assistente de Configuração
O Assistente de Configuração salva uma configuração uma única vez. Digite o nome dela no Config Name de qualquer página ou tela de fluxo e pronto: aquele local passa a usá-la. Altere a configuração e todos os locais acompanham.
- 1 Nome & Tipo
- 2 Objeto & Campos
- 3 Campos de Tempo
- 4 Status & Exibição
- 5 Revisar & Salvar
Escolha por onde começar
A aba Criar Nova oferece dois caminhos. Me guie pelo processo faz três perguntas e escolhe o componente e o formato. Configurar todas as propriedades abre todas as opções. Ao lado há mais duas abas: Configurações Existentes, para editar uma configuração salva, e Importar, para colar uma da Config Library.
Etapa 1: Nome & Tipo
Escolha o componente (Date, Date Time ou Booking) e dê um nome à configuração. É esse nome que você digita depois no Config Name. Esta etapa também define as visualizações: a padrão, quais o seletor oferece e as opções de Linha do tempo e Agenda.
Etapa 2: Objeto & Campos
A etapa principal. Escolha o objeto que guarda os registros, o campo de data dele e o campo de relacionamento com o registro pai. Campos opcionais acrescentam intervalos, recursos, capacidade, sub-blocos e datas bloqueadas. Nas configurações de Booking, o objeto de recurso, o campo de capacidade e o horário comercial também ficam aqui.
Etapa 3: Campos de Tempo
Só Date Time e Booking. Mapeie os campos de hora inicial e final e depois defina o Intervalo de Horário (qualquer intervalo funciona; 15, 30 ou 60 minutos são os mais comuns), a hora mais cedo e a mais tarde, o modo de exibição e o que acontece em caso de conflito.
Etapa 4: Status & Exibição
Campo de status e cores, status a ocultar, status que os usuários podem escolher, campos ao passar o mouse, modo de edição, nome dos registros, rótulos dos botões, tamanho do calendário e limites como Max Dates Allowed (Máximo de Seleções).
Etapa 5: Revisar & Salvar
Confira o resumo, teste a visualização ao vivo e clique em Salvar Configuração. O assistente implanta a configuração para você em 30 a 60 segundos. No fim, se quiser, adicione uma descrição.
Configurações Existentes e Importar
As configurações salvas aparecem em Configurações Existentes: clique em uma para editar ou exportar. A aba Importar aceita o JSON de qualquer cartão da Config Library ou uma exportação de outra organização.
4. Conjuntos de permissões e acesso
O pacote traz quatro conjuntos de permissões. Atribua-os em Configuração, Conjuntos de permissões.
| Conjunto de permissões | Para quem | Assistente de Configuração | Usar calendários |
|---|---|---|---|
| MultiDatePick - Setup | Os administradores que criam configurações | ✓ Sim | Não |
| MultiDatePick - User | Todos que usam os calendários | Não | ✓ Sim |
| MultiDatePick - All Access | Administradores que criam e usam calendários | ✓ Sim | ✓ Sim |
| MultiDatePick - Guest | O usuário convidado de um site público do Experience Cloud | Não | ✓ Ver e reservar |
Os componentes rodam com as permissões de cada usuário, então os usuários também precisam de acesso aos seus objetos e campos:
- Objetos: Ler e Criar no objeto em que os registros são salvos, mais Ler em qualquer objeto de recurso, fechamento ou filho que o calendário lê.
- Campos, leitura: todo campo que o calendário mostra (data, status, campos ao passar o mouse).
- Campos, edição: todo campo que ele grava (data, horários, status, segunda lista de opções, campo de nome, o lookup para o registro pai). Um campo que o usuário não pode editar faz o salvamento falhar, mesmo que a leitura funcione.
- Registros referenciados: pelo menos Ler no registro pai e no recurso para os quais o novo registro aponta.
Cada mensagem de erro e sua causa estão em Solução de problemas: erros de acesso. Sites para convidados precisam de alguns passos extras: veja Páginas públicas para convidados.
5. Salvar com clique vs. salvar pelo fluxo
Há duas formas de salvar. Escolha a que combina com o local de uso.
Salvar com clique
O próprio componente grava os registros. Preencha quatro configurações e aparece o botão Salvar dele. Clique e os registros filhos são criados. Sem elementos de fluxo, sem código.
Use em: páginas de registro, páginas de aplicativo, páginas iniciais, sites do Experience Cloud e telas de fluxo com um registro pai.
Salvar pelo fluxo
O componente entrega a seleção ao seu fluxo. Use a ação incluída Parse Date Entries from JSON e depois seus próprios elementos Loop e Criar registros.
Use em: telas de fluxo em que você quer controle total: aprovações, registros condicionais, validações extras.
Salvar com clique: as quatro configurações
O Assistente de Configuração preenche estas. Quando as quatro têm valor, o botão Salvar aparece.
| Configuração | O que contém | Nome da API |
|---|---|---|
| Child Object API Name | O objeto em que os registros são salvos | relatedObjectApiName |
| Date Field API Name | O campo de data nesse objeto | dateFieldApiName |
| Relationship Field API Name | O lookup de volta para o registro pai | relationshipFieldApiName |
| Parent Record Id ou Static Parent Record Id | O registro pai. Em uma página de registro, é preenchido automaticamente. Em um fluxo, associe o Parent Record Id. Em páginas de aplicativo, iniciais e do Experience Cloud, digite o Id em Static Parent Record Id. | recordId / staticRecordId |
Qual registro pai uma página usa, e quando é melhor escolhê-lo em um fluxo, está explicado em Páginas de aplicativo, iniciais e do Experience Cloud.
Salvar pelo fluxo: as saídas
Deixe as quatro configurações em branco. O botão Salvar some e a seleção sai por estas saídas do fluxo:
| Saída | Conteúdo | Componentes |
|---|---|---|
| Selected Dates (Output) | Uma coleção de texto com datas (YYYY-MM-DD) | Date, Date Time |
| Date Ranges JSON (Output) | Datas seguidas agrupadas em intervalos | Date, Date Time |
| Dates With Times JSON (Output) | Cada data com seus horários | Date Time |
| Successful Bookings Count / Conflict Dates | Resultados depois que o Booking salva sozinho | Booking |
Passe o JSON para Parse Date Entries from JSON. Ela retorna uma lista que você pode percorrer em um Loop, com data inicial, data final, hora inicial, hora final e Id do recurso em cada item. Passo a passo: Receitas de fluxo.
Salvar só adiciona
O salvamento por clique só cria registros novos. Desmarcar uma data nunca exclui um registro salvo, então um clique errado não apaga dados. Para alterar ou remover registros, use o modo de edição ou a lista relacionada.
6. Cores de status e modo de edição
Cores de status e filtros
Dê cor aos registros com base em qualquer lista de opções do seu objeto, oculte alguns valores e limite o que os usuários finais podem escolher.
| Configuração | O que faz | Nome da API |
|---|---|---|
| Status Field | A lista de opções que define as cores, por exemplo Confirmed / Tentative / Cancelled. | statusField |
| Status Colors | Uma cor por valor, como Confirmed:#22C55E, Tentative:#fbbf24. Deixe em branco para usar uma paleta automática. | statusColors |
| Status Color Display | Onde as cores aparecem: calendário, grade ou ambos. Deixe vazio para uma página de cliente limpa, sem cores. | statusColorDisplay |
| Ignored Statuses | Oculta os registros com esses valores (por exemplo No-Show,Cancelled) do calendário e da contagem de capacidade. | hideBookingsWithStatus |
| Selectable Statuses | Limita os valores que o usuário final pode escolher, por exemplo só Requested, enquanto a equipe interna vê todos. | selectableStatuses |
Modo de edição
Ative Enable Edit Mode (Ativar Modo de Edição) e aparece o botão Editar. No modo de edição, os usuários podem:
- Ver os registros existentes como cartões com data e status
- Clicar em datas para incluir os registros delas na edição
- Alterar data, horários, recurso ou status, e o registro é atualizado
- Excluir com confirmação em dois cliques, para nada sumir por acidente
7. Visualizações: cinco layouts, um componente
Todo componente desenha cinco layouts. Eles leem os mesmos registros pelos mesmos mapeamentos de campos, seguem as mesmas regras de conflito, datas bloqueadas e horário comercial, e salvam do mesmo jeito. Trocar de visualização muda a aparência dos registros, nunca o que eles significam.
As cinco, e a pergunta que cada uma responde
| Exibição (View) | A pergunta | Layout | Permite gravar? |
|---|---|---|---|
| Calendário | O que acontece no dia 14? | Um mês por vez, com cores de status por dia. | Sim. É a padrão. |
| Linha do tempo | Qual recurso está livre, e quando? | Recursos na lateral, datas no topo. Registros de vários dias aparecem como uma única barra. | Sim |
| Semana | Quem está livre na quinta às 14h? | Sete dias na horizontal, horário comercial na vertical. Arraste por dias e horas ao mesmo tempo. | Sim |
| Ocupação | Quem está acima da capacidade? | Mapa de calor da capacidade usada, por recurso e por dia. | Não, somente leitura |
| Agenda | O que vem a seguir? | Uma lista dos próximos 60 dias, em ordem. | Não, somente leitura |
Configurações
| Configuração | Padrão | O que faz |
|---|---|---|
| Viewview | Calendário | O layout com que o componente abre. |
| Available ViewsavailableViews | em branco | As visualizações que o seletor oferece, por exemplo calendar,timeline,agenda. Em branco, oferece as cinco. A visualização padrão sempre entra, então liste só as extras. |
| Timeline Window (Days)timelineWindowDays | 14 | Quantos dias a Linha do tempo mostra de uma vez. Com um mês inteiro, cada reserva fica com uns vinte pixels de largura e o rótulo é cortado. Use 0 para o mês inteiro. As setas internas avançam uma janela; as externas, um mês. |
| Resource RowsresourceViewFilter | all | booked desenha só os recursos com reserva no período visível. É a melhor forma de encurtar uma lista longa, porque uma linha vazia não informa nada. Se não houver nenhuma reserva, volta a mostrar todos os recursos. |
| Max View ResourcesmaxViewResources | 0 (todos) | Limita quantas linhas de recurso a Linha do tempo e a Ocupação desenham, começando pelos mais ocupados. Tudo continua sendo contado. Prefira Resource Rows, que só oculta linhas vazias. |
| Agenda FieldsagendaFields | em branco | Campos extras em cada linha da Agenda, até quatro. Em branco, reutiliza os Hover Popover Fields (Campos ao Passar o Mouse). Data, hora e nome já estão na linha. |
| Capacity FieldcapacityField | em branco | Não é uma configuração de visualização, mas a Ocupação precisa dele para mostrar porcentagens em vez de números absolutos. |
Uma visualização diferente por página
A visualização é uma configuração de cada local de uso, então os mesmos registros podem aparecer de jeitos diferentes em cada lugar. Uma instalação, um conjunto de mapeamentos de campos.
| Local de uso | Exibição (View) | Visualizações Disponíveis (Available Views) |
|---|---|---|
| Página de entrevistas do recrutador | Semana | calendar,agenda |
| Página de reserva de salas da administração predial | Calendário | timeline,utilization |
| Escala do gerente de turnos | Linha do tempo | week,agenda |
| Painel de parede da operação | Agenda | utilization,timeline |
| Página pública do Experience Cloud | Calendário | em branco, ou uma lista curta |
O modo de edição funciona em todas as visualizações
Com Enable Edit Mode ativado, o botão de edição aparece em todas as visualizações. Clique em um registro na Linha do tempo, na Semana ou na Agenda para incluí-lo na edição, como faria com uma data no calendário mensal. Uma alteração de status em massa pela Linha do tempo funciona igual à feita pelo calendário.
Linha do tempo: linhas recolhidas
Quando um recurso tem reservas sobrepostas, a linha dele se recolhe em uma única faixa com um selo N ao mesmo tempo. Um botão de expandir abre uma faixa por reserva. Linhas recolhidas continuam aceitando arrastar, passar o mouse e clicar.
Linha do tempo: arraste para reagendar
Com Enable Edit Mode ativado, as barras da Linha do tempo podem ser arrastadas. Pegue pelo meio para mover uma reserva para outros dias. Pegue por uma borda para mudar o início ou o fim. A barra mostra onde vai cair e salva quando você solta. No zoom Dia, os mesmos gestos mudam os horários.
Agende pessoas, não só salas
Resource Object API Name (Objeto de Recurso) aceita qualquer objeto. Defina como User e a Linha do tempo vira uma escala de equipe, a Semana uma grade de turnos e a Ocupação um painel de capacidade da equipe.
- O User não tem campo de capacidade padrão. Crie um personalizado (por exemplo Daily Capacity) para ver a Ocupação em porcentagens.
- Mapeie Business Hours Start Field (Campo de Início do Horário Comercial) e Business Hours End Field (Campo de Fim do Horário Comercial) para campos do User e a grade da Semana segue o horário de cada pessoa.
A Config Library tem dois exemplos prontos: Planejamento de Capacidade da Equipe e Escala de Turnos da Equipe.
8. Reserva de recursos e capacidade (componente Booking)
Recurso único
Os usuários escolhem um recurso em uma lista suspensa. A grade de horários carrega as reservas e a capacidade desse recurso.
Vários recursos
Ative Allow Multiple Resources (Permitir Vários Recursos) e a lista suspensa vira caixas de seleção. A grade mostra só os horários livres em todos os recursos marcados, e o Salvar reserva todos de uma vez.
Capacidade
Permita que várias reservas dividam um horário, com selos 3/5 ao vivo. Um horário lotado para de aceitar reservas.
| Configuração | O que faz | Nome da API |
|---|---|---|
| Capacity Field | Um campo numérico no recurso, por exemplo Capacity = 5. | capacityField |
| Show Availability Count | Mostra os selos X/Y. | showAvailabilityCount |
| Capacity Aggregation | Combined (padrão) soma reservas e capacidades dos recursos marcados: duas salas de 5 mostram 0/10. Distinct conta uma única vez um evento reservado em vários recursos e usa a maior capacidade individual: uma aula em 4 salas mostra 1/5, não 4/20. | capacityAggregation |
Conflitos
Conflict Behavior (Comportamento de Conflito) define o que acontece quando um horário escolhido já está ocupado. Conflict Look-Ahead Days (Dias de Antecedência para Conflitos) define até quantos dias à frente verificar (padrão 360).
| Valor | O que acontece | Ideal para |
|---|---|---|
| Bloquear (padrão) | Um horário ocupado não pode ser escolhido, e o salvamento para com os conflitos destacados. | A maioria das páginas de reserva |
| Ignorar | Salva os horários livres e pula os ocupados. As datas puladas voltam em Conflict Dates (Output). | Pegar o que ainda estiver livre em muitas datas |
| Permitir | Sem verificação de conflito. As reservas podem passar da capacidade. | Overbooking proposital |
Um fechamento sempre prevalece. Nada é salvo em um horário bloqueado, nem com Permitir.
9. Limitar o que os usuários selecionam
Limite quanto uma pessoa pode escolher, por datas ou por horários.
| Configuração | O que faz | Nome da API |
|---|---|---|
| Max Dates Allowed Booking: Max Dates Per Booking | Máximo de datas que um usuário pode escolher. 0 significa sem limite. | maxSelections |
| Max Time Slots | Máximo de horários no total, somando todas as datas. 0 significa sem limite. Use 1 para um agendamento por pessoa. | maxTimeSlotSelection |
| Earliest / Latest Selectable Date | Deixa em cinza as datas fora de um período fixo. | minDate / maxDate |
| Book Up To / Minimum Notice | Uma janela móvel: até N dias à frente, com pelo menos N horas de antecedência. | maxDaysAhead / minNoticeHours |
| Buffer Between Bookings | Reserva um tempo livre de preparação depois de cada reserva. | bufferMinutes |
| Add to Calendar | Um arquivo .ics com tudo o que acabou de ser salvo, depois do Salvar. | showAddToCalendar |
| Allow Past Dates | Desativado, só permite hoje em diante. Vem ativado no Date e no Date Time e desativado no Booking. | allowPastDates |
10. Bloquear datas, horários e recursos (fechamentos)
Qualquer calendário pode ler fechamentos de outro objeto e deixar em cinza as datas, horários ou recursos que eles cobrem, para que os usuários só reservem quando você está aberto. Aponte algumas configurações para o objeto de fechamentos e o componente faz o resto. Bloqueios de dia inteiro funcionam nos três componentes. Bloqueios de horário e de recurso precisam da grade de horários do Date Time ou do Booking.
Bloquear vs. ocultar: qual é a diferença?
Parecem iguais, mas fazem o oposto. Bloquear tira disponibilidade: o horário aparece, mas não pode ser reservado. Ocultar tira registros da tela, o que libera os horários deles.
| Bloquear (fechamentos) | Ocultar (por status) | |
|---|---|---|
| O que controla | Quais datas, horários e recursos podem ser reservados | Quais registros salvos aparecem |
| Configuração | Blocked Dates Object (Objeto Fonte de Datas Bloqueadas) e seus campos de data, hora e recurso | Ignored Statuses |
| Definido por | Uma lista de fechamentos ou feriados: um objeto próprio ou o seu objeto de reservas filtrado | Um valor de status nos próprios registros |
| O que os usuários veem | O horário está lá, mas riscado, em cinza e sem clique | O registro some do calendário |
| Efeito na capacidade | Tira disponibilidade | Libera disponibilidade: o registro oculto deixa de contar |
| Os dados | Não existe reserva; você só marca o horário como indisponível | Os registros continuam existindo no Salesforce |
| Use para | Feriados, janelas de manutenção, uma sala ou região fechada | Reservas Cancelled ou Rejected que não devem poluir a grade nem contar na capacidade |
- Ignored Statuses (Status ignorados) = Cancelled → a reserva some e o horário dela fica livre.
- Blocked Dates Object = seu objeto de reservas, filtrado por Status = Cancelled → a reserva bloqueia a data dela para ninguém reservar de novo.
As configurações de datas bloqueadas
| Configuração | O que faz | Nome da API |
|---|---|---|
| Blocked Dates Object | O objeto com os fechamentos, como um objeto Office Closure ou o seu objeto de reservas. Defini-lo ativa o bloqueio. | blockedDatesSourceObject |
| Blocked Dates Date Field | O campo de data nesse objeto. | blockedDatesDateField |
| Blocked Dates Start / End Time Field | Campos de hora opcionais. Defina os dois para bloqueios de parte do dia; deixe em branco para o dia inteiro. Date Time e Booking. | blockedDatesStartTimeField / blockedDatesEndTimeField |
| Blocked Dates Resource Field | Lookup opcional que restringe um fechamento a um recurso. Em branco, o fechamento vale para todos os recursos. Booking. | blockedDatesResourceField |
| Blocked Dates Filter Field / Value | Escopo opcional, como Region = North ou Status = Cancelled. É assim que uma única tabela de fechamentos atende vários calendários. | blockedDatesFilterField / blockedDatesFilterValue |
Três níveis de bloqueio
- Dia inteiro: um fechamento sem horários deixa a data inteira em cinza. Nos três componentes. Uma data fechada continua fechada mesmo que já tenha reservas.
- Parte do dia: um fechamento com hora inicial e final bloqueia só aqueles horários. O resto do dia continua disponível. Os horários bloqueados aparecem quando uma data é selecionada.
- Um recurso: um fechamento que aponta para um recurso fecha só esse recurso. Na visualização de um recurso, o horário aparece riscado. Na visualização combinada, ganha uma pequena marca no canto e continua disponível nos recursos abertos.
Usa a grade de horários? Então você quer bloqueios de parte do dia. Bloqueios de dia inteiro combinam com seletores só de data.
Dois modelos para o objeto de fechamentos
- O mesmo objeto, marcado por status: aponte o Blocked Dates Object para o seu objeto de reservas e filtre Status = Cancelled, assim as reservas canceladas também funcionam como fechamentos. É o mais simples, mas todos os calendários desse objeto os compartilham. Veja a configuração Agendamento de Atendimentos com Feriados na Config Library.
- Um objeto só para fechamentos: um objeto Office Closure com data, hora inicial e final opcionais, um campo Region e um lookup opcional para recurso. Cada calendário filtra pela sua região, e um fechamento pode valer para um único recurso. Veja a configuração Fechamentos de Recursos por Horário.
Para que as pessoas bloqueiem o próprio horário (um responsável bloqueando uma manhã, por exemplo), coloque um componente Date Time que salva no objeto de fechamentos em uma página ou site interno.
Como os horários bloqueados se comportam
- Aparência: um horário totalmente fechado aparece riscado e em cinza. Um horário fechado só para alguns dos recursos escolhidos ganha uma marca no canto.
- Seleção: um horário totalmente fechado não aceita clique nem arrasto.
- Salvar: nada é salvo em um recurso, data e horário fechados. Com vários recursos, só o fechado fica de fora; os abertos são reservados normalmente.
Uma tabela de fechamentos, vários calendários
Dê ao objeto de fechamentos um campo de etiqueta (Region, Location, Building) e coloque o mesmo campo nos seus recursos. Cada calendário então usa Resource Filter Field / Value para mostrar os próprios recursos e Blocked Dates Filter Field / Value para ler os próprios fechamentos.
11. Páginas públicas para convidados (Experience Cloud)
Coloque um componente em um site do Experience Cloud e qualquer pessoa pode reservar sem fazer login. Conclua os cinco passos antes de testar como convidado.
- Permissões de objeto. Dê ao usuário convidado do site Ler, mais Criar se os convidados enviam dados, em cada objeto. O Salesforce nunca deixa convidados editarem ou excluírem registros, então mantenha as páginas de edição, cancelamento e exclusão para usuários logados.
- Segurança em nível de campo em todo campo que o componente usa, inclusive os campos de horário comercial do recurso e os campos de hora dos fechamentos. Um único campo faltando derruba a consulta de recursos ou de fechamentos.
- Uma regra de compartilhamento para convidados (Ler) para que o convidado veja os registros. O padrão externo para toda a organização do objeto precisa ser Privado para a regra valer. Uma regra implantada como metadados precisa de um clique em Recalcular em Configuração, Configurações de compartilhamento.
- O conjunto de permissões MultiDatePick - Guest no usuário convidado do site. Ele dá o acesso às classes Apex pelas quais o componente carrega os dados.
- Ative o site. Publicar e ativar são passos separados.
- Qual registro os convidados veem: uma página pública usa o Static Parent Record Id, então todos os convidados reservam no mesmo registro pai (um escritório, local ou recurso). Para um registro por visitante, use um fluxo com um parâmetro de URL. Calendários realmente individuais exigem usuários logados.
- Contatos e contas: o Salesforce restringe muito o acesso de convidados a eles. Faça as reservas de convidados em um objeto personalizado ou use um site autenticado.
- Vários componentes na mesma página: eles não se sincronizam em tempo real. Inclua um aviso para atualizar entre eles, para que um bloqueio feito em um apareça no seguinte.
Os passos para colocar o componente estão em Páginas de aplicativo, iniciais e do Experience Cloud. Um site completo de exemplo está em Reservas no Experience Cloud.
12. Armadilhas comuns (perguntas frequentes)
Apareceu um aviso, sumiu o botão Salvar ou o calendário está vazio? A Solução de problemas mostra cada mensagem com uma captura de tela e a correção.
- As cores de status não estão sendo aplicadas
- Verifique três coisas. (a) O Status Field (Campo de Status) é exatamente o nome de API da lista de opções? Ele diferencia maiúsculas de minúsculas. (b) O Status Colors (Cores de Status de Reserva) usa o formato
Value:#hex, Value:#hex, sem aspas?'Confirmed':'#22C55E'quebra tudo sem aviso. (c) Os registros têm mesmo um valor nessa lista de opções? - Os registros são salvos com nomes inesperados
- Verifique o Record Name Field (Campo de Nome do Registro): se o campo é curto, nomes longos são cortados. Verifique o Append Date to Record Name (Anexar DateTime ao Nome): quando ativado, a data e o horário selecionados são acrescentados a todos os nomes.
- Como oculto registros Cancelled da grade de capacidade?
- Defina Ignored Statuses como
Cancelled, ou uma lista comoCancelled,Rejected. Eles saem do calendário e da contagem de capacidade. - Qual é a diferença entre bloquear e ocultar?
- Bloquear (fechamentos) mantém uma data, horário ou recurso visível, mas sem permitir reserva: feriados, manutenção, uma sala fechada. Ocultar tira registros como os Cancelled do calendário e da capacidade, o que libera o horário. Veja Bloquear vs. ocultar.
- O botão de edição não aparece
- Ative Enable Edit Mode. É o único requisito, nos três componentes. O Status Field é opcional; ele só acrescenta uma lista de status no editor. Se o botão continuar sumido, a página ou a configuração está com Enable Edit Mode desativado.
- Quero só alguns recursos (salas, não equipamentos)
- Use Resource Filter Field (Campo de Filtro de Recurso) e Resource Filter Value (Valor do Filtro de Recurso). Um valor: campo
Active__c, valortrue. Vários valores (OU):North,South. Vários campos (E): campoType__c;Active__c, valorConference Room;true. - A configuração certa é o Time Display Mode (Modo de Exibição de Horário): Grade ou Dropdown. No modo Grade, todas as datas compartilham a grade. Para um horário diferente por data, escolha Dropdown e ative Allow Different Times Per Date (Permitir Horários Diferentes).
- Como passo do salvamento pelo fluxo para o salvamento com clique?
- Preencha Parent Record Id, Child Object API Name, Date Field API Name e Relationship Field API Name. Remova a ação Parse Date Entries from JSON e o loop que criava os registros. Agora o próprio botão Salvar do componente os grava.
- Aparece uma notificação de erro sem detalhes
- Abra o console de desenvolvedor do navegador e procure linhas que começam com
[MDP:ERROR]. O erro completo sempre fica registrado lá, mesmo quando a notificação é curta.
13. Receitas de fluxo
Tudo aqui é feito no Flow Builder. Sem Apex.
Percorrer as datas selecionadas em um loop
- Adicione uma Tela com o componente Date Time. Deixe em branco as configurações do salvamento com clique.
- Depois da tela, adicione a ação Parse Date Entries from JSON. Passe para ela o Dates With Times JSON (Output).
- Percorra em um loop a lista da ação. Cada item tem data inicial, data final, hora inicial e hora final.
- Dentro do loop, atribua os valores a uma variável de registro e adicione-a a uma coleção. Crie os registros uma única vez, depois do loop.
Levar a primeira e a última data para o registro pai
Quer que o registro pai mostre a data mais antiga e a mais recente dos filhos? Escolha o caminho sem código que combina com os seus dados.
| Seu cenário | Faça isto |
|---|---|
| Relacionamento mestre-detalhes | Crie dois campos de resumo de totalização no registro pai: MIN do campo de data e MAX do campo de data. Pronto. |
| Relacionamento de pesquisa (lookup) | Um fluxo acionado por registro no filho (depois de salvar). Obter registros no objeto filho para o mesmo pai, ordenado por data crescente, só o primeiro registro. Faça o mesmo em ordem decrescente. Atualize a data inicial e a final do pai com as duas datas. |
Mais modelos de fluxo: Guia de fluxo de tela.
14. Mapeamento de objetos e campos
Cada página de componente tem um diagrama completo de mapeamento de objetos e campos:
Os componentes funcionam com qualquer objeto. Os objetos de exemplo do pacote (Schedule, Event, Resource, Sub Block) são só o padrão. Aponte as configurações para os seus próprios objetos, personalizados ou padrão, com os campos certos.
15. Referência de todas as propriedades
Todas as configurações dos três componentes, pelo rótulo que você vê no Lightning App Builder, no Experience Builder e no Flow Builder. O nome de API fica embaixo de cada rótulo.
Todas as propriedades Mais de 100 propriedades Clique para expandir: com busca
| Propriedade | Date | Date Time | Booking | Tipo | Padrão | Descrição |
|---|---|---|---|---|---|---|
| Configuração | ||||||
Config NameconfigName | ✓ | ✓ | ✓ | String | em branco | Opcional: DeveloperName de um registro Config__mdt criado pelo Assistente de Configuração. Quando definido, todas as configurações de campos e objetos dessa configuração são aplicadas como padrão. Propriedades de texto e número definidas aqui substituem a configuração. As caixas de seleção sempre vêm da configuração: uma caixa desmarcada não se distingue de uma que nunca foi definida. |
| Visualizações | ||||||
Viewview | ✓ | ✓ | ✓ | String | calendar | Qual renderizador usar. calendar é a grade mensal (padrão). timeline mostra os recursos como linhas e as datas como colunas. week é uma grade de dias por horas. utilization é um mapa de calor de capacidade, somente leitura. agenda é uma lista cronológica, somente leitura. |
Available ViewsavailableViews | ✓ | ✓ | ✓ | String | em branco | Lista separada por vírgulas das visualizações oferecidas no seletor, por exemplo calendar,timeline,agenda. Deixe em branco para oferecer as cinco. A View padrão acima sempre entra. |
Timeline Window (Days)timelineWindowDays | ✓ | ✓ | ✓ | Integer | 14 | Quantos dias a visualização Linha do tempo mostra de uma vez. Um mês inteiro deixa cada reserva com uns vinte pixels de largura e corta todos os rótulos, por isso o padrão é 14. Use 0 para mostrar o mês inteiro. |
Timeline ZoomtimelineZoom | ✓ | ✓ | ✓ | String | week | Zoom inicial da visualização Linha do tempo: day (as horas de um dia), week (a Timeline Window) ou month. Os usuários podem mudar o zoom enquanto visualizam. |
Timeline Group By FieldtimelineGroupByField | ✓ | ✓ | ✓ | String | em branco | Nome de API de um campo do objeto de recurso (por exemplo Building__c) para agrupar as linhas da Linha do tempo sob cabeçalhos com uma faixa de capacidade. Deixe em branco para uma lista única, sem grupos. |
Max View ResourcesmaxViewResources | ✓ | ✓ | ✓ | Integer | 0 | Máximo de linhas de recurso que as visualizações Linha do tempo e Ocupação desenham, começando pelos mais ocupados. Evita que uma lista grande de recursos transforme qualquer uma delas em um paredão ilegível. |
Agenda FieldsagendaFields | ✓ | ✓ | ✓ | String | em branco | Campos separados por vírgulas mostrados em cada linha da visualização Agenda, depois do nome do registro. Deixe em branco para reutilizar os campos ao passar o mouse. Os campos de data, hora e nome do registro são ignorados automaticamente, porque a linha já os mostra. |
Resource RowsresourceViewFilter | ✓ | ✓ | ✓ | String | all | Quais recursos ganham uma linha na Linha do tempo e na Ocupação. all desenha todos os recursos; booked desenha só os que têm reserva na janela atual, que é a melhor forma de encurtar uma lista longa de recursos, porque ocultar uma linha vazia não faz falta. |
| Exibição e layout | ||||||
Button Labellabel | ✓ | ✓ | ✓ | String | Date: Selecionar Datas (Select Dates); Date Time: Selecionar Datas & Horários (Select Dates & Times); Booking: Reservar Recurso (Book Resource) | Texto do botão que abre o seletor de datas. Exemplo: 'Escolher datas' ou 'Adicionar Datas' |
Calendar TitlemodalTitle | ✓ | ✓ | ✓ | String | Date: Selecionar Datas (Select Dates); Date Time: Selecionar Datas & Horários (Select Dates & Times); Booking: Reservar Recurso (Book Resource) | Título exibido no topo da janela do calendário. |
Show Inline (Always Visible)Também aparece como Show Inline (No Button)showInline | ✓ | ✓ | ✓ | Boolean | true | Quando ATIVADO, o calendário fica sempre visível, sem precisar clicar em um botão. Quando DESATIVADO, um botão abre o calendário em uma janela pop-up. |
Two-Month ViewtwoMonthView | ✓ | ✓ | ✓ | Boolean | false | Quando ATIVADO, mostra dois meses lado a lado para facilitar a seleção de intervalos. Quando DESATIVADO, mostra um mês por vez. |
Calendar SizecalendarSize | ✓ | ✓ | ✓ | String | medium | Controla o tamanho geral do calendário. Valores válidos: tiny, xsmall (Muito pequeno), small, medium, large. O padrão é medium. Use tiny ou xsmall para barras de utilitários, barras laterais e blocos de painel, small para espaços apertados, medium para a maioria dos layouts e large para experiências pensadas para toque. |
Day Header FormatdayHeaderFormat | ✓ | ✓ | ✓ | String | 3 | Tamanho dos cabeçalhos dos dias da semana. Valores válidos: 3, 2, 1. O padrão é 3. 3 = DOM SEG TER, 2 = DO SE TE, 1 = D S T. |
Week Starts on MondayweekStartsOnMonday | ✓ | ✓ | ✓ | Boolean | false | Quando ATIVADO, a semana do calendário começa na segunda-feira (padrão ISO). Quando DESATIVADO, começa no domingo (padrão americano e brasileiro). |
Show Recurring Pattern ButtonshowRecurringPattern | ✓ | ✓ | ✓ | Boolean | true | Quando ATIVADO, mostra um botão que permite selecionar rapidamente todos os dias úteis, fins de semana ou dias específicos da semana até uma data final. |
Show Selection SummaryshowSelectedSummary | ✓ | ✓ | ✓ | Boolean | true | Quando ATIVADO, exibe um resumo com quantas datas estão selecionadas e quais são. |
Show Done Button in Inline ModeshowDoneButtonInline | ✓ | ✓ | ✓ | Boolean | false | Quando ATIVADO e com Show Inline ligado, mostra um botão Concluído que recolhe o calendário em um resumo. |
Show In-Component ToastshowSuccessToast | ✓ | ✓ | ✓ | Boolean | false | Mostra uma notificação de sucesso ou erro dentro do componente (necessário em sites do Experience Cloud, onde a notificação padrão não aparece). Também funciona em páginas de registro. |
Show Add to Calendar After SavingshowAddToCalendar | ✓ | ✓ | ✓ | Boolean | false | Depois de salvar com sucesso, um botão Adicionar ao calendário baixa um arquivo de calendário (.ics) com um evento para cada registro recém-salvo. Ele abre no Outlook, no Google Agenda e no Calendário da Apple, e funciona para convidados do Experience Cloud. Registros só de data viram eventos de dia inteiro; registros com horário mantêm os horários. |
Calendar File Location FieldcalendarLocationField | ✓ | String | em branco | Nome de API de um campo do objeto de recurso cujo valor vira o Local de cada evento no arquivo Adicionar ao calendário, como o endereço de uma sala, ou Name para a própria sala. Deixe em branco quando os recursos forem pessoas, como consultores ou técnicos: eles já aparecem no título do evento, e uma pessoa não é um lugar. Requer Show Add to Calendar After Saving. | ||
Success Toast Message (optional)successToastMessage | ✓ | ✓ | ✓ | String | em branco | Mensagem personalizada opcional ao salvar com sucesso. Em branco, usa a padrão. |
| Regras de seleção | ||||||
Requiredrequired | ✓ | ✓ | ✓ | Boolean | false | Quando ATIVADO, o usuário precisa selecionar pelo menos uma data antes de o fluxo avançar para a próxima tela. |
Max Dates AllowedTambém aparece como Max Dates Per BookingmaxSelections | ✓ | ✓ | ✓ | Integer | 0 | Número máximo de datas que um usuário pode selecionar. 0 = ilimitado. |
Max Time SlotsmaxTimeSlotSelection | ✓ | ✓ | Integer | 0 | Número máximo de horários que um usuário pode selecionar no total (somando todas as datas). 0 = ilimitado. | |
Allow Past DatesallowPastDates | ✓ | ✓ | ✓ | Boolean | Date: true; Date Time: true; Booking: false | Quando ATIVADO, os usuários podem selecionar qualquer data passada. Quando DESATIVADO, só hoje e datas futuras podem ser selecionadas. |
Earliest Selectable DateTambém aparece como Earliest Bookable DateminDate | ✓ | ✓ | ✓ | Date | em branco | A data mais cedo que os usuários podem selecionar. As datas anteriores ficam em cinza. Para impedir reservas no mesmo dia, use Minimum Notice: ela acompanha o relógio. |
Latest Selectable DateTambém aparece como Latest Bookable DatemaxDate | ✓ | ✓ | ✓ | Date | em branco | A data mais tarde que os usuários podem selecionar. As datas posteriores ficam em cinza. |
Book Up To (Days Ahead)maxDaysAhead | ✓ | ✓ | ✓ | Integer | 0 | Uma janela de reserva móvel: a última data selecionável é hoje mais este número de dias, e ela avança todo dia. 0 significa sem limite. Quando Latest Selectable Date também está definida, vale a mais próxima das duas. |
Minimum Notice (Hours)minNoticeHours | ✓ | ✓ | ✓ | Integer | 0 | Nada que comece antes de agora mais este número de horas pode ser escolhido ou salvo. Os dias anteriores ficam em cinza e, no dia do limite, os horários mais cedo fecham. A regra é verificada de novo ao salvar, então uma página deixada aberta durante a noite não consegue reservar dentro do prazo de antecedência. 0 significa sem mínimo. |
Pre-Selected DatesdefaultDates | ✓ | ✓ | ✓ | String[] | em branco | Datas que já vêm selecionadas quando o calendário abre. Informe no formato ISO (YYYY-MM-DD). |
Blocked DatesdisabledDates | ✓ | ✓ | ✓ | String[] | em branco | Datas específicas que não podem ser selecionadas (aparecem em cinza). Use para feriados ou datas bloqueadas. Informe no formato ISO (YYYY-MM-DD). |
Only These Dates Are SelectableavailableDates | ✓ | ✓ | ✓ | String[] | em branco | Quando definida, SOMENTE estas datas podem ser selecionadas: todas as outras ficam em cinza. Informe no formato ISO (YYYY-MM-DD). Útil quando as datas válidas vêm de outra fonte no seu fluxo. |
Auto-Jump to First Available DateautoJumpToFirstAvailable | ✓ | ✓ | ✓ | Boolean | false | Quando ATIVADO e com 'Only These Dates Are Selectable' definida, o calendário abre automaticamente no mês da primeira data disponível. |
Allow Whole-Day (No Times)allowWholeDayNoTimes | ✓ | ✓ | Boolean | false | Quando ativado, selecionar uma data sem horários salva um registro de dia inteiro (bloqueia ou reserva o dia todo). Datas com horários são salvas como registros com horário. | |
| Registros e salvamento | ||||||
Parent Record IdrecordId | ✓ | ✓ | ✓ | String | em branco | Quando definido, o componente funciona no modo de salvamento com clique e grava registros filhos vinculados a este registro pai. Passe um Id de registro vindo de uma saída de Obter registros ou de recordCreate (ex.: {!recordVar.Id}). Deixe em branco para usar o modelo padrão parser + loop + criar. |
Static Parent Record IdstaticRecordId | ✓ | ✓ | ✓ | String | em branco | Caso especial: fixe um Id de registro para prender este calendário a um único registro pai. Funciona em página de registro, página de aplicativo (exige Id fixo), página inicial (exige Id fixo) e site do Experience Cloud (exige Id fixo). Em uma página de registro, deixe em branco: o registro da página é injetado automaticamente. |
Parent Record Id FieldparentRecordIdField | ✓ | ✓ | ✓ | String | em branco | Só é necessário quando este componente fica na página de registro de um objeto DIFERENTE do pai. Informe o nome de API do campo lookup que aponta para o pai real. Deixe em branco quando o componente estiver na página do objeto pai. |
Child Object API NameTambém aparece como Related Booking Object API Name; Child Object API Name (for preload)relatedObjectApiName | ✓ | ✓ | ✓ | String | em branco | Nome de API do objeto em que cada data selecionada é salva como registro. Exemplo: Appointment__c, Schedule_Entry__c. Obrigatório para o salvamento com clique. |
Date Field API NameTambém aparece como Date Field API Name (for preload)dateFieldApiName | ✓ | ✓ | ✓ | String | em branco | Nome de API do campo Date no objeto filho que guarda a data selecionada. Exemplo: Event_Date__c, Start_Date__c |
End Date Field API NameTambém aparece como End Date FieldendDateField | ✓ | ✓ | ✓ | String | em branco | Nome de API de um campo de data final no objeto filho. Quando definido, datas selecionadas seguidas são consolidadas em um único registro com data inicial e final, em vez de um registro por data. Exemplo: End_Date__c |
Relationship Field API NameTambém aparece como Parent Record Relationship FieldrelationshipFieldApiName | ✓ | ✓ | ✓ | String | em branco | Nome de API do campo lookup no objeto filho que liga de volta ao registro pai. Exemplo: Account__c, Contact__c, Order__c |
Load Existing DatesTambém aparece como Load Existing BookingspreloadExistingDates | ✓ | ✓ | ✓ | Boolean | true | Quando ATIVADO, consulta os registros filhos existentes e mostra as datas deles no calendário ao carregar. Requer Child Object, Date Field e Relationship Field. |
Existing Dates ModeTambém aparece como Existing Bookings ModepreloadMode | ✓ | ✓ | ✓ | String | editable | Controla como as datas carregadas aparecem. Só vale quando Load Existing Dates está ATIVADO. Valores válidos: editable, readonly. Padrão: editable. editable = as datas vêm selecionadas e podem ser alteradas. readonly = as datas aparecem em cinza e não podem ser removidas. No Flow Builder isso aparece como um campo de texto livre, então digite exatamente um desses valores. |
Save Button LabelsaveButtonLabel | ✓ | ✓ | ✓ | String | Salvar | Texto do botão Salvar no modo de salvamento com clique. Exemplo: 'Salvar datas', 'Confirmar seleção' |
Record Name FieldrecordNameField | ✓ | ✓ | ✓ | String | em branco | Nome de API de um campo de texto no objeto filho em que um rótulo do registro é salvo. Quando definido, aparece um campo de texto para os usuários informarem um rótulo. |
Default Record NamedefaultRecordName | ✓ | ✓ | ✓ | String | em branco | Preenche previamente o nome do registro. Os usuários podem alterá-lo na hora. Exemplo: 'Dia de folga', 'Reunião de equipe'. |
Append Date/Time to Record NameTambém aparece como Append Date to Record NameappendDateTimeToName | ✓ | ✓ | ✓ | Boolean | true | Quando ATIVADO, acrescenta a data ao nome do registro. |
| Status e edição | ||||||
Status FieldstatusField | ✓ | ✓ | ✓ | String | em branco | Nome de API de um campo de lista de opções/status no objeto filho. Quando configurado, aparece uma lista de status ao lado do nome do registro para que os usuários atribuam um status ao selecionar datas. Obrigatório para Status Colors, Ignored Statuses, Status Field Label e Enable Edit Mode. Exemplo: Status__c |
Status ColorsstatusColors | ✓ | ✓ | ✓ | String | em branco | Mapeamento separado por vírgulas de valores de status para cores hex. Formato: Value:#hex. As cores de status aparecem nas células de data do calendário. Requer Status Field. Exemplo: Confirmed:#22C55E, Tentative:#fbbf24, Pending:#60a5fa, Cancelled:#a1a8b5 |
Status Color DisplaystatusColorDisplay | ✓ | ✓ | ✓ | String | Date: calendar; Date Time: both; Booking: both | Onde as cores de status aparecem. No componente Dates, só 'calendar' está disponível: as células de data do calendário recebem a cor do seu status. |
Ignored StatusesTambém aparece como Ignored StatuseshideBookingsWithStatus | ✓ | ✓ | ✓ | String | em branco | Lista separada por vírgulas de valores de status cujos registros ficam ocultos no calendário. Os registros ocultos não são desenhados, mas continuam no Salesforce. Requer Status Field. Exemplo: Cancelled, Rejected |
Selectable Statuses (Status Picker)selectableStatuses | ✓ | ✓ | ✓ | String | em branco | Valores de status separados por vírgulas que o seletor de status da reserva pode definir. Deixe em branco para permitir todos (uso interno). Ex.: 'Scheduled' para um site de clientes. Quando há exatamente um status selecionável, ele é escolhido automaticamente e o seletor fica oculto. Requer Status Field. |
Second Picklist FieldsecondStatusField | ✓ | ✓ | ✓ | String | em branco | Nome de API opcional de uma segunda lista de opções que o usuário escolhe ao salvar (ex.: Reason__c). Não tem cores: as cores do calendário são do statusField. Inclua-a em Hover Popover Fields para exibi-la. Funciona em fluxos, no App Builder e em Communities. |
Second Picklist LabelsecondStatusFieldLabel | ✓ | ✓ | ✓ | String | em branco | Rótulo de exibição opcional da segunda lista suspensa. Se ficar em branco, o componente gera um nome legível a partir do nome de API do campo. |
Selectable Second-Picklist ValuesselectableSecondStatuses | ✓ | ✓ | ✓ | String | em branco | Lista opcional, separada por vírgulas, dos valores permitidos para a segunda lista de opções. Deixe em branco para permitir todos. Quando há exatamente um, ele é escolhido automaticamente e o seletor fica oculto. |
Status Field LabelstatusFieldLabel | ✓ | ✓ | ✓ | String | em branco | Rótulo de exibição opcional da lista de status mostrada aos usuários finais. NÃO informe um nome de API de campo aqui: é apenas um rótulo de exibição. Se ficar em branco, o componente gera um nome legível a partir do nome de API do Status Field. |
Hover Popover FieldshoverFields | ✓ | ✓ | ✓ | String | em branco | Lista separada por vírgulas de nomes de API de campos exibidos ao passar o mouse sobre uma data do calendário que tem registros. Os campos são consultados no Child Object. Aceita campos de relacionamento. Só mostra dados quando os registros existentes são carregados (via Load Existing Dates). Exemplo: Name, Status__c, Notes__c. Deixe em branco para desativar os cartões ao passar o mouse. |
Enable Edit ModeenableEditMode | ✓ | ✓ | ✓ | Boolean | true | Quando ATIVADO, os usuários podem clicar em datas existentes para editar a data ou o status, ou excluir o registro. Requer que Status Field E Status Colors estejam configurados. |
Edit Button LabeleditButtonLabel | ✓ | ✓ | ✓ | String | em branco | Rótulo personalizado do botão que liga o modo de edição. Se ficar em branco, o padrão é 'Editar Datas' (Edit Dates). |
Edit Record DisplayeditRecordDisplay | ✓ | ✓ | ✓ | String | em branco | Palavras-chave separadas por vírgulas que definem quais campos aparecem na lista de registros do modo de edição e em que ordem. Palavras-chave: name, status, time, date, resource. Padrão quando em branco: name, status, time. Exemplo: name, date, status |
| Horários | ||||||
Time Display ModetimeDisplayMode | ✓ | String | grid | Como o horário é apresentado. Valores válidos: grid, dropdown. Padrão: grid. grid = grade visual de horários em que os usuários clicam ou arrastam para escolher blocos de horário. dropdown = seletores de hora lightning-input. Use Allow Different Times Per Date para escolher entre seletores compartilhados ou por data no modo dropdown. No Flow Builder isso aparece como texto livre, então digite exatamente um desses valores. | ||
Time Interval (Minutes)Também aparece como Time Slot Interval (Minutes)timeInterval | ✓ | ✓ | Integer | 30 | Minutos entre os horários. Qualquer número inteiro funciona; 15, 30 ou 60 minutos são os mais comuns. Exemplo: 30 mostra 9:00, 9:30, 10:00. | |
Earliest TimeminTime | ✓ | String | 09:00 | Hora mais cedo exibida no seletor de horário. Use o formato de 24 horas (HH:mm). Exemplos: 08:00 = 8h, 13:00 = 13h. Deixe em branco para começar à 0h. | ||
Latest TimemaxTime | ✓ | String | 18:00 | Hora mais tarde exibida no seletor de horário. Use o formato de 24 horas (HH:mm). Exemplos: 17:00 = 17h, 20:00 = 20h. Deixe em branco para terminar às 23h30. | ||
Start Time FieldTambém aparece como Start Time Field API NamestartTimeField | ✓ | String | em branco | Nome de API de um campo Time no objeto filho para a hora inicial do horário. Exemplo: Start_Time__c | ||
End Time FieldTambém aparece como End Time Field API NameendTimeField | ✓ | String | em branco | Nome de API de um campo Time no objeto filho para a hora final do horário. Exemplo: End_Time__c | ||
Allow Different Times Per DateallowDifferentTimes | ✓ | ✓ | Boolean | false | Quando ATIVADO e com Time Display Mode em 'dropdown', cada data ganha seu próprio seletor de horário (agrupado por semana). Quando DESATIVADO, todas as datas compartilham um horário. Não tem efeito quando Time Display Mode é 'grid'. | |
Enable End TimeenableEndTime | ✓ | Boolean | true | Quando ATIVADO, mostra uma lista separada de hora final ao lado da hora inicial. Gera startTime e endTime na saída JSON. Só vale no modo dropdown (Time Display Mode = 'dropdown'). Não tem efeito no modo grid. | ||
Group Time Slots by PeriodgroupTimeSlotsByPeriod | ✓ | ✓ | Boolean | false | Quando ATIVADO, os horários são agrupados nas seções Manhã, Tarde e Noite. Quando DESATIVADO (padrão), mostra uma grade simples. Só vale quando Time Display Mode é 'grid'. | |
Time Grid OnlytimeGridOnly | ✓ | ✓ | Boolean | false | Quando ATIVADO, oculta totalmente o calendário e mostra SOMENTE a grade de horários para uma data implícita. O usuário escolhe os horários; os registros são salvos no registro hospedeiro pelo salvamento com clique (sem etapa de escolha de data). A data implícita vem de Time Grid Date; se não houver, de Time Grid Date Field; se não, é hoje. | |
Time Grid DatetimeGridDate | ✓ | ✓ | String | em branco | Data ISO explícita opcional (YYYY-MM-DD) para a data implícita quando Time Grid Only está ATIVADO. Tem a maior prioridade. Deixe em branco para ler de Time Grid Date Field ou usar hoje. | |
Time Grid Date FieldtimeGridDateField | ✓ | ✓ | String | em branco | Nome de API opcional de um campo Date no registro hospedeiro de onde ler a data implícita quando Time Grid Only está ATIVADO (contexto de página de registro). Só é usado quando Time Grid Date está em branco. Exemplo: Appointment_Date__c | |
Disable Time Slot Grid (Full-Day Mode)disableTimeSlotGrid | ✓ | Boolean | false | Quando ATIVADO, oculta a grade de horários em reservas de dia inteiro, em que só a data importa. Quando DESATIVADO (padrão), mostra a grade de horários para reservas detalhadas por horário. | ||
| Recursos e capacidade | ||||||
Resource Object API NameresourceObjectApiName | ✓ | String | em branco | Nome de API do objeto que guarda os recursos reserváveis. Cada registro = um recurso reservável exibido na lista suspensa. Exemplo: Room__c, Equipment__c, Vehicle__c, Staff__c | ||
Resource Name FieldresourceNameField | ✓ | String | Name | Nome de API do campo com o nome de exibição do recurso. Normalmente 'Name'. | ||
Resource Filter Field (optional)resourceFilterField | ✓ | String | em branco | Nome de API de um campo do objeto de recurso usado para limitar quais recursos aparecem no seletor. Use junto com Resource Filter Value. Use ';' para combinar vários campos (E). Exemplos: 'Active__c' (um campo booleano), 'Type__c' (uma lista de opções), 'Type__c;Building__c' (DOIS campos combinados com E). Deixe em branco para mostrar todos os recursos. | ||
Resource Filter Value (optional)resourceFilterValue | ✓ | String | em branco | Valor(es) a que o campo de filtro deve ser igual. ',' entre valores de UM campo = OU (cláusula IN). ';' entre valores = E entre vários campos (precisa ter a mesma quantidade de campos de Resource Filter Field). Exemplos: 'true': Active=true. 'Conference Room': Type=Conference Room. 'North,South': Building IN North ou South. 'Conference Room;North': Type=Conference Room E Building=North. 'Conference Room;North,South': Type=Conference Room E Building IN North ou South. | ||
Business Hours Start FieldbusinessHoursStartField | ✓ | String | em branco | Nome de API do campo Time no objeto de recurso que define quando ele fica disponível a cada dia. Exemplo: Business_Hours_Start__c (definido como 08:00:00.000Z para 8h). Deixe em branco para usar horários em todo o intervalo configurado. | ||
Business Hours End FieldbusinessHoursEndField | ✓ | String | em branco | Nome de API do campo Time no objeto de recurso que define o último horário disponível a cada dia. Exemplo: Business_Hours_End__c (definido como 18:00:00.000Z para 18h). | ||
Allow Multiple ResourcesTambém aparece como Allow Booking Multiple ResourcesallowMultipleResources | ✓ | Boolean | false | Quando ATIVADO, os usuários podem selecionar vários recursos com caixas de seleção e reservar todos ao mesmo tempo. A grade mostra só os horários disponíveis em TODOS os recursos selecionados. Exemplo: reservar uma sala E um projetor ao mesmo tempo. | ||
Allow No ResourceTambém aparece como Allow Save Without Picking a ResourceallowNoResource | ✓ | Boolean | false | Quando ATIVADO, os usuários podem salvar sem escolher um recurso: o lookup de recurso do registro salvo fica nulo. Pensado para quem registra fechamentos ou bloqueios, em que um recurso em branco significa 'vale para todos'. Os calendários que leem fechamentos com filtro por recurso (blockedDatesResourceField) tratam um recurso nulo como válido para a região inteira, então, junto com allowNoResource, isso entrega o modelo de 'consultor opcional'. Deixe DESATIVADO (padrão) nas reservas normais, em que sempre é preciso escolher um recurso. | ||
Booking Object API NameresourceBookingObject | ✓ | String | em branco | Nome de API do objeto em que os registros de reserva são criados. Um registro por data por recurso. Exemplo: Room_Booking__c, Equipment_Reservation__c | ||
Booking Date FieldbookingDateField | ✓ | String | em branco | Nome de API do campo Date no objeto de reserva. Precisa ser do tipo Date (não DateTime). Exemplo: Booking_Date__c | ||
Booking Resource FieldbookingResourceField | ✓ | String | em branco | Nome de API do campo lookup no objeto de reserva que aponta para o recurso. Exemplo: Room__c (lookup de Room_Booking__c para Room__c) | ||
Booking Start Time FieldbookingStartTimeField | ✓ | String | em branco | Nome de API do campo Time no objeto de reserva para a hora inicial. Exemplo: Start_Time__c. Deixe em branco para reservas por data, sem horários. | ||
Booking End Time FieldbookingEndTimeField | ✓ | String | em branco | Nome de API do campo Time no objeto de reserva para a hora final. Exemplo: End_Time__c. O sistema calcula a hora final com base nos horários selecionados. | ||
Book Button LabelresourceBookButtonLabel | ✓ | String | Reservar (Book) | Texto do botão que confirma a reserva. Exemplo: 'Reservar agora', 'Agendar', 'Confirmar reserva' | ||
Capacity FieldcapacityField | ✓ | String | em branco | Nome de API de um campo Number no objeto de recurso que define o máximo de reservas simultâneas por horário. Quando definido, os horários mostram um selo X/Y e ficam disponíveis até lotar. Ideal para salas de treinamento, mesas compartilhadas ou inscrições em aulas. Deixe em branco para uma reserva por horário. Exemplo: Capacity__c | ||
Capacity Aggregation (multi-resource)capacityAggregation | ✓ | String | Combined | SÓ NO MODO DE RESERVA COM CAPACIDADE (requer Capacity Field). Controla como a capacidade X/Y é calculada quando vários recursos são selecionados. COMBINED (padrão) soma reservas E capacidades: melhor quando cada recurso é um estoque independente (ex.: 4 registros em 4 salas com capacidade 5 cada = 4/20). DISTINCT conta eventos únicos (registros com a mesma data + hora inicial + hora final em recursos diferentes contam como UM) e usa a MAIOR capacidade individual: melhor quando um evento ocupa vários recursos ao mesmo tempo (4 registros em 4 salas = 1/5). | ||
Show Availability CountshowAvailabilityCount | ✓ | Boolean | true | Quando ATIVADO, mostra detalhes de disponibilidade no painel de recursos (ex.: '3/5 dias disponíveis'). Ajuda os usuários a escolher o melhor recurso antes de reservar. Requer Resource Object API Name configurado. | ||
| Conflitos | ||||||
Conflict BehaviorconflictBehavior | ✓ | ✓ | String | block | Controla o que acontece quando as datas selecionadas têm conflito de horário com registros existentes. 'block' (padrão): o salvamento é bloqueado e as datas em conflito são destacadas. 'skip': o salvamento segue, mas as datas em conflito são puladas. 'allow': sem verificação de conflito. Só vale no modo de grade compartilhada (Time Display Mode='grid' + Allow Different Times Per Date=DESATIVADO). | |
Buffer Between Bookings (Minutes)bufferMinutes | ✓ | ✓ | Integer | 0 | Minutos mantidos livres depois de cada reserva existente para limpeza ou preparação, por recurso no Booking. Um horário que começaria dentro desse intervalo conta como ocupado em todo lugar que mostra disponibilidade (grade de horários, contagem de capacidade, arrasto na Semana) e ao salvar, e o Conflict Behavior decide o que acontece. Exemplo: 15 deixa quinze minutos entre reuniões na mesma sala. | |
Conflict Look-Ahead DaysconflictLookAheadDays | ✓ | ✓ | Integer | 360 | Quantos dias à frente verificar conflitos de horário e carregar disponibilidade. Padrão: 360. Reduza para ganhar desempenho em objetos com muitos registros. | |
| Sub-blocos | ||||||
Consolidate Time SpanconsolidateTimeSpan | ✓ | ✓ | Boolean | false | Quando ATIVADO, os horários selecionados saem como um único intervalo, do início do primeiro ao fim do último. As lacunas entre eles ficam laranja automaticamente e são registradas como sub-blocos. Use em escalas em que você precisa do turno inteiro (ex.: 9h às 17h) e, separadamente, das pausas. Só vale no modo grid. | |
Sub-Block Button LabelsubBlockModeButtonLabel | ✓ | ✓ | String | em branco | Quando definido, adiciona um botão que permite marcar horários manualmente como sub-blocos (laranja). Útil para sub-blocos na borda do turno. Deixe em branco para usar só o laranja automático. Exemplo: 'Marcar como pausa', 'Marcar como almoço'. Requer Consolidate Time Span ATIVADO. | |
Show Sub-Block Toggle ButtonshowSubBlockButton | ✓ | ✓ | Boolean | false | Quando ATIVADO, mostra o botão de sub-bloco no cabeçalho da grade de horários. Requer Consolidate Time Span ATIVADO e Sub-Block Button Label definido. | |
Sub-Block Object API NamesubBlockObjectApiName | ✓ | ✓ | String | em branco | Nome de API do objeto filho para os registros de sub-bloco. Exemplo: Work_Break__c. Requer Consolidate Time Span ATIVADO e o modo de salvamento com clique (Parent Record Id definido). | |
Sub-Block Parent Lookup FieldsubBlockParentLookupField | ✓ | ✓ | String | em branco | Campo lookup no objeto de sub-bloco que liga ao registro pai. Exemplo: Shift__c. Obrigatório quando Sub-Block Object está definido. | |
Sub-Block Date FieldsubBlockDateField | ✓ | ✓ | String | em branco | Campo de data no objeto de sub-bloco. Exemplo: Break_Date__c. Obrigatório quando Sub-Block Object está definido. | |
Sub-Block Start Time FieldsubBlockStartTimeField | ✓ | ✓ | String | em branco | Campo de hora inicial no objeto de sub-bloco. Exemplo: Break_Start__c. Obrigatório quando Sub-Block Object está definido. | |
Sub-Block End Time FieldsubBlockEndTimeField | ✓ | ✓ | String | em branco | Campo de hora final no objeto de sub-bloco. Exemplo: Break_End__c. Obrigatório quando Sub-Block Object está definido. | |
Sub-Block Name FieldsubBlockNameField | ✓ | ✓ | String | em branco | Campo de texto no objeto de sub-bloco para guardar um rótulo. Exemplo: Break_Name__c. Obrigatório quando Sub-Block Object está definido. | |
| Datas bloqueadas | ||||||
Blocked Dates ObjectblockedDatesSourceObject | ✓ | ✓ | ✓ | String | em branco | Nome de API de um objeto a consultar para obter as datas que não podem ser selecionadas. Exemplo: Public_Holiday__c |
Blocked Dates Date FieldblockedDatesDateField | ✓ | ✓ | ✓ | String | em branco | Nome de API do campo Date no objeto de datas bloqueadas. Requer Blocked Dates Object definido. |
Blocked Dates Start Time FieldblockedDatesStartTimeField | ✓ | ✓ | ✓ | String | em branco | Opcional: campo Time no objeto de bloqueio que marca o INÍCIO de um fechamento de parte do dia. Quando os campos de hora inicial e final estão definidos e o registro de bloqueio tem os dois preenchidos, só esse intervalo fica fechado na data (o resto continua disponível). Deixe em branco para bloquear o dia inteiro. |
Blocked Dates End Time FieldblockedDatesEndTimeField | ✓ | ✓ | ✓ | String | em branco | Opcional: campo Time no objeto de bloqueio que marca o FIM de um fechamento de parte do dia. Funciona junto com Blocked Dates Start Time Field. |
Blocked Dates Resource FieldblockedDatesResourceField | ✓ | ✓ | ✓ | String | em branco | Opcional: restringe um fechamento existente a um recurso. Informe o nome de API de um campo lookup/de recurso no objeto de bloqueio; quando o recurso do registro de bloqueio coincide com o recurso selecionado no calendário, só esse recurso fica fechado no intervalo. Em branco, cada fechamento vale para TODOS os recursos (a região inteira). Quem liga o bloqueio é o Blocked Dates Source Object, não este campo. Só faz sentido com reserva de recursos. |
Blocked Dates Filter FieldblockedDatesFilterField | ✓ | ✓ | ✓ | String | em branco | Opcional: campo de filtro no objeto de bloqueio. Dois modos: (a) modo valor: quando Blocked Dates Filter Value está definido, limita os registros de bloqueio por <campo> = <valor> (ex.: Status__c = Cancelled). (b) modo escopo do pai: quando Filter Value está em branco, trata este campo como um lookup para o registro atual e filtra por <campo> = recordId. Deixe em branco para bloquear globalmente. |
Blocked Dates Filter ValueblockedDatesFilterValue | ✓ | ✓ | ✓ | String | em branco | Opcional: valor para filtrar o Blocked Dates Filter Field. Quando definido, os registros de bloqueio precisam atender a <filterField> = <filterValue> (ex.: Status__c = Cancelled). Permite que várias categorias de bloqueio convivam na mesma tabela: cada calendário escolhe qual categoria se aplica. |
| Saídas do fluxo | ||||||
Output Date Ranges as JSONoutputAsJson | ✓ | ✓ | Boolean | false | Quando ATIVADO, preenche a saída Date Ranges JSON com datas seguidas agrupadas em intervalos. Necessário se você quiser usar a ação MultiDatePickParser para percorrer os intervalos em um loop. | |
Selected Dates (Output)selectedDates | ✓ | ✓ | String[] | em branco | SAÍDA: array com todas as datas selecionadas no formato ISO (YYYY-MM-DD). Use no seu fluxo para criar registros ou passar para a próxima tela. | |
Date Ranges JSON (Output)selectedDateRangesJson | ✓ | ✓ | String | em branco | SAÍDA: JSON de datas seguidas agrupadas em intervalos. Só é preenchida quando 'Output Date Ranges as JSON' está ATIVADO. Passe para a MultiDatePickParser para percorrer em um loop no fluxo. | |
Dates With Times JSON (Output)selectedDatesWithTimesJson | ✓ | String | em branco | SAÍDA: string JSON com cada data e o horário selecionado. Passe para a MultiDatePickParser para percorrer em um loop no seu fluxo. | ||
Sub-Blocks JSON (Output)subBlocksJson | ✓ | String | em branco | SAÍDA: JSON das janelas de sub-bloco (lacuna/pausa) por data. Só é preenchida quando Consolidate Time Span está ATIVADO. Use em um loop do fluxo para criar registros filhos. | ||
Successful Bookings Count (Output)bookingSuccessCount | ✓ | Integer | em branco | SAÍDA: número de registros de reserva criados com sucesso. Use no seu fluxo para mostrar uma mensagem de confirmação. | ||
Conflict Dates (Output)bookingConflictDates | ✓ | String[] | em branco | SAÍDA: lista das datas em que não foi possível criar reservas por conflito com reservas existentes. | ||
Nenhuma propriedade corresponde ao seu filtro ou busca.
16. Segurança e acessibilidade
- Aprovado no Security Review do Salesforce AppExchange.
- 100% nativo. Seus dados ficam na sua organização Salesforce. Sem servidores externos, sem callouts. Veja Confiança e segurança.
- Sempre com as suas permissões. Cada leitura e cada salvamento rodam com o acesso do próprio usuário, então permissões de objeto, segurança em nível de campo e compartilhamento valem em cada registro.
- Acessível. WCAG 2.1 AA, testado com axe-core. VPAT 2.5 completo.
- 9 idiomas: inglês, espanhol, francês, alemão, japonês, hindi, português (Brasil), italiano e chinês (simplificado).
17. Dúvidas ou bugs?
Encontrou uma lacuna neste guia ou algo quebrado? Escreva para support@multidatepick.com.
Pronto para ver na sua organização?
US$ 20 por usuário por mês, todos os recursos incluídos, teste grátis de 30 dias. Em breve no Salesforce AppExchange.