べにおブログ

学んだことを、ゆっくり深く。

Salesforceで項目を入力必須にする方法を整理する

結論:まずこれだけ覚える

Salesforceで「この項目を空欄のまま保存させたくない」を実現する代表的な方法は5つあります。使い分けの基準は、どの経路に効かせるか、条件分岐が必要か、単純な入力チェックか複雑な処理かです。

方法効く範囲設定場所使いどころ
項目定義で「必須」にする(普遍的に必須の項目)全レコードタイプ・全ページレイアウト・API・データローダ・一括処理までオブジェクトマネージャ → 項目とリレーション例外なく必ず必要な項目
ページレイアウトで「必須」にするそのページレイアウトの画面入力のみページレイアウトエディタ画面から入れる人にだけ強制したいとき
Dynamic Formsで「必須」にするそのLightningレコードページ上の項目のみLightningアプリケーションビルダーLightningページ単位で必須にしたいとき
入力規則(検証ルール)保存されるすべての経路。条件付きで制御できるオブジェクトマネージャ → 入力規則「特定の条件のときだけ必須」にしたいとき
レコードトリガーフローの[カスタムエラー]フローを起動するレコード変更。エラー時は変更をロールバックFlow Builder複雑な分岐や関連データの確認を伴う入力チェックを行いたいとき

試験での基本的な覚え方は、無条件・全経路で必須なら項目定義、単純な条件付き必須なら入力規則です。レコードトリガーフローの[カスタムエラー]でも保存を止められますが、単純な入力チェックに不要な複雑さを持ち込まないようにします。


用語をひとつずつ噛み砕く

普遍的に必須の項目(Universally Required Field)

カスタム項目を作るときに表示される[必須]チェックボックスをオンにしたものです。公式ドキュメントは「普遍的に必須の項目は、すべてのレコードタイプで必須になる」「編集ページには、項目レベルセキュリティに関わらず普遍的に必須の項目が常に表示される」と定義しています。 ポイントは3つあります。

  1. レコードタイプやページレイアウトで逃げられない
  2. 画面だけでなく、API・データローダ・インポートウィザードからの登録でも空欄なら失敗する
  3. 標準項目は普遍的に必須にできない(公式に明記されています)。カスタム項目だけの機能です

ページレイアウトの「必須」

ページレイアウトエディタで項目をダブルクリックすると出てくる[必須]チェックボックスです。これはその画面から入力するときだけ効きます。データローダで流し込めば空欄でも通ります。

Dynamic Formsの「必須」

Dynamic Formsを使用するLightningレコードページでは、Lightningアプリケーションビルダーの項目プロパティで[必須]を設定できます。この設定はその項目がそのLightningページに表示される場合だけ効き、同じ項目のすべての表示箇所やAPI更新に適用されるわけではありません。 また、実行時にコンポーネント表示条件で項目が非表示になると、値がなくても保存できます。全経路で必須にする用途ではなく、特定のLightningページ上の入力体験を調整する機能として使います。

入力規則(検証ルール)

「この条件に当てはまったらエラーにする」という式を書く仕組みです。保存のたびに評価され、結果が true になるとエラーメッセージを出して保存を止めます。画面・API・データローダ・フロー、どの経路でも効きます。 条件付きで必須にできるのが大きな強みです。「フェーズが完了のときだけ理由を必須にする」といった単純な要件では、入力規則が第一候補です。現在はレコードトリガーフローの[カスタムエラー]でも保存を止められるため、「入力規則でしか実現できない」という意味ではありません。

レコードトリガーフローの[カスタムエラー]

レコードトリガーフローでは、保存前パスまたは保存後パスに[カスタムエラー]要素を配置できます。エラーが発生すると、フローを起動した変更はロールバックされ、レコードページ全体または特定項目のインラインにエラーメッセージを表示できます。 関連レコードを参照する複雑な判定や、複数段階の分岐と入力チェックを同じ自動化で扱う場合に有効です。一方、空欄判定だけなら入力規則の方が意図を読み取りやすく、保守もしやすいことが一般的です。なお、値を自動補完するフローは「利用者に入力を必須にする」のではなく、システムが値を設定する別の設計です。


落とし穴:必須にできない項目がある

リッチテキスト形式のテキストエリア項目は、項目定義の[必須]チェックボックスを持ちません。数式項目・自動採番項目・チェックボックスなども同様に、必須化の対象外です。 リッチテキスト項目を実質的に必須にしたい場合は、入力規則で「空欄ならエラー」を書きます。Salesforce公式は空欄判定の例として LEN(Rich_Text_Area__c) = 0 を示しています。ただし、画像だけを挿入した場合は文字数で正しく判定できないため、画像利用を含む入力要件ではサンドボックスで挙動を確認し、必要に応じて設計を見直します。


よくある質問

Q. ページレイアウトで必須にしたのに、データローダで空欄が入ってしまいます。 A. 仕様どおりです。ページレイアウトの必須は画面入力にしか効きません。全経路で止めたいなら項目定義の必須か入力規則を使ってください。 Q. レコードタイプごとに必須項目を変えたいです。 A. 項目定義の必須は全レコードタイプに効いてしまうため使えません。レコードタイプごとに別のページレイアウトを割り当てて、そちらで必須にします。全経路で止めたい場合はレコードタイプを条件に含めた入力規則を書きます。 Q. 必須にするとレポートやビューに影響しますか。 A. しません。必須化は保存時の検証だけに関わります。


出典(Salesforce公式)