進行状況の追跡を始めよう
Trailhead のホーム
Trailhead のホーム

チェックボックス数式での基本的なロジックの使用

学習の目的

この単元を完了すると、次のことができるようになります。
  • チェックボックス数式の戻り値のデータ型とは何かを説明する。
  • IF()AND()NOT()OR() 関数を難なく使用する。
  • チェックボックス型の数式の使用事例について説明する。
  • チェックボックス型を使用して数式を作成する。

数式項目の概要

数式は、組織のデータに対して計算その他の演算を実行できる強力なツールです。数式を使用して、ハイパーリンクを埋め込むことや、既存の項目で演算を行うこと、条件ロジックを使って金額を表示することなどができます。今までに一度も数式を使ったことがない方は、「数式項目の使用」を学習してからこの単元に進んでください。

数式のチェックボックス型の概要

チェックボックスにはオンとオフの 2 つの選択肢があります。数式にとってこれはどのような意味があるのでしょうか? チェックボックス数式とは、真 (true) または偽 (false) のいずれかの論理ステートメントです。たとえば、取引先の従業員数が 500 人以上かどうかをすぐに知りたい場合は、次のシンプルなチェックボックス数式を使用できます。

NumberOfEmployees >= 500

取引先の従業員数が 500 人以上であれば、その取引先のページの [Large Account (大規模取引先)] チェックボックスがオンになります。500 人未満の場合は、[Large Account (大規模取引先)] がオフになります。

たいていの場合、数式の論理ステートメントはこれよりもはるかに複雑です。チェックボックス数式データ型を最大限に活用するためには、いくつかの基本的な論理ツールが必要です。

基本的な論理演算子

論理関数とは、ほぼどのような会話でも使用される and (および/かつ)、or (または)、not (ではない)、if (もし) などの言葉を堅苦しい言い方にしたものです。たとえば、リンゴは赤い果物で、バナナは黄色い果物です。食料品店で何か赤いものかつ果物を探しているのであれば、リンゴを手に取るでしょう。他方、何か赤いものまたは果物を探しているのであれば、リンゴでもバナナでも構いません。

数式でも、NOT()AND()OR()IF() 関数を使用してこの同じロジックを適用できます。

AND()

組み込みの AND() 関数は、2 つ以上引数を取ります。そして、両方の引数が true の場合に限り true が返されます。このロジックは表にするとわかりやすくなります。
1 つ目の引数 = True 1 つ目の引数 = False
2 つ目の引数 = True 正しい 誤り
2 つ目の引数 = False 誤り 誤り

たとえば、ユーザが取引先責任者カードを見て、メールまたは電話で連絡してもいいかすぐに判断できるようにしたいと考えています。対象の取引先責任者の [電話連絡拒否] および [メール送信除外] がオンの場合は、[連絡不可] という別のチェックボックスがオンになるというしくみです。取引先責任者が [電話連絡拒否] および [メール送信除外] をオンにしている場合にのみこのチェックボックスがオンになるようにするために、AND() 関数を使用します。

チェックボックス数式も、Salesforce の他の数式項目と同じ要領で作成します。

  1. [設定] から、[クイック検索] ボックスに「取引先責任者」と入力し、[取引先責任者] | [項目] を選択します。
  2. 取引先責任者の [カスタム項目 & リレーション] セクションまでスクロールして [新規] をクリックします。
  3. [数式] を選択して、[次へ] をクリックします。
  4. [項目の表示ラベル] に、「連絡不可」と入力します。[項目名] は自動入力されます。
  5. [チェックボックス] を選択して、[次へ] をクリックします。
  6. 次のコードスニペットをコピーして、数式エディタに貼り付けます。

    AND(DoNotCall, HasOptedOutOfEmail)

    数式エディタには次のとおり表示されます。

    [連絡不可] チェックボックス数式

1 つ注意点があります。このモジュールで示す数式のサンプルは、比較的簡単なものから極めて複雑なものまでさまざまです。ここでは受講者にわかりやすいように、数式のサンプルを数式エディタの表示ではなく、スニペットで示します。そうすれば、受講者がスニペットをコピーして数式エディタに貼り付けることができます。スニペットをコピーする場合は、スニペットにマウスポインタを置いたまましばらくすると、右上に 3 つのアイコンが示されます。続いて、[クリップボードにコピー] アイコンを使用してスニペットをコピーします。

数式を入力するときは、いつものとおり高度な数式エディタを使用します。高度な数式エディタにアクセスするには、数式エディタの [高度な数式] タブを選択します。高度な数式エディタを使用すると、このモジュール全体で必要となるさまざな関数や演算子に簡単にアクセスできます。
メモ

メモ

数式項目はカスタム項目として作成できますが、入力規則としても作成できます。入力規則を使用した場合は、数式にとって無効なデータのあるレコードをユーザが保存できません。入力規則はデータの品質管理の点では効果的な方法ですが、高度な機能には高度な責任を伴います。何よりも避けたいことは、レコードを保存できないというユーザの不満です。ですから、高度な機能は賢く利用します。入力規則についての詳細は、こちらをクリックしてください。

この数式を使用すると、誰かが [電話連絡拒否] および [メール送信除外] をオンにしている場合は、取引先責任者カードの [連絡不可] という別のチェックボックスがオンになります。2 つのうちの 1 つのみがオンの場合は、[連絡不可] チェックボックスがオフになります。

メモ

メモ

AND() 関数を記述する場合いくつかの方法があります。AND() を使用した関数として記述することも、2 つのステートメントを && で連結した演算子として記述することもできます。この場合、AND(DoNotCall, HasOptedOutOfEmail)DoNotCall && HasOptedOutOfEmail は同等です。AND() と置換可能な && を、2 つのテキスト文字列を連結する & と混同しないようにします。

3 つの条件をチェックしたいという場合も心配いりません。AND() 演算子には 2 つ以上の条件を使用できます。取引先責任者の [電話連絡拒否][メール送信除外][Fax 送信除外] がすべてオンであれば、その取引先責任者の [連絡不可] チェックボックスをオンにする場合も、AND() 演算子で問題なく実行できます。
AND(DoNotCall, HasOptedOutOfEmail, HasOptedOutOfFax)

この数式を使用すると、[電話連絡拒否][メール送信除外][Fax 送信除外] の 3 つのチェックボックスがすべてオンの場合にのみ [連絡不可] チェックボックスがオンになります。いずれか 1 つ (または 2 つあるいは 3 つとも) オフの場合は、取引先責任者のページの [連絡不可] がオフになります。

OR()

OR() 関数は AND() 関数とよく似ています。この関数も 2 つ以上の引数を取ります。ただし AND() とは異なり、OR() は、条件の少なくとも 1 つが true であれば true が返され、引数がすべて false の場合にのみ false が返されます。

1 つ目の引数 = True 1 つ目の引数 = False
2 つ目の引数 = True 正しい 正しい
2 つ目の引数 = False 正しい 誤り

取引先責任者オブジェクトの別の例を見てみましょう。たとえば、取引先責任者が組織のエグゼクティブレベルである場合にのみ、チェックボックスがオンになるようにするとします。その人がエグゼクティブレベルかどうかは役職の最初に「最高」 (最高経営責任者、最高執行責任者など) が付いているかどうか、または「社長」という言葉が含まれているかどうか (社長、副社長) で判断します。ご覧のとおり、この説明にすでにまたはという言葉が使用されていることから、この数式に OR() 演算子が必要なことは容易に想像できます。

この数式を機能させるために、いくつかのテキスト関数を使用します。テキスト数式については、「テキスト数式の使用」で説明します。

  • BEGINS(text, compare_text) は、文字列 (text) の先頭が別の文字列 (compare_text) かどうかを判断します。
  • CONTAINS(text, compare_text) は、文字列 (text) 内のいずれかの位置に別の文字列 (compare_text) が含まれているかどうかを判断します。
チェックボックス型の数式項目を作成して、「Is Executive (エグゼクティブに該当)」という名前を付けます。次の数式を入力します。
OR(Begins(Title, "Chief"), CONTAINS(Title, "President"))

AND() 関数の場合と同様に、OR() を記述する場合もいくつかの方法があります。たとえば、BEGINS(Title , "Chief") || CONTAINS(Title , "President") と記述します。

OR() は、AND() と同様、引数を 2 つ以上取ることができます。取引先責任者の [役職] に「エグゼクティブ」という言葉が含まれているかどうかもチェックする場合は、次の数式を使用します。
BEGINS(Title, "Chief") ||
CONTAINS(Title, "President") ||
CONTAINS(Title, "Executive")

NOT()

NOT() 関数は予想どおりのことを行います。つまり、true のものを false に変更し、false のものを true に変更します。たとえば、取引先責任者カードの重要な情報に不足がないかどうかを示すチェックボックスを取引先責任者のページに表示するとします。この例では、姓、名、電話番号、メールアドレス、郵送先住所が記載されていれば、取引先責任者を全項目記入済みとみなします。次の数式は、これらの項目のいずれも空白でない場合にのみ true と評価します。

取引先責任者の上記の情報が記入されているかどうかをチェックするために、ISBLANK() 関数を使用します。ISBLANK() は項目を引数にとり、その項目が空白の場合は true、記入されている場合は false を返します。
NOT(
  ISBLANK(FirstName) || 
  ISBLANK(LastName) ||
  ISBLANK(Phone) ||
  ISBLANK(Email) ||
  ISBLANK(MailingAddress)
)
メモ

メモ

数式では関数と演算子間のスペースや改行は関係ないため、ここに表示されている改行やスペースは必要ありません。ただし、数式に改行やスペースを含めると見やすくなります。また、後々この数式を理解または更新する必要が生じた人にとってもわかりやすくなります。

これで完成です。組織に取引先責任者を表示すれば、この数式を試すことができます。必要な取引先責任者情報がすべて記入されている場合は、取引先責任者が全項目記入済みとマークされ、作成した [Contact Complete (取引先責任者の全項目記入済み)] チェックボックスがオンになります。上記の項目に 1 つでも空白があれば、チェックボックスがオフになります。

NOT() を簡潔な感嘆符で記述することもできます。この表記法を用いた場合は、この例の数式の見た目が若干異なりますが、機能は同じです。
!(ISBLANK(FirstName) || 
ISBLANK(LastName) ||
ISBLANK(Phone) ||
ISBLANK(Email) ||
ISBLANK(MailingAddress))

IF()

AND()OR() などの論理演算子を羅列する代わりに、IF() ステートメントを使用することもできます。IF() は 3 つの引数を取り、IF(test, result, alternate) という形式になります。わかりやすくいうと、test が true の場合は、result を評価します。true でない場合は、alternate を評価します。

ここで食料品店に戻って、再び赤い果物を探しているとします。AND()OR() を使用してこのシナリオを記述する方法は心得ていますが、IF() ステートメントを使用することも検討できます。最初に、商品を 1 つ手に取って、それが果物であるかどうかをチェックします。果物であれば、赤いかどうかをチェックします。IF() ステートメントを使用して商品選定数式を記述する場合、その判断プロセスは次のようになります。

IF(Mystery_Produce = "Fruit", Mystery_Produce_Color = "Red", false)
数式でも if に基づくこの同じロジックを適用できます。たとえば、取引先責任者が主取引先責任者かどうかを知りたいとします。主取引先責任者を、エグゼクティブ (以前に作成した [Is Executive (エグゼクティブに該当)] 数式項目を使用) で、マーケティング部門に属する人と定義します。and と or を使用してこの判断を行う方法についてはすでに理解しています。
Is_Executive__c && Department = "Marketing"
IF() ステートメントを使用する場合は、次のような数式になります。
IF(Is_Executive__c, Department = "Marketing", false)

IF() ステートメントはネストできます。IF() ステートメント内のどの引数も、別の IF() ステートメントをはじめ、別の論理ステートメントにすることができます。この例では、主取引先責任者を、エグゼクティブに該当し、さらにサンフランシスコのマーケティング部門かニューヨークの営業部門のどちらかに属する人と定義します。そこで、これらの条件を満たした場合にのみオンになるチェックボックスを作成します。

取引先責任者の勤務地がどの都市かは電話番号の市外局番で判断します。サンフランシスコの市外局番は 415、ニューヨークは 212 です。and と or を使用した場合の数式は次のようになります。
Department = "Marketing" && 
Is_Executive__c &&
BEGINS(Phone, "(415)") ||
Department = "Sales" &&
Is_Executive__c &&
BEGINS(Phone, "(212)")
メモ

メモ

論理演算子は、数学演算子と同様に、演算順序が決まっています。AND() は常に OR() より先に評価されます。また、論理演算子を括弧で囲んでグループ化すれば、特定の順序で評価できます。

ここでは、取引先責任者が主取引先責任者に該当するための要件をすべて満たした場合に true となる数式が必要です。最初に、以前に作成した [Is Executive (エグゼクティブに該当)] チェックボックスを使用して、取引先責任者がエグゼクティブかどうかをチェックします。取引先責任者がエグゼクティブの場合は、部門が営業かどうかをチェックします。部門も true の場合は、最後に電話番号の市外局番をチェックします。他方、取引先責任者がエグゼクティブではあるが部門が営業ではない場合は、マーケティングかどうかをチェックします。マーケティングの場合は、電話番号の市外局番がサンフランシスコかどうかをチェックします。多くの場合、選択ツリーを作成して一連の IF() ステートメントを図示するとわかりやすくなります。IF() を使用して数式を記述する場合は、まず図表を作成すると便利です。

論理的なプロセスを示す選択ツリー
ツリーの各ブランチは、数式の IF() ステートメントの条件を表します。
IF(Is_Executive__c,
  IF(Department = "Sales", BEGINS(Phone, "(212)"), False),
  IF(Department = "Marketing", BEGINS(Phone, "(415)"), False))

このような数式で特に重要な点は、明確な改行とスペースを含めることです。そうすれば、後々数式を見た人が、IF() ステートメントがどのようにネストされているのかを把握することができます。

チェックボックス数式の例

  1. 次のチェックボックス数式は、商談の確度が 50% (0.5) 未満で、期待収益が 10,000 未満の場合に、小規模と指定します。
    AND(Probability < 0.5, ExpectedRevenue < 10000)
  2. 次の数式は、ケースの優先度が高とマークされ、ケースがクローズされておらず、エスカレートされているか 1 週間以上で更新されていない場合に、最優先とマークします。次の数式は、括弧の位置によって実行する内容が異なります。

    ISPICKVAL(Priority, "High") &&
    NOT(IsClosed) &&
    (IsEscalated || Days_Since_Last_Update__c > 7)

    たとえば、次の数式は、ケースの優先度が高で、クローズ済みで、エスカレートされているかを確認する場合と、ケースの最後の更新日から 7 日以上経過しているかを確認する場合では、括弧の位置がわずかに異なります。

    (ISPICKVAL(Priority, "High") &&
    NOT(IsClosed) && IsEscalated)|| 
    Days_Since_Last_Update__c > 7
  3. 次の数式は、取引先責任者に電話しても構わない場合にオンになる [Okay to Call (電話可)] チェックボックスを表示します。次の数式は、取引先責任者が [電話連絡拒否] をオンにしているかどうかをチェックします。取引先責任者がオンにしていない場合は、この数式が電話番号項目が空白でないことを確認します。
    IF(NOT(DoNotcall), NOT(ISBLANK(Phone)), false)