Salesforce 開発者とアーキテクトのための MultiDatePick
カレンダーが組織にどう組み込まれるか。設定の保存場所、画面フローが受け取る値、フローでループできる Apex 型、セキュリティの仕組み、組織間で設定を移行する方法を解説します。
MultiDatePick は、管理者が開発者に頼らずに済むように作られています。このページは、それでも開発者やアーキテクトが関わる場面のためのものです。パッケージのレビュー、MultiDatePick を組み込んだフローの構築、Sandbox を経由した設定の移行などです。
パッケージの内容
| 構成要素 | 機能 |
|---|---|
| Date コンポーネント | 複数の日付を選択、期間をドラッグ、繰り返しパターンを追加。日付ごとまたは期間ごとに 1 レコードを保存するか、日付を画面フローに返します。 |
| Date Time コンポーネント | 日付と時間枠 (全日付共通または日付ごと) を競合チェック付きで選択。日付ごと、時間ブロックごとに 1 レコード、または親レコードとサブブロックを保存します。 |
| Booking コンポーネント | 会議室、機器、車両、人 (User を含む任意のオブジェクト) を、定員、営業時間、ブロックする日付、予約ルールに沿って予約します。 |
| セットアップウィザード | 設定を作成する Lightning タブ。ライブプレビューと JSON のインポート、エクスポートに対応。 |
| フローアクション | Parse Date Entries from JSON と Format MultiDatePick Time Range。フロー側でレコードを保存する場合に使います。 |
| 権限セット | MultiDatePick - Setup、MultiDatePick - User、MultiDatePick - All Access、公開サイト用の MultiDatePick - Guest。 |
設定の保存場所
保存した設定はすべてカスタムメタデータレコードです。Config__mdt が設定を保持し、新しい設定は Config_Extension__mdt の Settings__c に JSON として保持されます。ページやフロー画面に配置したコンポーネントは、Config Name で設定を指定します。配置側で設定したプロパティは、設定のテキスト値と数値を上書きします。
- デプロイ可能: 設定はメタデータなので、変更セット、Salesforce CLI、CI/CD パイプラインで、ほかのメタデータと同じように移行できます。
- 移植可能: ウィザードで設定を JSON としてエクスポートし、別の組織にインポートできます。移行先にないオブジェクトや項目はその場でマッピングします。
- レビュー可能: 設定ごとに 1 レコードで、[設定] から読めるため、変更は差分にそのまま現れます。
データはお客様のもの
カレンダーはお客様自身のオブジェクトを読み書きします。同期すべき MultiDatePick 独自のデータモデルも、外部サービスも、コールアウトもありません。選んだ内容は、指定したオブジェクトの通常のレコードとなり、マッピングした項目 (日付、終了日、開始時刻と終了時刻、状況、名前、リソース) に保存されます。そのオブジェクトのトリガー、フロー、入力規則、レポートはこれまでどおり動作します。
画面フローの出力
フロー画面にコンポーネントを配置して Config Name を設定すると、画面のあとで次の値を参照できます:
| 出力 | 種別 | 内容 |
|---|---|---|
| Selected Dates | テキストのコレクション | 選んだ各日付を YYYY-MM-DD 形式で出力。ループして日付ごとに 1 レコードを作成できます。 |
| Date Ranges JSON | テキスト | Output Date Ranges as JSON がオンのとき、選んだ期間をそれぞれ開始日と終了日付きで出力します。 |
| Dates With Times JSON | テキスト | Date Time コンポーネント: 各日付とその開始時刻、終了時刻。 |
| Successful Bookings Count | 数値 | Booking コンポーネント: 保存で作成された予約の件数。 |
Parent Record Id にレコードを渡すと、カレンダーはそのレコードの既存の日付を表示し、新しい日付も自ら保存できます。フロー側で保存したい場合は、ウィザードでフローで保存するを選びます。カレンダーは自分の保存ボタンを隠し、選択内容をフローに渡すだけになります。
フローで選択内容をループする
JSON の出力は、Parse Date Entries from JSON アクションでフローがループできるコレクションに変換できます。Apex を書く必要はありません:
| Apex 定義型 | 項目 |
|---|---|
MultiDatePickEntryCollection | data (エントリ)、totalCount、success、errorMessage |
MultiDatePickEntry | fromDate、toDate、startTime、endTime、resourceId、resourceName、bookingStatus、relatedRecordId、label |
画面フローガイドではループの手順を順を追って説明しています。フローのループに関する記事には、VS Code でデプロイできるスターターフローが 3 つあります。
セキュリティモデル
- クエリと保存はすべてユーザーモードで実行されます。オブジェクト権限、項目レベルセキュリティ、共有設定が、公開サイトのゲストユーザーを含め、カレンダーを使う本人に適用されます。
- データが組織の外に出ることはありません。コールアウトも、外部サーバーも、サブプロセッサーもありません。
- Salesforce セキュリティレビューに合格しています。詳しくは信頼性とセキュリティのページをご覧ください。
- アクセシビリティ: WCAG 2.1 A および AA に対する VPAT 2.5 レポートをアクセシビリティのページで公開しています。
Sandbox から本番環境へ設定を移行する
- セットアップウィザードを使ってSandbox で構築してテストします。
- 設定を移行します。
Config__mdtとConfig_Extension__mdtのレコードを普段のツールでデプロイするか、ウィザードから JSON としてエクスポートして本番環境でインポートします。 - 設定を使っているページやフローを移行します。配置したコンポーネントは設定を名前で参照するので、ほかに変更は不要です。
- 利用するユーザーに権限セットを割り当てます。公開サイトでは MultiDatePick - Guest も割り当てます。
開発者からよくある質問
MultiDatePick を使うのに Apex を書く必要はありますか?
いいえ。コンポーネントが自らレコードを読み込み、保存します。フロー側で保存する場合も、カスタム Apex の代わりにパッケージ付属の Parse Date Entries from JSON アクションを使います。
設定を CI/CD で扱えますか?
はい。各設定はカスタムメタデータレコード (Config__mdt と、新しい設定用の Config_Extension__mdt) なので、ほかのメタデータと同じようにデプロイできます。
MultiDatePick はデータ用のオブジェクトを追加しますか?
いいえ。指定したオブジェクトに保存するので、レコード、自動化、レポートはそのまま使えます。
タイムゾーンと言語はどう扱われますか?
日付と時刻は各ユーザーの Salesforce のタイムゾーンとロケールに従い、画面は 9 言語に翻訳されています。