チェックボックス数式での基本的なロジックの使用
学習の目的
数式項目の概要
数式は、組織のデータに対して計算その他の演算を実行できる強力なツールです。数式を使用して、ハイパーリンクを埋め込むことや、既存の項目で演算を行うこと、条件ロジックを使って金額を表示することなどができます。今までに一度も数式を使ったことがない方は、「数式項目入門」を学習してからこの単元に進んでください。
数式のチェックボックス型の概要
チェックボックスにはオンとオフの 2 つの選択肢があります。数式にとってこれはどのような意味があるのでしょうか? チェックボックス数式とは、真 (true) または偽 (false) のいずれかの論理ステートメントです。たとえば、取引先の従業員数が 500 人以上かどうかをすぐに知りたい場合は、次のシンプルなチェックボックス数式を使用できます。
NumberOfEmployees >= 500
取引先の従業員数が 500 人以上であれば、その取引先のページの [Large Account (大規模取引先)] チェックボックスがオンになります。そうでない場合は、[Large Account (大規模取引先)] がオフになります。
たいていの場合、数式の論理ステートメントはこれよりもはるかに複雑です。チェックボックス数式データ型を最大限に活用するためには、いくつかの基本的な論理ツールが必要です。
基本的な論理演算子
論理関数とは、ほぼどのような会話でも使用される and (および/かつ)、or (または)、not (ではない)、if (もし) などの言葉を堅苦しい言い方にしたものです。たとえば、リンゴは赤い果物で、バナナは黄色い果物です。食料品店で何か赤いものかつ果物を探しているのであれば、リンゴを手に取るでしょう。他方、何か赤いものまたは果物を探しているのであれば、リンゴでもバナナでも構いません。
数式でも、NOT()、AND()、OR()、IF() 関数を使用してこの同じロジックを適用できます。
AND()
1 つ目の引数 = True | 1 つ目の引数 = False | |
---|---|---|
2 つ目の引数 = True | 正しい | 誤り |
2 つ目の引数 = False | 誤り | 誤り |
たとえば、ユーザが取引先責任者カードを見て、メールまたは電話で連絡してもいいかすぐに判断できるようにしたいと考えています。対象の取引先責任者の [電話連絡拒否] および [メール送信除外] がオンの場合は、[連絡不可] という別のチェックボックスがオンになるというしくみです。取引先責任者が [電話連絡拒否] および [メール送信除外] をオンにしている場合にのみこのチェックボックスがオンになるようにするために、AND() 関数を使用します。
チェックボックス数式も、Salesforce の他の数式項目と同じ要領で作成します。
- [設定] で、[クイック検索] ボックスを使用して [オブジェクトマネージャ] を検索します。
- [取引先責任者] | [項目とリレーション] をクリックし、[新規] をクリックします。
- [数式] を選択して、[次へ] をクリックします。
- [項目の表示ラベル] に、「連絡不可」と入力します。[項目名] は自動入力されます。
- [チェックボックス] を選択して、[次へ] をクリックします。
- 次のコードスニペットをコピーして、数式エディタに貼り付けます。
AND(DoNotCall, HasOptedOutOfEmail)
数式エディタには次のとおり表示されます。
1 つ注意点があります。このモジュールで示す数式のサンプルは、比較的簡単なものから極めて複雑なものまでさまざまです。ここでは受講者にわかりやすいように、数式のサンプルを数式エディタの表示ではなく、スニペットで示します。そうすれば、受講者がスニペットをコピーして数式エディタに貼り付けることができます。スニペットをコピーする場合は、スニペットにマウスポインタを置いたまましばらくすると、右上に 3 つのアイコンが示されます。続いて、[クリップボードにコピー] アイコンを使用してスニペットをコピーします。
この数式を使用すると、誰かが [電話連絡拒否] および [メール送信除外] をオンにしている場合は、取引先責任者カードの [連絡不可] という別のチェックボックスがオンになります。2 つのうちの 1 つのみがオンの場合は、[連絡不可] チェックボックスがオフになります。
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) が含まれているかどうかを判断します。
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 と評価します。
NOT( ISBLANK(FirstName) || ISBLANK(LastName) || ISBLANK(Phone) || ISBLANK(Email) || ISBLANK(MailingAddress) )
これで完成です。組織に取引先責任者を表示すれば、この数式を試すことができます。必要な取引先責任者情報がすべて記入されている場合は、取引先責任者が全項目記入済みとマークされ、作成した [Contact Complete (取引先責任者の全項目記入済み)] チェックボックスがオンになります。上記の項目に 1 つでも空白があれば、チェックボックスがオフになります。
!(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)
Is_Executive__c && Department = "Marketing"
IF(Is_Executive__c, Department = "Marketing", false)
IF() ステートメントはネストできます。IF() ステートメント内のどの引数も、別の IF() ステートメントをはじめ、別の論理ステートメントにすることができます。この例では、主取引先責任者を、エグゼクティブに該当し、さらにサンフランシスコのマーケティング部門かニューヨークの営業部門のどちらかに属する人と定義します。そこで、これらの条件を満たした場合にのみオンになるチェックボックスを作成します。
Department = "Marketing" && Is_Executive__c && BEGINS(Phone, "(415)") || Department = "Sales" && Is_Executive__c && BEGINS(Phone, "(212)")
ここでは、取引先責任者が主取引先責任者に該当するための要件をすべて満たした場合に true となる数式が必要です。最初に、以前に作成した [Is Executive (エグゼクティブに該当)] チェックボックスを使用して、取引先責任者がエグゼクティブかどうかをチェックします。取引先責任者がエグゼクティブの場合は、部門が営業かどうかをチェックします。部門も true の場合は、最後に電話番号の市外局番をチェックします。他方、取引先責任者がエグゼクティブではあるが部門が営業ではない場合は、マーケティングかどうかをチェックします。マーケティングの場合は、電話番号の市外局番がサンフランシスコかどうかをチェックします。多くの場合、選択ツリーを作成して一連の IF() ステートメントを図示するとわかりやすくなります。IF() を使用して数式を記述する場合は、まず図表を作成すると便利です。

IF(Is_Executive__c, IF(Department = "Sales", BEGINS(Phone, "212"), IF(Department = "Marketing", BEGINS(Phone, "415"), False)), False)
このような数式で特に重要な点は、明確な改行とスペースを含めることです。そうすれば、後々数式を見た人が、IF() ステートメントがどのようにネストされているのかを把握することができます。
チェックボックス数式の例
- 次のチェックボックス数式は、商談の確度が 50% (0.5) 未満で、期待収益が 10,000 未満の場合に、小規模と指定します。
AND(Probability < 0.5, ExpectedRevenue < 10000)
- 次の数式は、ケースの優先度が高とマークされ、ケースが新規または処理中で、エスカレートされているか 1 週間以上で更新されていない場合に、最優先とマークします。次の数式は、括弧の位置によって実行する内容が異なります。
ISPICKVAL(Priority, "High") && ISPICKVAL (Status, "New") || ISPICKVAL (Status, "Working") && (IsEscalated || Days_Since_Last_Update__c > 7)
たとえば、次の数式は、ケースの優先度が高で、新規または処理中で、エスカレートされているかを確認する場合と、ケースの最後の更新日から 7 日以上経過しているかを確認する場合では、括弧の位置がわずかに異なります。ISPICKVAL(Priority, "High") && ISPICKVAL (Status, "New") || ISPICKVAL (Status, "Working") && IsEscalated || Days_Since_Last_Update__c > 7
- 次の数式は、取引先責任者に電話しても構わない場合にオンになる [Okay to Call (電話可)] チェックボックスを表示します。次の数式は、取引先責任者が [電話連絡拒否] をオンにしているかどうかをチェックします。取引先責任者がオンにしていない場合は、この数式が電話番号項目が空白でないことを確認します。
IF(NOT(DoNotcall), NOT(ISBLANK(Phone)), false)