Salesforce AppExchange で近日公開

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 定義型項目
MultiDatePickEntryCollectiondata (エントリ)、totalCount、success、errorMessage
MultiDatePickEntryfromDate、toDate、startTime、endTime、resourceId、resourceName、bookingStatus、relatedRecordId、label

画面フローガイドではループの手順を順を追って説明しています。フローのループに関する記事には、VS Code でデプロイできるスターターフローが 3 つあります。

セキュリティモデル

  • クエリと保存はすべてユーザーモードで実行されます。オブジェクト権限、項目レベルセキュリティ、共有設定が、公開サイトのゲストユーザーを含め、カレンダーを使う本人に適用されます。
  • データが組織の外に出ることはありません。コールアウトも、外部サーバーも、サブプロセッサーもありません。
  • Salesforce セキュリティレビューに合格しています。詳しくは信頼性とセキュリティのページをご覧ください。
  • アクセシビリティ: WCAG 2.1 A および AA に対する VPAT 2.5 レポートをアクセシビリティのページで公開しています。

Sandbox から本番環境へ設定を移行する

  1. セットアップウィザードを使ってSandbox で構築してテストします。
  2. 設定を移行します。Config__mdt と Config_Extension__mdt のレコードを普段のツールでデプロイするか、ウィザードから JSON としてエクスポートして本番環境でインポートします。
  3. 設定を使っているページやフローを移行します。配置したコンポーネントは設定を名前で参照するので、ほかに変更は不要です。
  4. 利用するユーザーに権限セットを割り当てます。公開サイトでは MultiDatePick - Guest も割り当てます。

開発者からよくある質問

MultiDatePick を使うのに Apex を書く必要はありますか?

いいえ。コンポーネントが自らレコードを読み込み、保存します。フロー側で保存する場合も、カスタム Apex の代わりにパッケージ付属の Parse Date Entries from JSON アクションを使います。

設定を CI/CD で扱えますか?

はい。各設定はカスタムメタデータレコード (Config__mdt と、新しい設定用の Config_Extension__mdt) なので、ほかのメタデータと同じようにデプロイできます。

MultiDatePick はデータ用のオブジェクトを追加しますか?

いいえ。指定したオブジェクトに保存するので、レコード、自動化、レポートはそのまま使えます。

タイムゾーンと言語はどう扱われますか?

日付と時刻は各ユーザーの Salesforce のタイムゾーンとロケールに従い、画面は 9 言語に翻訳されています。