Salesforce で繰り返しの日付パターンを扱う
隔週の火曜日。第 2・第 4 金曜日。毎月の最終土曜日。どれもごく普通の業務ルールですが、Salesforce にはこれを表せる項目がひとつもありません。
Salesforce の繰り返し機能は行動と ToDo にしかありません。スケジュールがカスタムオブジェクト (シフト、セッション、点検、オンコール当番など) にある時点で、自力で何とかするしかなくなります。よくあるのは、誰かが紙のカレンダーで日付を数えて手入力するやり方です。
「繰り返し」には 2 種類ある
よく混同されますが、必要なロジックは別物です。
| 種別 | 例 | 必要なもの |
|---|---|---|
| 間隔ベース | 毎週、2 週間ごと、3 週間ごと | 曜日と繰り返しの間隔 |
| 第 N 週ベース | 第 1 月曜、第 2・第 4 金曜、最終土曜 | 各月の何回目の曜日か |
間隔ベースの繰り返しは開始日から数えていくので、月の区切りは関係ありません。第 N 週ベースは毎月リセットされ、特に「最終」が厄介です。月によって第 4 週にも第 5 週にもなるからです。自作の実装の多くは、この一語で破綻します。
自作するとうまくいかない理由
月の長さが違う
「第 5 月曜」はある月とない月があります。
うるう年
1 年の長さを固定で考えた計算は、すべて知らないうちにずれます。
「隔週」には起点が必要
どの週から数えて隔週なのか。2 人いれば意見が分かれます。
週末と祝日
飛ばす必要があるかもしれず、しかも祝日は自社の組織データの中にあります。
先の日付まで生成しすぎる
誰も頼んでいないレコードが何千件もできてしまいます。
どれも一つひとつは難しくありません。でも全部合わせると 1 週間仕事になり、境界ケースのバグがいつまでも出続けます。
ルールを保存せず、日付を生成する
アルゴリズムの下には設計上の判断があります。ルールを保存して読み込み時に展開するのか、一度展開して結果の日付を保存するのか、です。
Salesforce では、ほぼ必ず日付を保存するほうが正解です。具体的な日付のレコードなら、ほかのデータと同じようにレポート、積み上げ集計、絞り込み、自動化に使えます。保存したルールは使う場所ごとに解釈が必要で、Salesforce のレポートはそれをまったく解釈できません。その代わり、パターンを変えるときは生成し直すことになります。だからこそ、パターンの選択は設定の奥ではなく入力の場に置くべきなのです。
3 つのパターンを画面で見る
まずは曜日のカスタム指定から。これを表せる標準項目はまったくないからです。曜日を好きな組み合わせで選び、間隔と期間を指定すると、保存する前に条件に合う日付がすべてカレンダーに入ります。
よく使われる 2 つのショートカットが「平日」と「週末」。同じ展開をワンクリックで行います。
確定する前に日付を見せる
繰り返し設定の UI にできる最善のことは、結果を見せることです。ユーザーが「2 週間ごとの火曜日」を選んだ瞬間、実際の日付がカレンダー上でハイライトされれば、間違いは翌週ではなく保存直前に見つかります。起点が目に見えるので、「どの週から隔週か」という議論もその場で片付きます。
まとめ方についても同じです。繰り返しの選択で 6 週間分の月曜から金曜ができた場合、30 件のレコードが欲しいこともあれば、週ごとに開始日と終了日を持つ 6 件が欲しいこともあります。選択の時点で決めておくほうが、後で移行するよりはるかに安上がりです。
隔週の火曜日をワンクリックで
ライブデモで繰り返しパターンを試してください。保存する前に日付がカレンダーに表示されます。
- $20/ユーザー/月ですべての機能
- 30 日間無料、カード不要
- 100% Salesforce ネイティブ
- Apex 不要
- Salesforce AppExchange で近日公開