Datas recorrentes no Salesforce: padrões de seleção
Terça sim, terça não. A 2ª e a 4ª sexta-feira. O último sábado do mês. São regras de negócio comuns, e o Salesforce não tem nenhum campo que expresse qualquer uma delas.
A recorrência existe no Salesforce para eventos e tarefas, e para por aí. No momento em que sua agenda mora em um objeto personalizado (um turno, uma sessão, uma inspeção, uma escala de plantão), você está por conta própria, e a resposta de sempre é alguém calcular as datas em um calendário de papel e digitá-las à mão.
Os dois tipos de recorrência de que as pessoas falam
Eles costumam ser confundidos, e precisam de lógicas diferentes.
| Tipo | Exemplos | O que exige |
|---|---|---|
| Por intervalo | Toda semana, a cada 2 semanas, a cada 3 semanas | Um dia da semana mais um intervalo de repetição |
| Por ocorrência | 1ª segunda-feira, 2ª e 4ª sexta-feira, último sábado | Qual ocorrência dentro de cada mês |
A recorrência por intervalo conta para frente a partir de uma data inicial e não se importa com a virada do mês. A recorrência por ocorrência recomeça todo mês, e "último" é complicado porque cai na 4ª ou na 5ª semana, dependendo do mês. É nessa única palavra que a maioria das implementações caseiras quebra.
Por que fazer isso por conta própria dá errado
Os meses têm tamanhos diferentes
"A 5ª segunda-feira" existe em alguns meses e em outros não.
Anos bissextos
Eles deslocam silenciosamente todo cálculo que pressupõe um ano fixo.
"Semana sim, semana não" precisa de uma âncora
Semana sim, semana não a partir de quando? Duas pessoas vão discordar.
Fins de semana e feriados
Talvez precisem ser pulados, e seus feriados estão nos dados da sua própria organização.
Gerar datas longe demais
Cria milhares de registros que ninguém pediu.
Nenhum desses pontos é difícil isoladamente. Juntos, são uma semana de trabalho e uma fonte permanente de bugs em casos extremos.
Gerar datas em vez de guardar uma regra
Por baixo do algoritmo há uma decisão de design: você guarda a regra e a expande na hora da leitura, ou a expande uma vez e guarda as datas resultantes?
Guardar as datas é quase sempre a melhor resposta no Salesforce. Registros de datas concretos entram em relatórios, em resumos, em filtros e em automações como qualquer outro dado. Uma regra guardada precisa ser interpretada em todo lugar em que é usada, e os relatórios do Salesforce não conseguem interpretá-la de jeito nenhum. A contrapartida é que mudar o padrão exige gerar as datas de novo, e é por isso que o seletor de padrões deve ficar no ponto de entrada, e não escondido na configuração.
Os três padrões, na tela
Dias Personalizados vem primeiro, porque nenhum campo padrão consegue expressá-lo. Escolha qualquer combinação de dias da semana, defina o intervalo, dê um período, e o calendário preenche todas as datas correspondentes antes de você salvar qualquer coisa.
Dias úteis e Fins de semana são os dois atalhos mais usados, e fazem a mesma expansão com um clique.
Deixe as pessoas verem as datas antes de confirmar
A melhor coisa que uma interface de recorrência pode fazer é mostrar o resultado. Quando o usuário escolhe "a cada 2 semanas na terça" e vê na hora as datas reais destacadas no calendário, os erros são pegos no segundo antes de salvar, e não na semana seguinte. Isso também encerra na hora a discussão do "semana sim, semana não a partir de quando", porque a âncora fica visível.
O mesmo vale para a consolidação. Se a sua seleção recorrente gera de segunda a sexta durante seis semanas, talvez você queira trinta registros, ou talvez seis, um por semana, com data inicial e final. Decidir isso na hora da seleção sai muito mais barato do que migrar depois.
Terça sim, terça não, em um clique
Teste um padrão recorrente na demo ao vivo. As datas aparecem no calendário antes de você salvar.
- US$ 20/usuário/mês, todos os recursos
- Teste grátis de 30 dias, sem cartão
- 100% nativo do Salesforce
- Sem Apex
- Em breve no Salesforce AppExchange