Em breve no Salesforce AppExchange

MultiDatePick para desenvolvedores e arquitetos Salesforce

Como o calendário se encaixa na sua organização: onde ficam as configurações, o que um fluxo de tela recebe de volta, os tipos Apex que seus fluxos podem percorrer em loop, como funciona a segurança e como mover configurações entre organizações.

O MultiDatePick foi feito para que administradores nunca precisem de um desenvolvedor. Esta página é para quando um desenvolvedor ou arquiteto participa mesmo assim: revisando o pacote, criando fluxos em torno dele ou levando a configuração pelos sandboxes.

O que vem no pacote

ItemO que faz
Componente DateEscolha várias datas, arraste intervalos, adicione padrões recorrentes. Salva um registro por data ou por intervalo, ou devolve as datas a um fluxo de tela.
Componente Date TimeDatas mais horários, compartilhados ou por data, com verificação de conflitos. Salva um registro por data, por bloco de horário, ou um registro pai com sub-blocos.
Componente BookingReserve salas, equipamentos, veículos ou pessoas (qualquer objeto, inclusive Usuário) com capacidade, horário comercial, dias bloqueados e regras de reserva.
Assistente de ConfiguraçãoUma guia do Lightning que grava configurações, com visualização ao vivo e importação e exportação em JSON.
Ações de fluxoParse Date Entries from JSON e Format MultiDatePick Time Range, para fluxos que salvam os registros por conta própria.
Conjuntos de permissõesMultiDatePick - Setup, MultiDatePick - User, MultiDatePick - All Access e MultiDatePick - Guest para sites públicos.

Onde ficam as configurações

Cada configuração salva é um registro de metadados personalizados: Config__mdt guarda os ajustes, e Config_Extension__mdt guarda os mais novos como JSON em Settings__c. Cada posicionamento em uma página ou tela de fluxo indica sua configuração em Config Name; qualquer propriedade que você também definir no posicionamento substitui os valores de texto e número da configuração.

  • Implantáveis: as configurações são metadados, então são movidas com conjuntos de alterações, a Salesforce CLI ou seu pipeline de CI/CD como qualquer outro metadado.
  • Portáteis: o assistente exporta uma configuração como JSON e a importa em outra organização, mapeando qualquer objeto ou campo que não exista lá.
  • Revisáveis: um registro por configuração, legível em Configuração, então qualquer alteração aparece em um diff.

Seus dados continuam sendo seus

O calendário lê e grava nos seus próprios objetos. Não há modelo de dados do MultiDatePick para sincronizar, nem serviço externo, nem callout: as escolhas viram registros comuns no objeto que você escolher, com os campos que você mapear (data, data final, hora inicial e final, status, nome, recurso). Triggers, fluxos, regras de validação e relatórios nesses objetos continuam funcionando normalmente.

Saídas do fluxo de tela

Coloque um componente em uma tela de fluxo, defina o Config Name e leia estes valores depois da tela:

SaídaTipoO que contém
Selected DatesColeção de textoCada data escolhida no formato YYYY-MM-DD. Percorra em loop para criar um registro por data.
Date Ranges JSONTextoOs intervalos escolhidos, cada um com data inicial e final, quando Output Date Ranges as JSON está ativado.
Dates With Times JSONTextoComponente Date Time: cada data com sua hora inicial e final.
Successful Bookings CountNúmeroComponente Booking: quantas reservas o salvamento criou.

Passe um registro em Parent Record Id e o calendário mostra as datas que esse registro já tem e pode salvar as novas sozinho. Para que o fluxo salve no lugar dele, escolha Meu fluxo salva no assistente: o calendário então esconde o próprio botão Salvar e só entrega as escolhas ao fluxo.

Percorrer as escolhas em loop no fluxo

Para as saídas em JSON, a ação Parse Date Entries from JSON transforma o texto em uma coleção que o fluxo pode percorrer em loop, sem escrever Apex:

Tipo definido pelo ApexCampos
MultiDatePickEntryCollectiondata (as entradas), totalCount, success, errorMessage
MultiDatePickEntryfromDate, toDate, startTime, endTime, resourceId, resourceName, bookingStatus, relatedRecordId, label

O Guia de fluxo de tela mostra o loop passo a passo, e o post sobre loops no Flow traz três fluxos iniciais que você pode implantar com o VS Code.

Modelo de segurança

  • Todas as consultas e salvamentos rodam em modo de usuário: permissões de objeto, segurança em nível de campo e compartilhamento valem para a pessoa que usa o calendário, inclusive usuários convidados em sites públicos.
  • Nada sai da organização: sem callouts, sem servidores externos, sem subprocessadores.
  • Aprovado na Revisão de segurança do Salesforce. Detalhes na página Confiança e segurança.
  • Acessibilidade: um relatório VPAT 2.5 com base nas WCAG 2.1 A e AA, na página Acessibilidade.

Como mover uma configuração do sandbox para a produção

  1. Crie e teste em um sandbox com o Assistente de Configuração.
  2. Mova a configuração: implante os registros Config__mdt e Config_Extension__mdt com a ferramenta de sempre, ou exporte como JSON pelo assistente e importe na produção.
  3. Mova a página ou o fluxo que a usa. Os posicionamentos se referem à configuração pelo nome, então nada mais muda.
  4. Atribua os conjuntos de permissões às pessoas que vão usá-la, e o MultiDatePick - Guest nos sites públicos.

Perguntas que os desenvolvedores fazem

Preciso escrever Apex para usar o MultiDatePick?

Não. Os componentes carregam e salvam os registros sozinhos, e os fluxos que salvam por conta própria usam a ação Parse Date Entries from JSON, que vem no pacote, em vez de Apex personalizado.

As configurações podem passar por CI/CD?

Sim. Cada configuração é um registro de metadados personalizados (Config__mdt, mais Config_Extension__mdt para os ajustes mais novos), então é implantada como qualquer outro metadado.

O MultiDatePick adiciona objetos para os meus dados?

Não. Ele salva nos objetos que você escolher, então seus registros, automações e relatórios continuam onde estão.

Como ele lida com fusos horários e idiomas?

Datas e horários seguem o fuso horário e a localidade do Salesforce de cada usuário, e a interface está traduzida para nove idiomas.