Salesforce でダブルブッキングを防ぐ
入力規則はほかのレコードを参照できません。この 1 つの制約のせいで、多くの Salesforce 予約システムは競合に 1 日遅れで気づくことになります。
ダブルブッキングはタイミングの問題です。標準の Salesforce の仕組みが「その会議室は埋まっています」と伝えられる頃には、ユーザーはもう会議室を選び、フォームの残りを入力して、次の作業に移っています。
定番のツールがうまくいかない理由
| ツール | できること | 足りない点 |
|---|---|---|
| 入力規則 | 保存するレコードの項目をチェック | ほかのレコードをまったく検索できない |
| 重複ルール | 項目の値の一致で判定 | 9:00〜10:00 と 9:30〜10:30 は重なっているのに一致しない |
| レコードトリガーフロー | 保存時に検索してブロック | ユーザーが確定したあとに動く。素直に作ると一括処理で破綻する |
| カスタムコード | 完全に制御でき、重なりのロジックも正確 | 結局は保存時に拒否するうえ、コードの保守も自社で負う |
どれも同じ形をしています。選んだあとでユーザーを拒否するのです。正しく作ったカスタムの仕組みでも、出てくるのは「その枠は埋まっています。もう一度お試しください」。最初からその枠を提示しないほうが、ずっと良い体験です。
重なりは一致ではない
重複ルールに頼りたくなる人が多いので、ルールを示しておきます。2 つの予約が競合するのは、一方がもう一方の終了前に始まり、もう一方の開始後に終わるときです。9:00〜10:00 の予約と 9:30〜10:30 の予約は 30 分重なっていますが、同じ値の項目は 1 つもありません。値の一致に基づく方法では、毎回見逃します。
競合と定員は別の問題
この 2 つはよく混同されます。
競合
1 つしか受け入れられないリソースを 2 つが奪い合う状態。会議室、面接官、車両など。
定員
複数を受け入れられるリソース。問題は残りがいくつかです。20 席のクラス、看護師 4 人が必要なシフト、60 席のフリーアドレスエリアなど。
定員のあるリソースを競合のリソースとして扱うと、2 人目を予約できなくなります。競合のリソースを定員 1 として扱うのは一応動きますが、レポートに使いたいはずの件数が失われます。
妥当な 3 つの動作
「ブロックする」が常に正しいとは限りません。12 日を選んだうち 2 日が重なっているだけで送信全体を拒否するのは、ユーザーに不親切です。使えるシステムは選択肢を用意しています。
Block
保存を拒否し、競合を報告。すべての日付が重要な場合に適しています。
Skip
空いている 10 日を保存し、空いていなかった 2 日を報告。まとめて選ぶ場合は、たいていこれが親切な既定値です。
Allow
重複を意図的に許可。あえて予約を多めに受ける業種もあります。
本当の解決策はもっと手前に
上の仕組みはどれも保存時に動きます。解決策は、チェックを選択の時点に移すことです。カレンダーを読み込むときに既存の予約を検索し、グリッドに表示して、埋まった枠は最初から提示しない。保存時のチェックは、2 人が同じ空き枠を同時に見ている本当の競合状態に備えた安全網として残しますが、主な防御ではなくなります。
選ぶ瞬間にダブルブッキングを防ぐ
ライブデモで枠を予約して、埋まった時間がグリッドから消えるのを確かめてください。
- $20/ユーザー/月ですべての機能
- 30 日間無料、カード不要
- 100% Salesforce ネイティブ
- Apex 不要
- Salesforce AppExchange で近日公開