目次
1. 3 つのコンポーネント: 使い分け
MultiDatePick には、共通の基盤の上に作られた 3 つの Lightning Web コンポーネントが含まれています。データに合うものを選んでください。
Date Time
ビルダーでの名前: MultiDatePick - Dates & Times
日付と時間枠。クラス、予約、研修の時間帯、シフトに最適です。
Booking
ビルダーでの名前: MultiDatePick - Resource Booking
日付、時刻、リソース。会議室、設備、人、そして定員のあるあらゆるものに最適です。
機能比較
機能は積み重なります。Date の機能はすべて Date Time と Booking にもあります。Date Time は時刻を、Booking はリソースと定員を追加します。
| 機能 | Date | Date Time | Booking |
|---|---|---|---|
| 3 つのコンポーネントすべてで利用可能 | |||
| 日付の選択 | ✓ | ✓ | ✓ |
| 5 つの表示 | ✓ | ✓ | ✓ |
| 状況の色分け | ✓ | ✓ | ✓ |
| ブロック日付 | ✓ | ✓ | ✓ |
| 既存レコードの読み込み | ✓ | ✓ | ✓ |
| 編集モード | ✓ | ✓ | ✓ |
| 繰り返しパターン | ✓ | ✓ | ✓ |
| Date Time と Booking のみ | |||
| 時間枠 | ✓ | ✓ | |
| サブブロックレコード | ✓ | ✓ | |
| Booking のみ | |||
| リソースの選択 | ✓ | ||
| 定員バッジ | ✓ | ||
2. レコード形式: 使い分け
レコード形式とは、選択内容をどのようにレコードにするかです。3 つの独立した選択で決まり、どの組み合わせでも動作します。
Date: 日付のみ、時刻なし。
Date Time / Booking: 各レコードに開始時刻と終了時刻があります。
追加オプション: Consolidate Time Span(時間範囲を統合) をオンにすると、時間範囲全体で 1 件の親レコードを作り、その中の空き時間ごとにサブブロックの子レコードを作ります。
なし: リソースなしの Date、Date Time、または Booking。
単一リソース: リソースのドロップダウン付きの Booking。
複数リソース: チェックボックス付きの Booking。チェックしたリソースごとに 1 件のレコード。
クリックごと: 選択した日付ごとに 1 件のレコード。5 回クリックすれば 5 件のレコード。
範囲ごと: 連続した日付を、開始日と終了日を持つ 1 件のレコードにまとめます。End Date Field API Name を設定してください。
セットアップウィザードでは 6 つの形式に名前があります: 日付ごとに 1 レコード、日付範囲ごとに 1 レコード、時間帯ごとに 1 レコード、親 + サブブロック、単一リソース、複数リソース。
具体例: 3 つの質問に答える
シナリオごとに 3 つの質問に答えると、形式が決まります。セットアップウィザードも同じ 3 つを質問します。
休暇申請
時刻は必要ですか? いいえ、日付だけです。
リソースの選択は必要ですか? いいえ。
連続した日付はまとめますか? はい。月曜から金曜の休暇は 1 件のレコードにすべきです。
→ 範囲ごと: 開始が月曜、終了が金曜の 1 件のレコード。
会議室の予約
時刻は必要ですか? はい、各予約に開始時刻と終了時刻があります。
リソースの選択は必要ですか? はい、会議室を 1 つ選びます。
連続した日付はまとめますか? いいえ、予約ごとに 1 件のレコードです。
→ 単一リソース: 日付 × 時間帯ごとに 1 件のレコードを会議室に紐付けて作成。
3 つの会議室での研修
時刻は必要ですか? はい、毎日同じ開始時刻と終了時刻です。
リソースの選択は必要ですか? はい、チェックボックスで複数の会議室を選びます。
連続した日付はまとめますか? はい、月曜から金曜まで続きます。
→ 複数リソース、範囲ごと: 会議室ごとに 1 週間全体をカバーする 1 件のレコード。
昼休憩のある終日研修
時刻は必要ですか? はい、午前 9 時から午後 5 時、昼休憩あり。
リソースの選択は必要ですか? いいえ。
空き時間も記録しますか? はい、独自の子レコードとして記録します。
→ 親 + サブブロック: 午前 9 時から午後 5 時の親レコード 1 件と、昼休憩のサブブロック 1 件。
早見表: すべての組み合わせ
時刻とリソースの要件に合う行を選びます。列は End Date Field API Name を設定しているかどうかで決まります。どのセルも有効な設定です。
| 時刻 + リソース | クリックごと (End Date Field なし) |
範囲ごと (End Date Field を設定) |
|---|---|---|
| Date 時刻なし。Date コンポーネント。 |
日付ごとに 1 レコード 1 日 → 1 レコード。 用途: 出欠確認、出席、毎日のチェックイン。 |
日付範囲ごとに 1 レコード 連続した日付 → 開始日と終了日を持つ 1 レコード。 用途: 休暇、出張、連泊。 |
| Date Time レコードごとに 1 つの時間帯。Date Time コンポーネント。 |
時間帯ごとに 1 レコード 1 日 × 1 時間帯 = 1 レコード。 用途: 勤務表、シフトの区切り、研修の時間帯。 |
共通の時間帯を持つ範囲。同じ時刻の連続した日付 → 1 レコード。 用途: 毎日同じ時間帯の複数日研修。 |
| Date Time + Consolidate Time Span 親レコードと空き時間のサブブロック子レコード |
親 + サブブロック 1 件の親レコードが時間範囲全体をカバーし、その中の空き時間がそれぞれサブブロックの子レコードになります。 用途: 昼休憩のある研修、訪問先間の移動を含む外回りルート。 |
|
| Booking、単一リソース リソースのドロップダウン 1 つ。Booking コンポーネント。 |
単一リソース 日付 × 時間帯ごとに 1 レコードをリソースに紐付け。 用途: 会議室、講師のスケジュール管理。 |
単一リソースの範囲。1 つのリソースの連続した日付 → 範囲ごとに 1 レコード。 用途: 客室の連泊、複数日の機材貸し出し。 |
| Booking、複数リソース リソースのチェックボックス (Allow Multiple Resources) |
複数リソース リソース × 日付 × 時間帯ごとに 1 レコード。 用途: 同時開催のチーム会議、複数会議室での研修。 |
複数リソースの範囲。N 個のリソースにまたがる連続した日付 → リソースごとに 1 件、計 N レコード。 用途: 3 つの会議室で同時に行う 1 週間の研修。 |
| Booking + Consolidate Time Span 親の予約と空き時間のサブブロック子レコード |
Booking の親 + サブブロック。終日予約したリソースの休憩もレコードに残ります。 用途: メンテナンス時間のある実験機器。 |
|
まとめ: 3 つの選択はどう組み合わせても動作します。シナリオが名前付きのパターンに当てはまらなくても、それぞれの選択を個別に設定すれば、あとはコンポーネントが処理します。
3. セットアップウィザードの手順
セットアップウィザードで設定を一度保存します。任意のページやフロー画面で、その名前を Config Name(設定名) に入力すれば、その配置で設定が使われます。設定を変更すると、すべての配置に反映されます。
- 1 名前と種別
- 2 オブジェクトと項目
- 3 時刻項目
- 4 状況と表示
- 5 確認と保存
開始方法を選ぶ
新規作成 タブには 2 つの入口があります。手順に沿って案内してほしい は 3 つの質問をして、コンポーネントと形式を選びます。すべてのプロパティを設定 はすべての設定を開きます。隣にはさらに 2 つのタブがあります: 保存済みの設定を編集する 既存の設定 と、Config Library から設定を貼り付ける インポート です。
ステップ 1: 名前と種別
コンポーネント (Date、Date Time、Booking) を選び、設定に名前を付けます。この名前を後で Config Name に入力します。このステップでは表示も設定します: 既定の表示、切り替えで選べる表示、タイムラインと予定一覧のオプションです。
ステップ 2: オブジェクトと項目
最も重要なステップです。レコードを保存するオブジェクト、その日付項目、親への関連項目を選びます。任意の項目で、範囲、リソース、定員、サブブロック、ブロック日付を追加できます。Booking の設定では、リソースオブジェクト、定員項目、営業時間もここで設定します。
ステップ 3: 時刻項目
Date Time と Booking のみ。開始時刻と終了時刻の項目を対応付け、時間間隔 (任意の間隔が使えます。15、30、60 分が一般的です)、最早・最遅の時刻、表示モード、競合時の動作を設定します。
ステップ 4: 状況と表示
状況項目と色、非表示にする状況、ユーザーが選べる状況、ホバー項目、編集モード、レコードの命名、ボタンのラベル、カレンダーサイズ、Max Dates Allowed などの上限。
ステップ 5: 確認と保存
概要を確認し、ライブプレビューを試してから、設定を保存 をクリックします。ウィザードが 30〜60 秒で設定をデプロイします。完了したら、必要に応じて説明を追加します。
既存の設定とインポート
保存した設定は 既存の設定 に一覧表示されます。クリックすると編集やエクスポートができます。インポート タブでは、Config Library の任意のカードの JSON や、別の組織からのエクスポートを取り込めます。
4. 権限セットとアクセス権
パッケージには 4 つの権限セットが含まれています。[設定] の [権限セット] で割り当ててください。
| 権限セット | 対象者 | セットアップウィザード | カレンダーの利用 |
|---|---|---|---|
| MultiDatePick - Setup | 設定を作成する管理者 | ✓ はい | いいえ |
| MultiDatePick - User | カレンダーを使うすべてのユーザー | いいえ | ✓ はい |
| MultiDatePick - All Access | 設定を作成し、利用もする管理者 | ✓ はい | ✓ はい |
| MultiDatePick - Guest | 公開 Experience Cloud サイトのゲストユーザー | いいえ | ✓ 表示と予約 |
コンポーネントは各ユーザー自身の権限で動作するため、ユーザーには自社のオブジェクトと項目へのアクセス権も必要です:
- オブジェクト: レコードの保存先オブジェクトの参照と作成、およびカレンダーが読み取るリソース、休業、子オブジェクトの参照。
- 項目 (参照): カレンダーが表示するすべての項目 (日付、状況、ホバー項目)。
- 項目 (編集): カレンダーが書き込むすべての項目 (日付、時刻、状況、2 つ目の選択リスト、名前項目、親への参照)。ユーザーが編集できない項目があると、参照はできても保存に失敗します。
- 参照先のレコード: 新しいレコードが指す親とリソースへの、少なくとも参照権限。
各エラーメッセージとその原因は トラブルシューティング: アクセスエラー にあります。ゲストサイトにはいくつか追加の手順が必要です: 公開ゲストページ を参照してください。
5. クリックで保存とフローによる保存
保存方法は 2 つあります。配置に合うほうを選んでください。
クリックで保存 (Click to Save)
コンポーネント自身がレコードを書き込みます。4 つの設定を入力すると、専用の 保存 ボタンが表示されます。クリックすると子レコードが作成されます。フロー要素もコードも不要です。
使う場所: レコードページ、アプリケーションページ、ホームページ、Experience サイト、親レコードのあるフロー画面。
フローによる保存 (Flow-Managed Save)
コンポーネントは選択内容をフローに渡します。付属の Parse Date Entries from JSON アクションを使い、続けて独自のループ要素とレコード作成要素を配置します。
使う場所: 承認、条件付きのレコード作成、追加の入力チェックなど、すべてを制御したいフロー画面。
クリックで保存: 4 つの設定
セットアップウィザードがこれらを入力します。4 つすべてに値が入ると、保存ボタンが表示されます。
| 設定 | 内容 | API 参照名 |
|---|---|---|
| 子オブジェクトの API 参照名(Child Object API Name) | レコードの保存先オブジェクト | relatedObjectApiName |
| 日付項目の API 参照名(Date Field API Name) | そのオブジェクトの日付項目 | dateFieldApiName |
| 関連項目の API 参照名(Relationship Field API Name) | 親レコードへの参照項目 | relationshipFieldApiName |
| Parent Record Id または Static Parent Record Id | 親レコード。レコードページでは自動で入力されます。フローでは Parent Record Id にバインドします。アプリケーションページ、ホームページ、Experience ページでは、Static Parent Record Id に ID を入力します。 | recordId / staticRecordId |
ページがどの親レコードを使うか、またフローで親レコードを選ぶべき場合については アプリケーション・ホーム・Experience ページ で解説しています。
フローによる保存: 出力
4 つの設定を空欄のままにします。保存ボタンは非表示になり、選択内容は次のフロー出力から渡されます:
| 出力 | 内容 | コンポーネント |
|---|---|---|
| Selected Dates (Output) | 日付 (YYYY-MM-DD) のテキストコレクション | Date、Date Time |
| Date Ranges JSON (Output) | 連続した日付を範囲にまとめたもの | Date、Date Time |
| Dates With Times JSON (Output) | 各日付とその時刻 | Date Time |
| Successful Bookings Count / Conflict Dates | Booking 自身による保存後の結果 | Booking |
JSON を Parse Date Entries from JSON に渡します。ループで処理できるリストが返され、各項目には開始日、終了日、開始時刻、終了時刻、リソース ID が含まれます。詳しい手順: フローのレシピ。
保存は追加のみ
クリックで保存は新しいレコードを作成するだけです。日付の選択を解除しても保存済みのレコードは削除されないため、クリックを間違えてもデータは失われません。レコードを変更・削除するには、編集モード または関連リストを使います。
6. 状況の色と編集モード
状況の色とフィルター
オブジェクトの任意の選択リストでレコードを色分けし、一部の値を非表示にし、エンドユーザーが選べる値を制限できます。
| 設定 | 機能 | API 参照名 |
|---|---|---|
| 状況項目(Status Field) | 色分けに使う選択リスト。例: Confirmed / Tentative / Cancelled。 | statusField |
| 状況の色(Status Colors) | 値ごとの色。例: Confirmed:#22C55E, Tentative:#fbbf24。空欄にすると自動の配色になります。 | statusColors |
| 状況の色表示(Status Color Display) | 色を表示する場所: カレンダー、グリッド、または両方。空欄にすると、色のないすっきりした顧客向けページになります。 | statusColorDisplay |
| 無視する状況(Ignored Statuses) | これらの値 (例: No-Show,Cancelled) のレコードを、カレンダーと定員の集計から除外します。 | hideBookingsWithStatus |
| 選択可能な状況(Selectable Statuses) | エンドユーザーが選べる値を制限します。例えば顧客は Requested のみ、スタッフにはすべての値を表示できます。 | selectableStatuses |
編集モード
Enable Edit Mode(編集モードを有効化) をオンにすると、編集 ボタンが表示されます。編集モードでは、ユーザーは次の操作ができます:
- 既存のレコードを、日付と状況付きのカードで確認する
- 日付をクリックして、そのレコードを編集対象に加える
- 日付、時刻、リソース、状況を変更すると、レコードが更新される
- 2 回クリックの確認で削除するため、誤って消えることはない
7. 表示: 1 つのコンポーネントで 5 つのレイアウト
どのコンポーネントも 5 つのレイアウトを表示できます。同じ項目の対応付けで同じレコードを読み取り、同じ競合ルール、ブロック日付、営業時間に従い、同じ方法で保存します。表示を切り替えて変わるのはレコードの見え方だけで、意味は変わりません。
5 つの表示と、それぞれが答える質問
| 表示 | 質問 | レイアウト | 書き込み可能? |
|---|---|---|---|
| カレンダー | 14 日には何がある? | 1 か月ずつ、日ごとに状況の色を表示。 | はい。既定の表示です。 |
| タイムライン | どのリソースがいつ空いている? | 縦にリソース、横に日付。複数日のレコードは 1 本のバーで表示。 | はい |
| 週 | 木曜の 14 時に空いているのは誰? | 横に 7 日間、縦に営業時間。複数の日と時間をまとめてドラッグできます。 | はい |
| 稼働率 | 定員を超えているのは誰? | リソースごと・日ごとの定員使用状況のヒートマップ。 | いいえ、読み取り専用 |
| 予定一覧 | 次の予定は? | 今後 60 日間を日付順に並べたリスト。 | いいえ、読み取り専用 |
設定
| 設定 | デフォルト | 機能 |
|---|---|---|
| Viewview | カレンダー | コンポーネントを開いたときのレイアウト。 |
| Available ViewsavailableViews | 空欄 | 切り替えで選べる表示。例: calendar,timeline,agenda。空欄なら 5 つすべてを表示します。既定の表示は常に含まれるので、追加するものだけを指定します。 |
| Timeline Window (Days)timelineWindowDays | 14 | タイムラインに一度に表示する日数。1 か月全体を表示すると各予約の幅は約 20 ピクセルになり、ラベルが切れてしまいます。0 にすると 1 か月全体を表示します。内側の矢印で 1 期間ずつ、外側の矢印で 1 か月ずつ移動します。 |
| Resource RowsresourceViewFilter | all | booked にすると、表示範囲内に予約があるリソースだけを表示します。空の行には情報がないため、長いリストを短くする最善の方法です。どこにも予約がない場合は、すべてのリソースを再び表示します。 |
| Max View ResourcesmaxViewResources | 0 (すべて) | タイムラインと稼働率で表示するリソース行の数を、予約の多い順に制限します。集計はすべて行われます。空の行だけを非表示にする Resource Rows のほうがおすすめです。 |
| Agenda FieldsagendaFields | 空欄 | 予定一覧の各行に追加する項目 (最大 4 つ)。空欄なら Hover Popover Fields を再利用します。日付、時刻、名前は最初から行に表示されます。 |
| Capacity FieldcapacityField | 空欄 | 表示の設定ではありませんが、稼働率で件数ではなくパーセントを表示するには必要です。 |
ページごとに異なる表示
表示は配置ごとの設定なので、同じレコードを場所に応じて異なる見え方にできます。インストールも項目の対応付けも 1 回だけです。
| 配置 | 表示 | 利用可能な表示(Available Views) |
|---|---|---|
| 採用担当者の面接ページ | 週 | calendar,agenda |
| 総務部門の会議室予約ページ | カレンダー | timeline,utilization |
| シフト管理者の勤務表 | タイムライン | week,agenda |
| 業務部門の壁掛けディスプレイ | 予定一覧 | utilization,timeline |
| 公開 Experience Cloud ページ | カレンダー | 空欄、または少なめに |
編集モードはすべての表示で使えます
Enable Edit Mode をオンにすると、すべての表示に編集ボタンが表示されます。タイムライン、週、予定一覧でレコードをクリックすると、月間カレンダーの日付と同じように編集対象に加わります。タイムラインからの状況の一括変更も、カレンダーからの場合とまったく同じように動作します。
タイムライン: 折りたたまれた行
リソースに重なる予約があると、その行は N 件同時 のラベル付きの 1 本の帯に折りたたまれます。展開アイコンを開くと、予約ごとに 1 段ずつ表示されます。折りたたまれた行でも、ドラッグ、ホバー、クリックができます。
タイムライン: ドラッグで日程変更
Enable Edit Mode をオンにすると、タイムラインのバーをドラッグできます。中央をつかむと予約を別の日に移動し、端をつかむと開始日や終了日を変更します。バーに移動先が表示され、離すと保存されます。日単位のズームでは、同じ操作で時刻を変更できます。
会議室だけでなく人のスケジュールも管理
Resource Object API Name には任意のオブジェクトを指定できます。User に設定すると、タイムラインは勤務表に、週はシフト表に、稼働率はチームの稼働状況ダッシュボードになります。
- ユーザーには標準の定員項目がありません。稼働率をパーセントで表示するには、カスタム項目 (例: Daily Capacity) を追加してください。
- Business Hours Start Field(営業時間開始項目) と Business Hours End Field(営業時間終了項目) をユーザーの項目に対応付けると、週のグリッドが各自の勤務時間に合わせて表示されます。
Config Library には、すぐに使える例が 2 つあります: チームのキャパシティ計画 と スタッフのシフト表。
8. リソース予約と定員 (Booking コンポーネント)
単一リソース
ユーザーはドロップダウンからリソースを 1 つ選びます。タイムグリッドにそのリソースの予約と定員が読み込まれます。
複数リソース
Allow Multiple Resources(複数リソースを許可) をオンにすると、ドロップダウンがチェックボックスに変わります。グリッドにはチェックしたすべてのリソースで空いている時間枠だけが表示され、保存するとまとめて予約されます。
定員
複数の予約で 1 つの時間枠を共有でき、3/5 のバッジがリアルタイムで表示されます。満員の時間枠は予約を受け付けません。
| 設定 | 機能 | API 参照名 |
|---|---|---|
| 定員項目(Capacity Field) | リソースの数値項目。例: Capacity = 5。 | capacityField |
| 空き状況数を表示(Show Availability Count) | X/Y バッジを表示します。 | showAvailabilityCount |
| 定員の集計(Capacity Aggregation) | Combined (既定) は、チェックしたリソースの予約数と定員を合算します。定員 5 の会議室 2 つなら 0/10 と表示されます。Distinct は、複数のリソースで予約された 1 つのイベントを 1 件として数え、最大の単一定員を使います。4 つの会議室で行うクラスは 4/20 ではなく 1/5 と表示されます。 | capacityAggregation |
競合
Conflict Behavior(競合の動作) は、選択した時間枠がすでに埋まっている場合の動作を決めます。Conflict Look-Ahead Days は、どこまで先を確認するかを設定します (既定は 360)。
| 値 | 動作 | 適した用途 |
|---|---|---|
| Block (既定) | 埋まっている時間枠は選択できず、保存は中止されて競合箇所が強調表示されます。 | ほとんどの予約ページ |
| Skip | 空いている時間枠を保存し、埋まっているものはスキップします。スキップした日付は Conflict Dates (Output) で返されます。 | 多数の日付の中から、まだ空いている枠をすべて確保する場合 |
| Allow | 競合を確認しません。予約が定員を超えることがあります。 | 意図的なオーバーブッキング |
休業が常に優先されます。Allow でも、ブロックされた時間枠には何も保存されません。
9. ユーザーが選択できる範囲を制限する
1 人が選択できる量を、日付数または時間枠数で制限します。
| 設定 | 機能 | API 参照名 |
|---|---|---|
| 最大選択数(Max Dates Allowed) Booking: Max Dates Per Booking | ユーザーが選択できる日付の最大数。0 は無制限です。 | maxSelections |
| 最大時間枠数(Max Time Slots) | すべての日付を合わせた時間枠の最大数。0 は無制限です。1 人 1 件の予約にするには 1 を指定します。 | maxTimeSlotSelection |
| 最小日付 / 最大日付(Earliest / Latest Selectable Date) | 固定した期間外の日付をグレー表示にします。 | minDate / maxDate |
| 予約可能期間 / 最低事前通知(Book Up To / Minimum Notice) | 今日から動く受付期間: 最大 N 日先まで、少なくとも N 時間前までに予約。 | maxDaysAhead / minNoticeHours |
| 予約間のバッファー(Buffer Between Bookings) | 各予約の後に準備時間を確保します。 | bufferMinutes |
| カレンダーに追加(Add to Calendar) | 保存後、保存したすべての予定を 1 つの .ics ファイルで提供します。 | showAddToCalendar |
| 過去の日付を許可(Allow Past Dates) | オフにすると今日以降だけを選択できます。Date と Date Time では既定でオン、Booking ではオフです。 | allowPastDates |
10. 日付・時刻・リソースのブロック (休業日)
どのカレンダーも別のオブジェクトから休業日を読み取り、対象の日付、時間枠、リソースをグレー表示にできます。これにより、ユーザーは営業中の時間だけを予約できます。いくつかの設定を休業オブジェクトに向けるだけで、あとはコンポーネントが処理します。終日のブロックは 3 つのコンポーネントすべてで使えます。時刻とリソースのブロックには、Date Time または Booking のタイムグリッドが必要です。
ブロックと非表示の違いは?
似ているようで、働きは正反対です。ブロックは空きをなくします: 時間枠は表示されますが予約できません。非表示はレコードを表示から外すため、その時間枠が空きます。
| ブロック (休業日) | 非表示 (状況別) | |
|---|---|---|
| 制御する対象 | 予約できる日付、時刻、リソース | 表示される保存済みレコード |
| 設定 | Blocked Dates Object(ブロック日付オブジェクト) とその日付・時刻・リソース項目 | 無視する状況(Ignored Statuses) |
| 決め手 | 休業日や祝日のリスト: 専用のオブジェクト、または絞り込んだ予約オブジェクト | レコード自体の状況の値 |
| ユーザーに見えるもの | 時間枠は表示されますが、取り消し線とグレー表示でクリックできません | レコードがカレンダーから消えます |
| 定員への影響 | 空きを減らす | 空きを増やす: 非表示のレコードは集計されなくなります |
| データ | 予約は存在せず、予約不可として印を付けるだけです | レコードは Salesforce に残っています |
| 用途 | 祝日、メンテナンス時間、閉鎖中の会議室や地域 | グリッドを散らかしたり定員を消費したりしてほしくない Cancelled や Rejected の予約 |
- Ignored Statuses = Cancelled → 予約は消え、その時間枠が空きます。
- Blocked Dates Object = 予約オブジェクト、Status = Cancelled で絞り込み → 予約がその日付をブロックし、誰も予約し直せなくなります。
ブロック日付の設定
| 設定 | 機能 | API 参照名 |
|---|---|---|
| ブロック日付オブジェクト(Blocked Dates Object) | 休業日を保持するオブジェクト。例: Office Closure オブジェクトや予約オブジェクト。これを設定するとブロックが有効になります。 | blockedDatesSourceObject |
| ブロック日付の日付項目(Blocked Dates Date Field) | そのオブジェクトの日付項目。 | blockedDatesDateField |
| ブロック日付開始時刻項目 / 終了時刻項目(Blocked Dates Start / End Time Field) | 任意の時刻項目。一部の時間だけをブロックするには両方を設定し、終日なら空欄にします。Date Time と Booking。 | blockedDatesStartTimeField / blockedDatesEndTimeField |
| ブロック日付リソース項目(Blocked Dates Resource Field) | 休業日を 1 つのリソースに限定する任意の参照項目。空欄なら休業日はすべてのリソースに適用されます。Booking。 | blockedDatesResourceField |
| ブロック日付フィルター項目 / 値(Blocked Dates Filter Field / Value) | 任意の適用範囲。例: Region = North、Status = Cancelled。これにより 1 つの休業日テーブルを多くのカレンダーで使えます。 | blockedDatesFilterField / blockedDatesFilterValue |
ブロックの 3 つのレベル
- 終日: 時刻のない休業日は、その日付全体をグレー表示にします。3 つのコンポーネントすべてで使えます。予約がすでにある日付でも、休業日は休業日のままです。
- 1 日の一部: 開始時刻と終了時刻のある休業日は、その時間枠だけをブロックします。残りの時間は予約できます。ブロックされた時間枠は、日付を選択すると表示されます。
- 1 つのリソース: リソースを指す休業日は、そのリソースだけを休業にします。単一リソースの表示では時間枠に取り消し線が付きます。合計の表示では隅に小さな印が付き、空いているリソースでは引き続き予約できます。
タイムグリッドを使うなら、1 日の一部のブロックが適しています。終日のブロックは日付のみの選択に向いています。
休業オブジェクトの 2 つのパターン
- 同じオブジェクトを状況で区別: Blocked Dates Object を予約オブジェクトに向け、Status = Cancelled で絞り込むと、キャンセルされた予約が休業日を兼ねます。最も簡単ですが、そのオブジェクトを使うすべてのカレンダーで共有されます。Config Library の 祝日を考慮したアポイント予約 設定を参照してください。
- 専用の休業オブジェクト: 日付、任意の開始・終了時刻、Region 項目、任意のリソース参照を持つ Office Closure オブジェクト。各カレンダーは自分の地域で絞り込み、休業日を 1 つのリソースに限定することもできます。時間単位のリソース休業 設定を参照してください。
利用者が自分の時間をブロックできるようにするには (担当者が午前中をブロックするなど)、休業オブジェクトに保存する Date Time コンポーネントを社内ページやサイトに配置します。
ブロックされた時間枠の動作
- 見た目: 完全に休業の時間枠は取り消し線付きでグレー表示されます。選択したリソースの一部だけが休業の時間枠には、隅に印が付きます。
- 選択: 完全に休業の時間枠は、クリックもドラッグもできません。
- 保存: 休業中のリソース、日付、時刻には何も保存されません。複数リソースの場合は休業中のリソースだけが除外され、空いているリソースは予約されます。
1 つの休業日テーブルで多くのカレンダーに対応
休業オブジェクトにタグ項目 (Region、Location、Building) を持たせ、同じ項目をリソースにも追加します。各カレンダーは Resource Filter Field / Value で自分のリソースを表示し、Blocked Dates Filter Field / Value で自分の休業日を読み取ります。
11. 公開ゲストページ (Experience Cloud)
コンポーネントを Experience Cloud サイトに配置すると、誰でもログインせずに予約できます。ゲストとしてテストする前に、5 つの手順をすべて済ませてください。
- オブジェクト権限。 サイトのゲストユーザーに各オブジェクトの参照権限を付与し、ゲストが送信する場合は作成権限も付与します。Salesforce ではゲストはレコードの編集や削除ができないため、編集、キャンセル、削除のページはログインユーザー向けにしてください。
- コンポーネントが扱うすべての項目の項目レベルセキュリティ。リソースの営業時間項目や休業日の時刻項目も含みます。1 つでも欠けると、リソースや休業日のクエリが止まります。
- ゲストがレコードを参照できるようにするゲストユーザー共有ルール (参照)。ルールを適用するには、オブジェクトの外部組織の共有設定が 非公開 である必要があります。メタデータとしてデプロイしたルールは、[設定] の [共有設定] で 再計算 を 1 回クリックする必要があります。
- サイトのゲストユーザーに MultiDatePick - Guest 権限セット。コンポーネントがデータを読み込むための Apex クラスへのアクセス権が含まれています。
- サイトを有効化します。 公開と有効化は別の手順です。
- ゲストに表示されるレコード: 公開ページは Static Parent Record Id を使うため、すべてのゲストが同じ親レコード (1 つのオフィス、拠点、リソース) に対して予約します。訪問者ごとのレコードにするには、URL パラメーター付きのフローで制御します。ユーザーごとのカレンダーには、ログインユーザーが必要です。
- 取引先責任者と取引先: Salesforce はこれらへのゲストアクセスを厳しく制限しています。ゲストの予約にはカスタムオブジェクトを使うか、認証済みサイトを使ってください。
- 1 ページに複数のコンポーネント: リアルタイムでは同期しません。一方で行ったブロックがもう一方に反映されるよう、間に更新を促す表示を入れてください。
配置の手順は アプリケーション・ホーム・Experience ページ にあります。サイト全体の作成例は Experience Cloud での予約 を参照してください。
12. よくある注意点 (FAQ)
バナーが表示される、保存ボタンがない、カレンダーが空、といった場合は、トラブルシューティング で各メッセージをスクリーンショットと対処法付きで確認できます。
- 状況の色が反映されない
- 3 点を確認してください。(a) Status Field(状況項目) は選択リストの API 名と完全に一致していますか? 大文字と小文字は区別されます。(b) Status Colors は引用符なしの
Value:#hex, Value:#hex形式ですか?'Confirmed':'#22C55E'と書くと、エラーなしで機能しなくなります。(c) レコードのその選択リストに実際に値が入っていますか? - レコードが予期しない名前で保存される
- Record Name Field(レコード名項目) を確認してください: 項目の文字数が少ないと、長い名前は切り捨てられます。Append Date to Record Name も確認してください: オンにすると、選択した日付と時刻がすべての名前に追加されます。
- Cancelled のレコードを定員グリッドから非表示にするには?
- Ignored Statuses を
Cancelled、またはCancelled,Rejectedのようなリストに設定します。カレンダーと定員の集計から外れます。 - ブロックと非表示の違いは?
- ブロック (休業日) は、日付、時刻、リソースを表示したまま予約できなくします: 祝日、メンテナンス、閉鎖中の会議室など。非表示は、Cancelled などのレコードをカレンダーと定員から外し、時間枠を空けます。ブロックと非表示の違い を参照してください。
- 編集ボタンが表示されない
- Enable Edit Mode をオンにしてください。3 つのコンポーネントとも、必要なのはそれだけです。Status Field は任意で、エディターに状況のドロップダウンが追加されるだけです。それでもボタンが表示されない場合は、ページまたは設定で Enable Edit Mode がオフになっています。
- 一部のリソースだけを表示したい (設備ではなく会議室だけ)
- Resource Filter Field と Resource Filter Value(リソースフィルター値) を使います。値が 1 つの場合: 項目
Active__c、値true。複数の値 (OR):North,South。複数の項目 (AND): 項目Type__c;Active__c、値Conference Room;true。 - 使う設定は Time Display Mode(時刻表示モード) です: Grid または Dropdown。Grid モードでは、すべての日付が 1 つのグリッドを共有します。日付ごとに別の時刻にするには、Dropdown を選び、Allow Different Times Per Date をオンにします。
- フローによる保存からクリックで保存に切り替えるには?
- Parent Record Id、Child Object API Name、Date Field API Name、Relationship Field API Name を入力します。Parse Date Entries from JSON アクションと、レコードを作成していたループを削除します。これでコンポーネント自身の保存ボタンがレコードを書き込みます。
- 詳細のないエラーメッセージが表示される
- ブラウザーの開発者コンソールを開き、
[MDP:ERROR]で始まる行を探してください。メッセージが短くても、完全なエラーは常にそこに記録されています。
13. フローのレシピ
ここにあるものはすべて Flow Builder で作成します。Apex は不要です。
選択した日付をループ処理する
- Date Time コンポーネントを配置した画面を追加します。クリックで保存の設定は空欄のままにします。
- 画面の後に Parse Date Entries from JSON アクションを追加し、Dates With Times JSON (Output) を渡します。
- アクションが返すリストをループ処理します。各項目には開始日、終了日、開始時刻、終了時刻があります。
- ループ内で値をレコード変数に割り当て、コレクションに追加します。レコードはループの後で一度に作成します。
最初と最後の日付を親レコードに集計する
親レコードに子の最も早い日付と最も遅い日付を表示したい場合は、データに合うノーコードの方法を選びます。
| 現在の構成 | 方法 |
|---|---|
| 主従関係 | 親に積み上げ集計項目を 2 つ追加します: 日付項目の MIN と日付項目の MAX。これで完了です。 |
| 参照関係 | 子オブジェクトにレコードトリガーフロー (保存後) を作成します。同じ親を持つ子オブジェクトのレコードを日付の昇順で取得し、最初のレコードだけを使います。降順でも同じことを行います。2 つの日付で親の開始日と終了日を更新します。 |
その他のフローのパターン: 画面フローガイド。
14. オブジェクトと項目の対応付け
各コンポーネントのページに、オブジェクトと項目の対応付けの全体図があります:
コンポーネントは任意のオブジェクトで動作します。パッケージに含まれるサンプルオブジェクト (Schedule、Event、Resource、Sub Block) は既定値にすぎません。適切な項目を持つ独自のカスタムオブジェクトや標準オブジェクトを設定で指定してください。
15. 全プロパティのリファレンス
3 つのコンポーネントのすべての設定を、Lightning App Builder、Experience Builder、Flow Builder に表示されるラベルで掲載しています。各ラベルの下に API 名があります。
全プロパティ 100 以上のプロパティ クリックで展開: 検索可能
| プロパティ | Date | Date Time | Booking | 種別 | デフォルト | 説明 |
|---|---|---|---|---|---|---|
| セットアップ | ||||||
Config NameconfigName | ✓ | ✓ | ✓ | String | 空欄 | 任意: セットアップウィザードで作成した Config__mdt レコードの DeveloperName。設定すると、その設定の項目・オブジェクトの設定がすべて既定値として適用されます。ここで設定したテキストと数値のプロパティは設定より優先されます。チェックボックスは常に設定から読み込まれます: チェックを外したボックスと一度も設定していないボックスは区別できないためです。 |
| 表示 | ||||||
Viewview | ✓ | ✓ | ✓ | String | calendar | 使用する表示方式。calendar は月のグリッド (既定)。timeline はリソースを行、日付を列で表示します。week は日 × 時間のグリッドです。utilization は定員のヒートマップで、読み取り専用です。agenda は時系列のリストで、読み取り専用です。 |
Available ViewsavailableViews | ✓ | ✓ | ✓ | String | 空欄 | 切り替えで選べる表示をカンマ区切りで指定します。例: calendar,timeline,agenda。空欄なら 5 つすべてを表示します。上の既定の View は常に含まれます。 |
Timeline Window (Days)timelineWindowDays | ✓ | ✓ | ✓ | Integer | 14 | タイムライン表示で一度に表示する日数。1 か月全体を表示すると各予約の幅は約 20 ピクセルになり、すべてのラベルが切れてしまうため、既定は 14 です。0 にすると 1 か月全体を表示します。 |
Timeline ZoomtimelineZoom | ✓ | ✓ | ✓ | String | week | タイムライン表示の初期ズーム: day (1 日の時間単位)、week (Timeline Window)、month。ユーザーは表示中にズームを切り替えられます。 |
Timeline Group By FieldtimelineGroupByField | ✓ | ✓ | ✓ | String | 空欄 | リソースオブジェクトの項目の API 名 (例: Building__c)。タイムラインの行を見出しごとにグループ化し、定員の帯を表示します。空欄なら 1 つの平らなリストになります。 |
Max View ResourcesmaxViewResources | ✓ | ✓ | ✓ | Integer | 0 | タイムラインと稼働率で表示するリソース行の最大数 (予約の多い順)。リソースが多くても、どちらの表示も読めないほど詰まらないようにします。 |
Agenda FieldsagendaFields | ✓ | ✓ | ✓ | String | 空欄 | 予定一覧の各行で、レコード名の後に表示する項目をカンマ区切りで指定します。空欄なら Hover Fields(ホバー項目) を再利用します。日付、時刻、レコード名の項目は行にすでに表示されるため、自動的に除外されます。 |
Resource RowsresourceViewFilter | ✓ | ✓ | ✓ | String | all | タイムラインと稼働率で行を表示するリソース。all はすべてのリソースを表示し、booked は現在の期間に予約があるリソースだけを表示します。空の行を非表示にしても失うものはないため、長いリソースリストを短くするにはこちらが適しています。 |
| 表示とレイアウト | ||||||
Button Labellabel | ✓ | ✓ | ✓ | String | Date: 日付を選択、Date Time: 日付と時刻を選択、Booking: リソースを予約 | 日付選択を開くボタンに表示するテキスト。例: 「日付を選ぶ」、「日付を追加」 |
Calendar TitlemodalTitle | ✓ | ✓ | ✓ | String | Date: 日付を選択、Date Time: 日付と時刻を選択、Booking: リソースを予約 | カレンダーのモーダルの上部に表示するタイトル。 |
Show Inline (Always Visible)Show Inline (No Button) と表示される場合もありますshowInline | ✓ | ✓ | ✓ | Boolean | true | オンにすると、ボタンをクリックしなくてもカレンダーが常に表示されます。オフにすると、ボタンでカレンダーをポップアップ表示します。 |
Two-Month ViewtwoMonthView | ✓ | ✓ | ✓ | Boolean | false | オンにすると 2 か月を横に並べて表示し、範囲を選択しやすくします。オフにすると 1 か月ずつ表示します。 |
Calendar SizecalendarSize | ✓ | ✓ | ✓ | String | medium | カレンダー全体のサイズを指定します。有効な値: tiny、xsmall (Very Small)、small、medium、large。既定は medium です。ユーティリティバー、サイドバー、ダッシュボードのタイルには tiny または xsmall、狭い場所には small、ほとんどのレイアウトには medium、タッチ操作しやすくするには large を使います。 |
Day Header FormatdayHeaderFormat | ✓ | ✓ | ✓ | String | 3 | 曜日ヘッダーの長さ。有効な値: 3、2、1。既定は 3 です。3 = SUN MON TUE、2 = SU MO TU、1 = S M T (英語表示の場合)。 |
Week Starts on MondayweekStartsOnMonday | ✓ | ✓ | ✓ | Boolean | false | オンにすると、カレンダーの週は月曜日から始まります (ISO 標準)。オフにすると日曜日から始まります (米国標準)。 |
Show Recurring Pattern ButtonshowRecurringPattern | ✓ | ✓ | ✓ | Boolean | true | オンにすると、平日、週末、特定の曜日を終了日まで一括で選べるボタンを表示します。 |
Show Selection SummaryshowSelectedSummary | ✓ | ✓ | ✓ | Boolean | true | オンにすると、選択した日付の数と内容を概要として表示します。 |
Show Done Button in Inline ModeshowDoneButtonInline | ✓ | ✓ | ✓ | Boolean | false | オンにして Show Inline も有効な場合、[完了] ボタンを表示します。押すとカレンダーが概要表示に折りたたまれます。 |
Show In-Component ToastshowSuccessToast | ✓ | ✓ | ✓ | Boolean | false | 成功・エラーのトーストをコンポーネント内に表示します (標準のトーストが表示されない Experience サイトで必要です)。レコードページでも使えます。 |
Show Add to Calendar After SavingshowAddToCalendar | ✓ | ✓ | ✓ | Boolean | false | 保存に成功すると、[カレンダーに追加] ボタンから、保存したレコードごとの予定を含むカレンダーファイル (.ics) を 1 つダウンロードできます。Outlook、Google カレンダー、Apple カレンダーで開け、Experience Cloud のゲストも使えます。日付のみのレコードは終日の予定に、時刻のあるレコードはその時刻の予定になります。 |
Calendar File Location FieldcalendarLocationField | ✓ | String | 空欄 | リソースオブジェクトの項目の API 名。その値が、カレンダーファイルの各予定の場所になります。例えば会議室の住所、あるいは会議室そのものなら Name を指定します。アドバイザーや技術者のようにリソースが人の場合は空欄にします: 人の名前はすでに予定のタイトルに入っており、人は場所ではないためです。Show Add to Calendar After Saving(保存後に「カレンダーに追加」を表示) が必要です。 | ||
Success Toast Message (optional)successToastMessage | ✓ | ✓ | ✓ | String | 空欄 | 保存に成功したときの任意のカスタムメッセージ。空欄なら既定のメッセージを使います。 |
| 選択のルール | ||||||
Requiredrequired | ✓ | ✓ | ✓ | Boolean | false | オンにすると、フローが次の画面に進む前に、ユーザーは少なくとも 1 つの日付を選択する必要があります。 |
Max Dates AllowedMax Dates Per Booking と表示される場合もありますmaxSelections | ✓ | ✓ | ✓ | Integer | 0 | ユーザーが選択できる日付の最大数。0 = 無制限。 |
Max Time SlotsmaxTimeSlotSelection | ✓ | ✓ | Integer | 0 | ユーザーが選択できる時間枠の合計の最大数 (すべての日付を合わせて)。0 = 無制限。 | |
Allow Past DatesallowPastDates | ✓ | ✓ | ✓ | Boolean | Date: true、Date Time: true、Booking: false | オンにすると過去の日付も選択できます。オフにすると今日以降の日付だけを選択できます。 |
Earliest Selectable DateEarliest Bookable Date と表示される場合もありますminDate | ✓ | ✓ | ✓ | Date | 空欄 | ユーザーが選択できる最初の日付。これより前の日付はグレー表示になります。当日の予約を止めたい場合は、代わりに Minimum Notice を使ってください: こちらは時間の経過とともに自動で先へ進みます。 |
Latest Selectable DateLatest Bookable Date と表示される場合もありますmaxDate | ✓ | ✓ | ✓ | Date | 空欄 | ユーザーが選択できる最後の日付。これより後の日付はグレー表示になります。 |
Book Up To (Days Ahead)maxDaysAhead | ✓ | ✓ | ✓ | Integer | 0 | 毎日先へ進む予約受付期間です。選択できる最後の日付は「今日 + この日数」で、日ごとに 1 日ずつ進みます。0 は無制限です。Latest Selectable Date も設定している場合は、早いほうの日付が適用されます。 |
Minimum Notice (Hours)minNoticeHours | ✓ | ✓ | ✓ | Integer | 0 | 現在時刻からこの時間数より前に始まるものは、選択も保存もできません。それより前の日はグレー表示になり、締め切り日の早い時間枠は選べなくなります。保存時にも再確認するため、一晩開いたままのページから期限内の予約が入ることはありません。0 は制限なしです。 |
Pre-Selected DatesdefaultDates | ✓ | ✓ | ✓ | String[] | 空欄 | カレンダーを開いたときに選択済みにしておく日付。ISO 形式 (YYYY-MM-DD) で指定します。 |
Blocked DatesdisabledDates | ✓ | ✓ | ✓ | String[] | 空欄 | 選択できない特定の日付 (グレー表示)。祝日や利用停止日に使います。ISO 形式 (YYYY-MM-DD) で指定します。 |
Only These Dates Are SelectableavailableDates | ✓ | ✓ | ✓ | String[] | 空欄 | 設定すると、これらの日付だけが選択でき、ほかはすべてグレー表示になります。ISO 形式 (YYYY-MM-DD) で指定します。有効な日付をフロー内の別のソースから取得する場合に便利です。 |
Auto-Jump to First Available DateautoJumpToFirstAvailable | ✓ | ✓ | ✓ | Boolean | false | オンにして「Only These Dates Are Selectable」を設定している場合、カレンダーは最初に選択できる日付の月を自動で開きます。 |
Allow Whole-Day (No Times)allowWholeDayNoTimes | ✓ | ✓ | Boolean | false | オンにすると、時間枠を選ばずに日付を選択した場合、終日のレコード (その日全体をブロックまたは予約) として保存します。時間枠のある日付は時刻付きのレコードとして保存されます。 | |
| レコードと保存 | ||||||
Parent Record IdrecordId | ✓ | ✓ | ✓ | String | 空欄 | 設定すると、コンポーネントはクリックで保存モードで動作し、この親に紐付いた子レコードを書き込みます。レコードの取得や recordCreate の出力のレコード ID (例: {!recordVar.Id}) を渡します。空欄なら、標準のパーサー + ループ + 作成のパターンを使います。 |
Static Parent Record IdstaticRecordId | ✓ | ✓ | ✓ | String | 空欄 | 特殊なケース: レコード ID を直接指定して、このカレンダーを 1 つの親レコードに固定します。レコードページ、アプリケーションページ (固定 ID が必要)、ホームページ (固定 ID が必要)、Experience サイト (固定 ID が必要) で動作します。レコードページでは空欄にします: ページのレコードが自動で渡されます。 |
Parent Record Id FieldparentRecordIdField | ✓ | ✓ | ✓ | String | 空欄 | このコンポーネントを親とは「別の」オブジェクトのレコードページに置く場合だけ必要です。本来の親を指す参照項目の API 名を入力します。親オブジェクトのページに置く場合は空欄にします。 |
Child Object API NameRelated Booking Object API Name、Child Object API Name (for preload) と表示される場合もありますrelatedObjectApiName | ✓ | ✓ | ✓ | String | 空欄 | 選択した日付をレコードとして保存するオブジェクトの API 名。例: Appointment__c、Schedule_Entry__c。クリックで保存に必須です。 |
Date Field API NameDate Field API Name (for preload) と表示される場合もありますdateFieldApiName | ✓ | ✓ | ✓ | String | 空欄 | 選択した日付を保存する、子オブジェクトの日付項目の API 名。例: Event_Date__c、Start_Date__c |
End Date Field API NameEnd Date Field と表示される場合もありますendDateField | ✓ | ✓ | ✓ | String | 空欄 | 子オブジェクトの終了日項目の API 名。設定すると、連続して選択した日付を日付ごとのレコードにせず、開始日と終了日を持つ 1 件のレコードにまとめます。例: End_Date__c |
Relationship Field API NameParent Record Relationship Field と表示される場合もありますrelationshipFieldApiName | ✓ | ✓ | ✓ | String | 空欄 | 子オブジェクトから親レコードへの参照項目の API 名。例: Account__c、Contact__c、Order__c |
Load Existing DatesLoad Existing Bookings と表示される場合もありますpreloadExistingDates | ✓ | ✓ | ✓ | Boolean | true | オンにすると、読み込み時に既存の子レコードを取得し、その日付をカレンダーに表示します。Child Object、Date Field、Relationship Field が必要です。 |
Existing Dates ModeExisting Bookings Mode と表示される場合もありますpreloadMode | ✓ | ✓ | ✓ | String | editable | 読み込んだ日付の表示方法を指定します。Load Existing Dates がオンの場合だけ適用されます。有効な値: editable、readonly。既定: editable。editable = 日付は選択状態で、変更できます。readonly = 日付はグレー表示で、削除できません。フローでは自由入力のテキスト欄になるため、これらの値をそのまま入力してください。 |
Save Button LabelsaveButtonLabel | ✓ | ✓ | ✓ | String | 保存 | クリックで保存モードの保存ボタンに表示するテキスト。例: 「日付を保存」、「選択を確定」 |
Record Name FieldrecordNameField | ✓ | ✓ | ✓ | String | 空欄 | レコードのラベルを保存する、子オブジェクトのテキスト項目の API 名。設定すると、ユーザーがラベルを入力するテキスト欄が表示されます。 |
Default Record NamedefaultRecordName | ✓ | ✓ | ✓ | String | 空欄 | レコード名の入力欄にあらかじめ入れておく値。ユーザーは実行時に変更できます。例: 「有給休暇」、「チーム会議」。 |
Append Date/Time to Record NameAppend Date to Record Name と表示される場合もありますappendDateTimeToName | ✓ | ✓ | ✓ | Boolean | true | オンにすると、レコード名に日付を追加します。 |
| 状況と編集 | ||||||
Status FieldstatusField | ✓ | ✓ | ✓ | String | 空欄 | 子オブジェクトの選択リスト (状況) 項目の API 名。設定すると、レコード名の入力欄の横に状況のドロップダウンが表示され、日付を選ぶときに状況を割り当てられます。Status Colors、Ignored Statuses、Status Field Label、Enable Edit Mode に必要です。例: Status__c |
Status ColorsstatusColors | ✓ | ✓ | ✓ | String | 空欄 | 状況の値と 16 進カラーの対応をカンマ区切りで指定します。形式: Value:#hex。状況の色はカレンダーの日付セルに表示されます。Status Field が必要です。例: Confirmed:#22C55E, Tentative:#fbbf24, Pending:#60a5fa, Cancelled:#a1a8b5 |
Status Color DisplaystatusColorDisplay | ✓ | ✓ | ✓ | String | Date: calendar、Date Time: both、Booking: both | 状況の色を表示する場所。Dates コンポーネントで使えるのは 'calendar' だけで、カレンダーの日付セルが状況で色分けされます。 |
Ignored StatusesIgnored Statuses と表示される場合もありますhideBookingsWithStatus | ✓ | ✓ | ✓ | String | 空欄 | カレンダーから非表示にするレコードの状況の値をカンマ区切りで指定します。非表示のレコードは描画されませんが、Salesforce には残ります。Status Field が必要です。例: Cancelled, Rejected |
Selectable Statuses (Status Picker)selectableStatuses | ✓ | ✓ | ✓ | String | 空欄 | 予約の状況の選択で設定できる値をカンマ区切りで指定します。空欄ならすべて選べます (バックオフィス向け)。顧客向けサイトなら例えば 'Scheduled'。選べる値が 1 つだけの場合は自動で選択され、選択欄は非表示になります。Status Field が必要です。 |
Second Picklist FieldsecondStatusField | ✓ | ✓ | ✓ | String | 空欄 | 保存時にユーザーが選ぶ、任意の 2 つ目の選択リスト項目の API 名 (例: Reason__c)。色分けはされません: カレンダーの色は statusField が担当します。表示するには Hover Popover Fields に追加します。フロー、App Builder、コミュニティで動作します。 |
Second Picklist LabelsecondStatusFieldLabel | ✓ | ✓ | ✓ | String | 空欄 | 2 つ目の選択リストのドロップダウンに表示する任意のラベル。空欄なら、コンポーネントが項目の API 名から読みやすい名前を作ります。 |
Selectable Second-Picklist ValuesselectableSecondStatuses | ✓ | ✓ | ✓ | String | 空欄 | 2 つ目の選択リストでユーザーが選べる値の任意の許可リスト (カンマ区切り)。空欄ならすべて選べます。1 つだけ指定した場合は自動で選択され、選択欄は非表示になります。 |
Status Field LabelstatusFieldLabel | ✓ | ✓ | ✓ | String | 空欄 | エンドユーザーに表示する状況のドロップダウンの任意のラベル。ここに項目の API 名を入力しないでください: 表示用のラベル専用です。空欄なら、コンポーネントが Status Field の API 名から読みやすい名前を自動で作ります。 |
Hover Popover FieldshoverFields | ✓ | ✓ | ✓ | String | 空欄 | 既存のレコードがある日付にカーソルを合わせたときに表示する項目の API 名を、カンマ区切りで指定します。項目は子オブジェクトから取得され、リレーション項目にも対応しています。既存のレコードを読み込んでいる場合 (Load Existing Dates) にだけデータが表示されます。例: Name, Status__c, Notes__c。空欄にするとホバー表示は無効になります。 |
Enable Edit ModeenableEditMode | ✓ | ✓ | ✓ | Boolean | true | オンにすると、ユーザーは既存の日付をクリックして日付や状況を編集したり、レコードを削除したりできます。Status Field と Status Colors の両方の設定が必要です。 |
Edit Button LabeleditButtonLabel | ✓ | ✓ | ✓ | String | 空欄 | 編集モードの切り替えボタンのカスタムラベル。空欄なら「日付を編集」になります。 |
Edit Record DisplayeditRecordDisplay | ✓ | ✓ | ✓ | String | 空欄 | 編集モードのレコード一覧に表示する項目とその順番を、カンマ区切りのキーワードで指定します。キーワード: name、status、time、date、resource。空欄時の既定: name, status, time。例: name, date, status |
| 時間枠 | ||||||
Time Display ModetimeDisplayMode | ✓ | String | grid | 時刻の表示方法。有効な値: grid、dropdown。既定: grid。grid = ユーザーがクリックやドラッグで時間帯を選ぶ視覚的なグリッド。dropdown = lightning-input の時刻選択。dropdown モードで共通の選択にするか日付ごとの選択にするかは、Allow Different Times Per Date で指定します。フローでは自由入力のテキスト欄になるため、これらの値をそのまま入力してください。 | ||
Time Interval (Minutes)Time Slot Interval (Minutes) と表示される場合もありますtimeInterval | ✓ | ✓ | Integer | 30 | 時間枠の間隔 (分)。任意の整数が使えます。15、30、60 分が一般的です。例: 30 なら 9:00、9:30、10:00 と表示されます。 | |
Earliest TimeminTime | ✓ | String | 09:00 | 時刻選択に表示する最も早い時刻。24 時間形式 (HH:mm) で指定します。例: 08:00 = 午前 8 時、13:00 = 午後 1 時。空欄なら 0:00 から始まります。 | ||
Latest TimemaxTime | ✓ | String | 18:00 | 時刻選択に表示する最も遅い時刻。24 時間形式 (HH:mm) で指定します。例: 17:00 = 午後 5 時、20:00 = 午後 8 時。空欄なら 23:30 で終わります。 | ||
Start Time FieldStart Time Field API Name と表示される場合もありますstartTimeField | ✓ | String | 空欄 | 時間枠の開始時刻を保存する、子オブジェクトの時間項目の API 名。例: Start_Time__c | ||
End Time FieldEnd Time Field API Name と表示される場合もありますendTimeField | ✓ | String | 空欄 | 時間枠の終了時刻を保存する、子オブジェクトの時間項目の API 名。例: End_Time__c | ||
Allow Different Times Per DateallowDifferentTimes | ✓ | ✓ | Boolean | false | オンにして Time Display Mode が 'dropdown' の場合、日付ごとに時刻選択が表示されます (週ごとにグループ化)。オフにすると、すべての日付で 1 つの時刻を共有します。Time Display Mode が 'grid' の場合は効果がありません。 | |
Enable End TimeenableEndTime | ✓ | Boolean | true | オンにすると、開始時刻の横に終了時刻のドロップダウンを表示し、JSON 出力に startTime と endTime の両方を含めます。dropdown モード (Time Display Mode = 'dropdown') でだけ適用され、grid モードでは効果がありません。 | ||
Group Time Slots by PeriodgroupTimeSlotsByPeriod | ✓ | ✓ | Boolean | false | オンにすると、時間枠を午前、午後、夕方のセクションに分けて表示します。オフ (既定) なら 1 つの平らなグリッドです。Time Display Mode が 'grid' の場合だけ適用されます。 | |
Time Grid OnlytimeGridOnly | ✓ | ✓ | Boolean | false | オンにするとカレンダーを完全に非表示にし、1 つの暗黙の日付の時間枠グリッドだけを表示します。ユーザーは時間枠を選び、レコードはクリックで保存でホストレコードに保存されます (日付を選ぶ手順はありません)。暗黙の日付は Time Grid Date、次に Time Grid Date Field(タイムグリッド日付項目)、どちらもなければ今日になります。 | |
Time Grid DatetimeGridDate | ✓ | ✓ | String | 空欄 | Time Grid Only(タイムグリッドのみ) がオンのときの暗黙の日付を明示する任意の ISO 日付 (YYYY-MM-DD)。最優先で使われます。空欄なら Time Grid Date Field から読み取り、それもなければ今日になります。 | |
Time Grid Date FieldtimeGridDateField | ✓ | ✓ | String | 空欄 | Time Grid Only がオンのとき (レコードページで使う場合)、暗黙の日付を読み取るホストレコードの日付項目の任意の API 名。Time Grid Date が空欄の場合だけ使われます。例: Appointment_Date__c | |
Disable Time Slot Grid (Full-Day Mode)disableTimeSlotGrid | ✓ | Boolean | false | オンにすると、日付だけが重要な終日予約向けに時間枠グリッドを非表示にします。オフ (既定) なら、時間単位の細かい予約のために時間枠グリッドを表示します。 | ||
| リソースと定員 | ||||||
Resource Object API NameresourceObjectApiName | ✓ | String | 空欄 | 予約可能なリソースを保存しているオブジェクトの API 名。1 レコード = ドロップダウンに表示される 1 つのリソースです。例: Room__c、Equipment__c、Vehicle__c、Staff__c | ||
Resource Name FieldresourceNameField | ✓ | String | Name | リソースの表示名を持つ項目の API 名。通常は 'Name' です。 | ||
Resource Filter Field (optional)resourceFilterField | ✓ | String | 空欄 | 選択欄に表示するリソースを絞り込むための、リソースオブジェクトの項目の API 名。Resource Filter Value と組み合わせて使います。複数の項目を組み合わせる (AND) には ';' を使います。例: 'Active__c' (チェックボックス項目 1 つ)、'Type__c' (選択リスト 1 つ)、'Type__c;Building__c' (2 つの項目を AND で組み合わせ)。空欄ならすべてのリソースを表示します。 | ||
Resource Filter Value (optional)resourceFilterValue | ✓ | String | 空欄 | フィルター項目が一致すべき値。1 つの項目内の値を ',' で区切ると OR (IN 句) になります。値を ';' で区切ると複数の項目にまたがる AND になります (Resource Filter Field の項目数と一致させる必要があります)。例: 'true': Active=true。'Conference Room': Type=Conference Room。'North,South': Building が North または South。'Conference Room;North': Type=Conference Room かつ Building=North。'Conference Room;North,South': Type=Conference Room かつ Building が North または South。 | ||
Business Hours Start FieldbusinessHoursStartField | ✓ | String | 空欄 | リソースが毎日予約可能になる時刻を定義する、リソースオブジェクトの時間項目の API 名。例: Business_Hours_Start__c (午前 8 時なら 08:00:00.000Z)。空欄なら、設定した時間範囲全体の時間枠を使います。 | ||
Business Hours End FieldbusinessHoursEndField | ✓ | String | 空欄 | 毎日の最終予約可能時刻を定義する、リソースオブジェクトの時間項目の API 名。例: Business_Hours_End__c (午後 6 時なら 18:00:00.000Z)。 | ||
Allow Multiple ResourcesAllow Booking Multiple Resources と表示される場合もありますallowMultipleResources | ✓ | Boolean | false | オンにすると、ユーザーはチェックボックスで複数のリソースを選び、まとめて同時に予約できます。タイムグリッドには、選択したすべてのリソースで空いている時間枠だけが表示されます。例: 会議室とプロジェクターを同時に予約する。 | ||
Allow No ResourceAllow Save Without Picking a Resource と表示される場合もありますallowNoResource | ✓ | Boolean | false | オンにすると、ユーザーはリソースを選ばずに保存でき、保存したレコードのリソース参照は空になります。リソースが空なら「全員に適用」を意味する、休業日や利用停止日を書き込む画面向けです。リソースごとのフィルター (blockedDatesResourceField) で休業日を読み取る側のカレンダーは、空のリソースを地域全体の休業として扱います。そのため allowNoResource と組み合わせると、「アドバイザーの指定は任意」というパターンが実現します。リソースを必ず選ぶ通常の予約では、オフ (既定) のままにしてください。 | ||
Booking Object API NameresourceBookingObject | ✓ | String | 空欄 | 予約レコードを作成するオブジェクトの API 名。日付 × リソースごとに 1 レコード。例: Room_Booking__c、Equipment_Reservation__c | ||
Booking Date FieldbookingDateField | ✓ | String | 空欄 | 予約オブジェクトの日付項目の API 名。日付型である必要があります (日付/時間型は不可)。例: Booking_Date__c | ||
Booking Resource FieldbookingResourceField | ✓ | String | 空欄 | 予約オブジェクトからリソースを指す参照項目の API 名。例: Room__c (Room_Booking__c から Room__c への参照) | ||
Booking Start Time FieldbookingStartTimeField | ✓ | String | 空欄 | 予約オブジェクトの開始時刻の時間項目の API 名。例: Start_Time__c。時間枠のない日単位の予約なら空欄にします。 | ||
Booking End Time FieldbookingEndTimeField | ✓ | String | 空欄 | 予約オブジェクトの終了時刻の時間項目の API 名。例: End_Time__c。終了時刻は選択した時間枠から自動で計算されます。 | ||
Book Button LabelresourceBookButtonLabel | ✓ | String | 予約 | 予約を確定するボタンに表示するテキスト。例: 「今すぐ予約」、「予約する」、「予約を確定」 | ||
Capacity FieldcapacityField | ✓ | String | 空欄 | 時間枠ごとの同時予約の上限を定義する、リソースオブジェクトの数値項目の API 名。設定すると時間枠に X/Y バッジが表示され、満員になるまで予約を受け付けます。研修室、フリーアドレス席、クラスの受講登録に最適です。1 つの時間枠に 1 件の予約にするなら空欄にします。例: Capacity__c | ||
Capacity Aggregation (multi-resource)capacityAggregation | ✓ | String | Combined | 定員予約モード専用 (Capacity Field が必要)。複数のリソースを選択したときの X/Y の計算方法を指定します。COMBINED (既定) は予約数と定員の両方を合算します。各リソースが独立した在庫の場合に適しています (例: 定員 5 の会議室 4 つに 4 件 = 4/20)。DISTINCT は固有のイベントを数え (日付 + 開始時刻 + 終了時刻が同じレコードは、リソースが違っても 1 件とみなします)、単一リソースの最大定員を使います。1 つのイベントが複数のリソースに同時にまたがる場合に適しています (会議室 4 つに 4 件 = 1/5)。 | ||
Show Availability CountshowAvailabilityCount | ✓ | Boolean | true | オンにすると、リソースパネルに空き状況の詳細 (例: '5 日中 3 日空き') を表示します。ユーザーが予約前に最適なリソースを選ぶのに役立ちます。Resource Object API Name の設定が必要です。 | ||
| 競合 | ||||||
Conflict BehaviorconflictBehavior | ✓ | ✓ | String | block | 選択した日付の時刻が既存のレコードと競合する場合の動作を指定します。'block' (既定): 保存は止められ、競合する日付が強調表示されます。'skip': 保存は行われますが、競合する日付はスキップされます。'allow': 競合を確認しません。グリッド共有モード (Time Display Mode='grid' + Allow Different Times Per Date=OFF) でだけ適用されます。 | |
Buffer Between Bookings (Minutes)bufferMinutes | ✓ | ✓ | Integer | 0 | 既存の各予約の後に、片付けや準備のために空けておく時間 (分)。Booking ではリソースごとに適用されます。バッファー内に始まる時刻は、空き状況を表示するすべての場所 (タイムグリッド、定員の集計、週表示のドラッグ) と保存時に埋まっているものとして扱われ、その後の動作は Conflict Behavior で決まります。例: 15 なら、同じ会議室の会議の間に 15 分空きます。 | |
Conflict Look-Ahead DaysconflictLookAheadDays | ✓ | ✓ | Integer | 360 | 時間枠の競合を確認し、空き状況を読み込む日数。既定: 360。レコード数の多いオブジェクトでは、減らすとパフォーマンスが向上します。 | |
| サブブロック | ||||||
Consolidate Time SpanconsolidateTimeSpan | ✓ | ✓ | Boolean | false | オンにすると、選択した時間枠を、最初の枠の開始から最後の枠の終了までの 1 つの範囲として出力します。選択した枠の間の空き時間は自動でオレンジ色になり、サブブロックとして記録されます。休憩を別に記録しながら、シフト全体の時間 (例: 午前 9 時〜午後 5 時) が必要なスケジュールに使います。grid モードでだけ適用されます。 | |
Sub-Block Button LabelsubBlockModeButtonLabel | ✓ | ✓ | String | 空欄 | 設定すると、ユーザーが時間枠を手動でサブブロック (オレンジ色) にできる切り替えボタンを追加します。勤務時間の端にあるサブブロックに便利です。空欄なら自動のオレンジ色だけを使います。例: 「休憩にする」、「昼休憩にする」。Consolidate Time Span がオンである必要があります。 | |
Show Sub-Block Toggle ButtonshowSubBlockButton | ✓ | ✓ | Boolean | false | オンにすると、タイムグリッドのヘッダーにサブブロックの切り替えボタンを表示します。Consolidate Time Span がオンで、Sub-Block Button Label(サブブロックボタンラベル) が設定されている必要があります。 | |
Sub-Block Object API NamesubBlockObjectApiName | ✓ | ✓ | String | 空欄 | サブブロックレコードを保存する子オブジェクトの API 名。例: Work_Break__c。Consolidate Time Span がオンで、クリックで保存モード (Parent Record Id を設定) である必要があります。 | |
Sub-Block Parent Lookup FieldsubBlockParentLookupField | ✓ | ✓ | String | 空欄 | サブブロックオブジェクトから親レコードへの参照項目。例: Shift__c。Sub-Block Object を設定した場合は必須です。 | |
Sub-Block Date FieldsubBlockDateField | ✓ | ✓ | String | 空欄 | サブブロックオブジェクトの日付項目。例: Break_Date__c。Sub-Block Object を設定した場合は必須です。 | |
Sub-Block Start Time FieldsubBlockStartTimeField | ✓ | ✓ | String | 空欄 | サブブロックオブジェクトの開始時刻項目。例: Break_Start__c。Sub-Block Object を設定した場合は必須です。 | |
Sub-Block End Time FieldsubBlockEndTimeField | ✓ | ✓ | String | 空欄 | サブブロックオブジェクトの終了時刻項目。例: Break_End__c。Sub-Block Object を設定した場合は必須です。 | |
Sub-Block Name FieldsubBlockNameField | ✓ | ✓ | String | 空欄 | ラベルを保存する、サブブロックオブジェクトのテキスト項目。例: Break_Name__c。Sub-Block Object を設定した場合は必須です。 | |
| ブロック日付 | ||||||
Blocked Dates ObjectblockedDatesSourceObject | ✓ | ✓ | ✓ | String | 空欄 | 選択できないようにする日付を取得するオブジェクトの API 名。例: Public_Holiday__c |
Blocked Dates Date FieldblockedDatesDateField | ✓ | ✓ | ✓ | String | 空欄 | ブロック日付オブジェクトの日付項目の API 名。Blocked Dates Object の設定が必要です。 |
Blocked Dates Start Time FieldblockedDatesStartTimeField | ✓ | ✓ | ✓ | String | 空欄 | 任意: 1 日の一部の休業の「開始」を示す、ブロック用オブジェクトの時間項目。開始と終了の両方の時刻項目を設定し、ブロック用レコードに両方の値がある場合、その日はその時間帯だけが休業になります (残りは予約可能です)。終日ブロックなら空欄にします。 |
Blocked Dates End Time FieldblockedDatesEndTimeField | ✓ | ✓ | ✓ | String | 空欄 | 任意: 1 日の一部の休業の「終了」を示す、ブロック用オブジェクトの時間項目。Blocked Dates Start Time Field(ブロック日付開始時刻項目) と組み合わせて使います。 |
Blocked Dates Resource FieldblockedDatesResourceField | ✓ | ✓ | ✓ | String | 空欄 | 任意: 既存の休業日を 1 つのリソースに限定します。ブロック用オブジェクトの参照 (リソース) 項目の API 名を指定します。ブロック用レコードのリソースがカレンダーで選択中のリソースと一致すると、そのリソースだけがその時間帯に休業になります。空欄なら、各休業日はすべてのリソース (地域全体) に適用されます。ブロック自体を有効にするのはこの項目ではなく Blocked Dates Source Object(ブロック日付ソースオブジェクト) です。リソース予約の場合にだけ意味があります。 |
Blocked Dates Filter FieldblockedDatesFilterField | ✓ | ✓ | ✓ | String | 空欄 | 任意: ブロック用オブジェクトのフィルター項目。2 つのモードがあります: (a) 値モード: Blocked Dates Filter Value(ブロック日付フィルター値) を設定すると、ブロック用レコードを <項目> = <値> で絞り込みます (例: Status__c = Cancelled)。(b) 親スコープモード: Filter Value が空欄の場合、この項目を現在のレコードへの参照として扱い、<項目> = recordId で絞り込みます。空欄ならすべてに対してブロックします。 |
Blocked Dates Filter ValueblockedDatesFilterValue | ✓ | ✓ | ✓ | String | 空欄 | 任意: Blocked Dates Filter Field の絞り込みに使う値。設定すると、ブロック用レコードは <filterField> = <filterValue> に一致する必要があります (例: Status__c = Cancelled)。これにより、複数の種類のブロックを同じテーブルに共存させ、各カレンダーがどの種類を適用するかを選べます。 |
| フロー出力 | ||||||
Output Date Ranges as JSONoutputAsJson | ✓ | ✓ | Boolean | false | オンにすると、連続した日付を範囲にまとめて Date Ranges JSON 出力に入れます。MultiDatePickParser アクションで範囲をループ処理する場合に必要です。 | |
Selected Dates (Output)selectedDates | ✓ | ✓ | String[] | 空欄 | 出力: 選択したすべての日付の配列 (ISO 形式 YYYY-MM-DD)。フローでレコードを作成したり、次の画面に渡したりするのに使います。 | |
Date Ranges JSON (Output)selectedDateRangesJson | ✓ | ✓ | String | 空欄 | 出力: 連続した日付を範囲にまとめた JSON。'Output Date Ranges as JSON' がオンの場合にだけ値が入ります。MultiDatePickParser に渡してフローでループ処理します。 | |
Dates With Times JSON (Output)selectedDatesWithTimesJson | ✓ | String | 空欄 | 出力: 各日付と選択した時刻を含む JSON 文字列。MultiDatePickParser に渡してフローでループ処理します。 | ||
Sub-Blocks JSON (Output)subBlocksJson | ✓ | String | 空欄 | 出力: 日付ごとのサブブロック (空き時間・休憩) の時間帯の JSON。Consolidate Time Span がオンの場合にだけ値が入ります。フローのループで子レコードを作成するのに使います。 | ||
Successful Bookings Count (Output)bookingSuccessCount | ✓ | Integer | 空欄 | 出力: 正常に作成された予約レコードの数。フローで確認メッセージを表示するのに使います。 | ||
Conflict Dates (Output)bookingConflictDates | ✓ | String[] | 空欄 | 出力: 既存の予約との競合により予約を作成できなかった日付のリスト。 | ||
フィルターや検索に一致するプロパティはありません。
16. セキュリティとアクセシビリティ
- Salesforce AppExchange セキュリティレビューに合格済み。
- 100% ネイティブ。 データは Salesforce 組織内にとどまります。外部サーバーもコールアウトも使いません。信頼性とセキュリティ を参照してください。
- 常にユーザー自身の権限で。 すべての読み取りと保存はユーザー自身のアクセス権で実行されるため、オブジェクト権限、項目レベルセキュリティ、共有がレコードごとに適用されます。
- アクセシブル。 WCAG 2.1 AA に準拠し、axe-core でテスト済み。VPAT 2.5 も完備しています。
- 9 言語に対応: 英語、スペイン語、フランス語、ドイツ語、日本語、ヒンディー語、ポルトガル語 (ブラジル)、イタリア語、中国語 (簡体字)。
17. 質問やバグ報告は?
このガイドで足りない点や、動作しない箇所を見つけたら、support@multidatepick.com までメールでお知らせください。
自社の組織で試してみませんか?
1 ユーザーあたり月額 $20、すべての機能込み、30 日間の無料トライアル付き。Salesforce AppExchange で近日公開。