Administrator 練習問題 Q175
Northern Trail Outfitters(NTO)は、新規連絡先を保存する前に検証することを希望しています。ユーザーがLeadSource選択リストの値を「その他」に選択した場合、NTOはSource__cというカスタムテキスト項目にも値を入力したいと考えています。この要件を満たすには、プラットフォーム管理者はどのような検証ルールを設定する必要がありますか?
左の○で回答を選択。本文を押すと横線で除外でき、もう一度押すと戻せます。
1つ選択してください(0/1)
正答:C. AND(ISPICKVAL(LeadSource,'Other'), ISBLANK(Source__c))
解説
前提知識
入力規則(検証ルール)の考え方
入力規則で最初に押さえるべきなのは、数式が TRUE になったときにエラーになるという点です。「正しい状態」を書くのではなく、「あってはいけない状態」を書きます。 今回のあってはいけない状態は次の通りです。
リードソースが「その他」なのに、Source__c が空である これをそのまま数式にすればよいだけです。「その他のときは入力させたい」という要件文を、そのまま肯定形で書こうとすると必ず間違えます。
選択リストを数式で扱う方法
選択リスト項目は、数式の中で文字列としてそのまま比較できません。専用の関数を使います。
- ISPICKVAL(項目, ‘値’):選択リストの値が指定の値かどうかを判定します。
- TEXT(項目):選択リストの値を文字列に変換します。
TEXT(LeadSource) = 'Other'という書き方も可能です。LeadSource = 'Other'のように直接比較すると、数式のコンパイルエラーになります。
空かどうかを判定する方法
- ISBLANK(項目):値が空かどうかを判定します。テキスト・数値どちらにも使えます。
- ISNULL は古い関数で、テキスト項目には推奨されません。テキスト項目では ISBLANK を使います。
Source__c = ''という書き方も一応動作しますが、公式が推奨するのは ISBLANK です。
設問の状況を分解する
- 対象は取引先責任者(連絡先)の保存時。→ 入力規則を使う場面です。
- 条件:LeadSource が「その他(Other)」。→ 選択リストの判定が必要です。
- そのとき Source__c にも値を入れさせたい。→ 空だったらエラーにします。
- したがって数式は「選択リストが Other」かつ「Source__c が空」を AND で結びます。 初学者が誤解しやすいのは、「入れさせたいのだから、入っている状態を書けばいい」と考えてしまう点です。入力規則は逆です。エラーにしたい状態を書きます。この一点さえ徹底すれば、否定演算子(NOT)が並ぶ選択肢はほぼ落とせます。
選択肢の検討
A. AND(LeadSource = ‘Other’, Source__c = ”) → △(惜しいが不正解)
条件の組み立て方(Other かつ 空ならエラー)は正しいのですが、選択リストを直接文字列比較しているため保存できません。選択リスト項目には ISPICKVAL または TEXT が必要です。ロジックは合っているのに構文で落ちる、というもっとも惜しいパターンです。これが正解になる場面は、LeadSource がテキスト項目だった場合です。
B. AND(NOT(LeadSource = ‘Other’), NOT(Source__c = ”)) → ✕
意味は「LeadSource が Other ではなく、かつ Source__c が空ではないときにエラー」です。要件と真逆で、Other 以外を選んで Source__c を丁寧に入力したユーザーが弾かれます。加えて、A と同じく選択リストの直接比較という構文の問題も抱えています。
C. AND(ISPICKVAL(LeadSource,‘Other’), ISBLANK(Source__c)) → ⭕ 正解
「LeadSource が Other」かつ「Source__c が空」のときにエラーになります。要件そのものです。選択リストには ISPICKVAL、テキスト項目の空判定には ISBLANK と、公式が推奨する関数を正しく使っています。
D. AND(NOT(ISPICKVAL(LeadSource,‘Other’))), NOT(ISBLANK(Source__c)) → ✕
まず、括弧の対応が壊れており構文エラーです。AND の閉じ括弧が NOT の直後に来てしまい、2つ目の条件が AND の外に出ています。仮に括弧を直したとしても、意味は「Other ではなく、かつ Source__c が入力されている場合にエラー」となり、要件と真逆です。関数名だけ見て選ぶと引っかかる選択肢です。
管理者としての対処手順
- [設定]→[オブジェクトマネージャ]→[取引先責任者]→[入力規則]→[新規]。
- 規則名を分かりやすく付ける(例:
LeadSource_Other_Requires_Source)。 - エラー条件数式に
AND(ISPICKVAL(LeadSource,'Other'), ISBLANK(Source__c))を入力する。 - [構文を確認]を押し、エラーがないことを確かめる。
- エラーメッセージを具体的に書く(例:「リードソースが『その他』の場合は、Source を入力してください」)。
- エラー箇所を
Source__cの項目に設定する。項目に紐づけると、ユーザーの画面でその項目の直下にメッセージが出るため、はるかに親切です。 - 有効化して保存し、次の3パターンでテストする。
- LeadSource = Other、Source__c 空 → エラーになること
- LeadSource = Other、Source__c 入力あり → 保存できること
- LeadSource = Web、Source__c 空 → 保存できること
あわせて覚えておきたいポイント
- 入力規則は「エラーにしたい条件」を書く。 迷ったら、要件文を「〜なのに〜されていない」という形に言い換えてから数式にします。
- 選択リストは ISPICKVAL か TEXT。 直接
=で比較できないのは、選択リストと複数選択リストの共通ルールです。 - データローダや API 経由でも入力規則は効く。 一括取り込みで大量エラーになることがあるため、移行時は一時的な無効化を検討します。
- フローの「入力を検証」との使い分け。 画面フローの中で検証したい場合はフロー側の検証を使いますが、どの経路から保存されても必ず守らせたいルールは入力規則にします。
出典(Salesforce公式)
- ISPICKVAL() — 「選択リストの値が指定した文字列と一致するかどうかを判定する。選択リスト項目を数式で扱う場合はこの関数を使用する」(Cの構文の根拠、およびA・Bが誤りである根拠)
- ISBLANK() — 「式に値が含まれていない場合に true を返す。テキスト項目では ISNULL ではなく ISBLANK を使用する」
- Define Validation Rules — 「エラー条件数式が true と評価された場合にレコードの保存が阻止され、エラーメッセージが表示される」(入力規則の基本原則)
- Examples of Validation Rules — 「特定の選択リスト値が選択された場合に別の項目を必須にする」という典型的な入力規則の例