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 — 「特定の選択リスト値が選択された場合に別の項目を必須にする」という典型的な入力規則の例