Salesforce AppExchange で近日公開

アプリケーションページ、ホームページ、Experience サイト

MultiDatePick はレコードページだけでなく、あらゆる Lightning の画面で動作します。ポイントは Static Parent Record Id という 1 つのプロパティです。

設定の様子を見る トラブルシューティング

これらの画面が違う理由

MultiDatePick は、選択した日付を関連オブジェクトのレコードとして保存し、それぞれを親レコードに紐付けます。コンポーネントが知る必要があるのは、どの親かということだけです。

  • レコードページ (例: 行事のレコード) では、Salesforce が現在のレコードの Id (recordId) を自動的にコンポーネントに渡します。追加の設定は不要です。
  • アプリケーションページ、ホームページ、Experience サイトには「現在のレコード」がありません。Salesforce は何も渡しません。親がなければ保存先がないため、コンポーネントはクリックしても失敗するボタンを表示する代わりに、意図的に保存ボタンを非表示にします。
解決策は Static Parent Record Id プロパティです。特定の親レコードの Id を貼り付けると、コンポーネントはそのレコードのページに置かれているのとまったく同じように動作します。これはビルダーで設定するプロパティです。アップロードしたファイル用の別機能である Salesforce の静的リソースとは関係ありません。

Lightning App Builder でアプリケーションページやホームページに、または Experience Builder でページに MultiDatePick をドラッグすると、プロパティパネルに Static Parent Record Id が表示されます。

Static Parent Record Id とフローの使い分け

Static Parent Record Id はコンポーネントを固定の 1 つの親に向けるため、すべての訪問者が同じレコードを見ます。これが最適な場合もあれば、そうでない場合もあります。ユーザーや訪問ごとにレコードを変える必要があるなら、代わりに画面フローで制御します。コンポーネントをフロー画面に配置し、その Parent Record Id を、フローが実行時に決める変数に関連付けます。

全員に同じレコードなら Static Parent Record Id

  • 公開の予約ページ: ゲスト向けの「予約を申し込む」ページで、すべての予約が同じ親レコード (1 つの事業所、拠点、リソース) に紐付く場合。固定の Id がまさに最適です。
  • 組織全体で 1 つのカレンダー: 「会社の休業日」レコード 1 件や、全員が予約する共有リソース 1 つなど、ユーザーによって変わらないもの。
  • 固定のダッシュボードの起点: アプリケーションページやホームページで、常に同じマスターレコードを指すもの。

目安: 「これは誰のレコード?」という問いの答えが「全員同じもの」なら、Static Parent Record Id を使います。

実行時にレコードを決めるならフロー

  • ユーザーごとのレコード: 各自が自分のレコードだけを見る場合 (例: 各契約者が自分の休暇カレンダーを開く)。フローで所有者または紐付いた取引先責任者が {!$User.Id} と一致する レコードを取得 を行い、Id を保存してコンポーネントに渡します。
  • URL で指定: フローの入力変数がリンクの ?id=… を読み取るので、1 つのページで多くのレコードに対応できます。ゲストでもログインなしで使えます。
  • 先に選択: 1 つ目の画面でユーザーが対象 (従業員、会議室、顧客) を検索・選択し、2 つ目の画面でそのレコードのカレンダーを表示します。
ゲストサイト: ログイン不要の公開サイトでは「ユーザー」は共有のゲスト 1 人なので、ユーザーごと ($User) の判定は使えません。Static Parent Record Id で 1 つのレコードを共有するか、フローで URL パラメーターから決めてください。本当にユーザーごとのカレンダーにするには、ログインユーザーが必要です。

1 分で設定

Config Name によるセットアップのアニメーションデモ: MultiDatePick セットアップウィザードで設定名をコピーし、Lightning App Builder で Resource Booking コンポーネントをページにドロップ。Config Name を貼り付けて Static Parent Record Id を入力すると、設定どおりの予約カレンダーが表示される
セットアップウィザードで設定名をコピーし、親レコードの Id と一緒に貼り付ければ、カレンダーの準備は完了です。それ以外の設定はすべて設定から読み込まれます。

保存ボタンが表示される条件

4 つすべてが揃わないと、保存ボタンは表示されません。

#プロパティ (ビルダーでの表示ラベル)レコードページアプリケーション / ホーム / Experience
1親レコード自動 (recordId)Static Parent Record Id
2子オブジェクトの API 参照名(Child Object API Name)必須必須
3日付項目の API 参照名(Date Field API Name)必須必須
4関連項目の API 参照名(Relationship Field API Name)必須必須

Config Name にセットアップウィザードの設定を指定すれば、2〜4 は自動で入力されます。

配置場所

画面作成する場所公開方法必要なアクセス権
アプリケーションページLightning App Builder で [新規]、[アプリケーションページ]有効化して 1 つ以上のアプリケーションに追加 (タブになります)MultiDatePick - User 権限セット
ホームページLightning App Builder で [新規]、[ホームページ]組織のデフォルトとして有効化するか、アプリケーションマネージャーの [ページ] でアプリケーションごとに有効化MultiDatePick - User 権限セット
Experience サイトExperience Builder の [カスタムコンポーネント]サイトを公開メンバーのプロファイル (またはゲストユーザー): オブジェクトと項目への参照・作成権限と共有ルール。公開サイトの場合: ゲスト用チェックリスト

ホームページのヒント: Existing Dates Mode を readonly にすると、参照専用の「予定一覧」として使えます。

公開ゲストサイト: 5 つのチェックリスト

公開の Experience Cloud ページなら、誰でもログインせずに予約できます。ゲストとしてテストする前に、5 つすべてを済ませてください。最も見落とされやすいのは手順 4 と 5 です。公開ゲストサイトであるライブデモで、実際の動作を確認できます。

#ステップ設定内容
1オブジェクト権限コンポーネントが使う各オブジェクトについて、サイトのゲストユーザーに参照権限を、ゲストが送信する場合は作成権限も付与します。ゲストは編集も削除もできません。これはすべてのアプリケーションに適用される Salesforce のゲストライセンスのルールなので、編集やキャンセルはログインが必要なページで行うようにしてください。
2項目レベルセキュリティカレンダーが表示するすべての項目に参照権限を、書き込むすべての項目 (状況、時刻、リレーション項目を含む) に編集権限を付与します。リソースの営業時間と休業日の項目も忘れずに含めてください。
3ゲスト用の共有ルールゲストがレコードを参照できるよう、ゲストユーザー向けの参照の共有ルールを作成します。ルールを適用するには、オブジェクトのデフォルトの外部アクセス権が非公開である必要があります。メタデータとしてデプロイしたルールは、共有設定で [再計算] を 1 回クリックする必要があります。
4ゲスト用の権限セットサイトのゲストユーザーに MultiDatePick - Guest を割り当てます。カレンダーがデータを読み込むための Apex クラスへのアクセス権と、MultiDatePick のオブジェクトに対してゲストに許可される参照・作成の権限が含まれています。
5公開と有効化公開と有効化は別々の手順です。ゲストに表示されるのは有効化されたサイトだけです。

ゲストに必要な組織の設定がさらに 2 つ

設定理由
デフォルトのレコード所有者ゲストはレコードを所有できないため、Salesforce はゲストの予約をすべてデフォルトの所有者に割り当てます。Experience Workspaces の [管理]、[設定] で指定します。
参照先レコードへの参照権限リソースや親を参照する予約では、そのレコードに対するゲストの参照権限が必要です。ないと相互参照エラーで保存に失敗します。ゲストが予約する対象にはカスタムオブジェクトを使ってください。取引先責任者や取引先へのゲストアクセスは厳しく制限されています。

公開の予約ページを計画中ですか? Salesforce Experience Cloud サイトでのセルフサービス予約で、ゲストにできることと、見せるべき表示を解説しています。

レコードページ以外で使う 6 つのパターン

パターン画面コンポーネント追加するもの
社内の予約ハブ (「会議室を予約」)アプリケーションページBooking定員項目で「3/10」の空き状況をリアルタイム表示
顧客のセルフサービス予約Experience サイトBooking または Date Time顧客ごとのケースや注文を親にする場合はフロー
個人の空き状況 / 休暇ホームページDates状況の色で Pending と Approved をひと目で区別
イベントや研修コースの申し込みExperience サイトまたはアプリケーションページDate TimeMax Dates Allowed で 1 人あたりの回数を制限
ボランティアやシフトの申し込みExperience サイトBooking定員項目で「残り枠」を、状況の色で Open と Full を表示
プロジェクトのマイルストーンアプリケーションページDates または Date Time状況の色 (Planned、In Progress、Done) と 2 か月表示

トラブルシューティング

症状解決策
保存ボタンが表示されない4 つのうちどれかが空欄です。レコードページ以外では、たいてい Static Parent Record Id です。
カレンダーは表示されるが保存に失敗するオブジェクトへのアクセス権がありません。MultiDatePick - User 権限セットを割り当て、サイトではメンバーまたはゲストのプロファイルに参照・作成権限を付与します。
保存時に「項目『…』はオブジェクト『…』に存在しません」API 参照名の入力ミスです。[設定] のオブジェクトマネージャーからコピーしてください。名前空間プレフィックスが必要なのは、他のパッケージのオブジェクトだけです (例: acme__Visit_Date__c)。
サイトのメンバーが自分のレコードを見られない子オブジェクトに共有ルールを追加します (または組織の共有設定を緩めます)。
保存した日付が更新すると消えるLoad Existing Dates をオンのままにします (デフォルトでオンです)。
Static Parent Record Id が「有効ではありません」Relationship Field が参照する親オブジェクトの、実在する 15 文字または 18 文字の Id を使ってください。

ほかの問題ですか? トラブルシューティングに、設定時のすべてのメッセージをスクリーンショットと解決方法付きで掲載しています。

ここにない問題がありますか?

こちらにメールでご質問ください。喜んでお手伝いします。

Support@MultiDatePick.com にメール 「はじめに」に戻る ライブデモを試す