当ブログではアフィリエイト広告を利用しています

Tips集

Salesforceで利用できる数式のベストプラクティス(サンプルあり)

Salesforceの数式項目を利用することで、ノンコーディングで様々な計算を行うことができます。また、計算以外に、他の項目値を使って、判定結果をイメージで表示するなども数式項目で可能です。

【例】優先度:高中低でそれぞれ赤・黄・青のフラッグを表示する

公式サイトなどで利用方法やサンプルが豊富に提供されているので、必要なサンプルがあるかチェックしてみるのもよいでしょう。

Salesforce公式HELPサイト「高度な数式の例

今回は、プロジェクトでよく利用される数式を中心にサンプルコードをご紹介させていただきます。

比較前のNullおよび必須チェック

日付の相関チェックの一つとして、日付(FROM-TO)の逆転チェックを行うことがありますが、このような場合に日付項目の大小を単純に比較するだけでは正しくチェックされない場合があります。数式で比較する際には必ず各比較項目の値が入力されているかチェックしてから評価するように心がけましょう。

数式でNULLチェックを行う場合には、ISNULL関数ではなく、ISBLANK関数を使用することが推奨されています。ISBLANKはISNULLと同等の機能があり、されにテキスト項目のNULLもチェックされるということです。

以下、Salesforce公式HELPサイトより引用

  • 新しい数式では、ISNULL の代わりに ISBLANK を使用してください。ISBLANK には ISNULL と同じ機能がありますが、さらにテキスト項目がサポートされています。Salesforce では継続して ISNULL をサポートしますので、既存の数式を変更する必要はありません。
  • 文字、空白スペース、または 0 が含まれている場合、項目は空ではありません。たとえば、スペースバーで挿入したスペースが含まれている項目は空ではありません。
  • 項目に値がない場合に指定した文字列を返すには、BLANKVALUE 関数を使用します。項目に値があるかどうかだけを確認する場合は、ISBLANK 関数を使用します。
  • この関数を数値項目に使用する場合は、項目に値がなく、空白項目を 0 として処理するように設定されていない場合にのみ、TRUE が返されます。
  • 選択リストを指定してこの関数を使用する場合は、ISBLANK(TEXT(<picklist>)) で選択リスト項目をテキスト値に変換します。

ポイント

ISBLANK関数を使えば、空文字やNULLは一律NULLとして判定されます、ISNULLを使うと以下の項目の場合、FALSEとなり正しく判定できないため注意が必要です!!

  • URL型 → False
  • テキスト型 → False
  • テキストエリア型 → False
  • メール型 → False
  • 電話型 → False
サポーター
ISNULLを使って、NULL判定をしたため想定外の結果になってしまったというケースも多いので注意してください。

数式サンプル集

年月・時間

(閏年)うるう年判定

①指定日付が閏年かを判定する数式 ※例では日付項目として(StartingDate__c)を利用

IF( MOD( YEAR( StartingDate__c ), 400 ) = 0, 
  TEXT(YEAR( StartingDate__c )) & "年は閏年です", 
  IF( AND( MOD( YEAR( StartingDate__c ), 4 ) = 0, MOD(YEAR(StartingDate__c  ), 100 ) != 0) 
    , TEXT(YEAR( StartingDate__c )) & "年は閏年です"
    , TEXT(YEAR( StartingDate__c )) & "年は平年です"
  )
)

実行結果

日付から曜日を判定

①指定日付の曜日を判定する数式 ※例では日付項目として起算日(StartingDate__c)を利用

CASE(
  MOD( StartingDate__c - DATE( 1900, 1, 7 ), 7 ),
    0, "日曜日",
    1, "月曜日",
    2, "火曜日",
    3, "水曜日",
    4, "木曜日",
    5, "金曜日", 
    "土曜日"
)

実行結果

(Update2023.03.12)現在は、Weekday()関数で簡単に算出できます。

CASE(
  Weekday(StartingDate__c),
    1, "日曜日",
    2, "月曜日",
    3, "火曜日",
    4, "水曜日",
    5, "木曜日",
    6, "金曜日", 
    "土曜日"
)

実行結果

指定日からその週の開始日(日曜日)と終了日(土曜日)を算出

①指定された日付の週の開始日(日曜日)を算出 ※開始終了日を変更する場合は+ーの値を変更してください

CASE(WEEKDAY( StartingDate__c ),
1, StartingDate__c ,
2, StartingDate__c -1,
3, StartingDate__c -2,
4, StartingDate__c -3,
5, StartingDate__c -4,
6, StartingDate__c -5,
StartingDate__c -6)

実行結果

②指定された日付の週の終了日(土曜日)を算出 ※開始終了日を変更する場合は+ーの値を変更してください

CASE(WEEKDAY(StartingDate__c),
1, StartingDate__c +6,
2, StartingDate__c +5,
3, StartingDate__c +4,
4, StartingDate__c +3,
5, StartingDate__c +2,
6, StartingDate__c +1,
StartingDate__c )

実行結果

指定日の月末日を算出

①月末日を算出するには、指定日の年と月を算出して、その翌月の1日からー1日すると月末が算出できます。

DATE(YEAR(StartingDate__c),MONTH(StartingDate__c)+1, 1)-1

実行結果

生年月日(誕生日)から年齢を計算する

例では、取引先責任者の誕生日(birthday)を使った場合の数式となります。

数式のデータ型は、数値で少数以下0にしておきます。

FLOOR( ( TODAY() - Birthdate ) / 365.2425 )

誕生日を入力すると自動的に年齢が表示されます。

数式項目での画像の使用画

数式項目で画像を利用する場合、ライブラリに画像ファイルを登録して、そのURLを指定する必要があります。

画像ファイルの登録からIMAGEタグを使っての表示方法の詳細は、公式のHELPサイトに詳細な手順がありますので、ご紹介します。

以下、公式ヘルプのURLとなります。

Salesforce 公式のHELPサイト「数式」項目での画像の使用」より

※サンプルでは、カスタム項目として、選択リスト:優先度(Priority__c)を作成して、参照する設定としています。

IMAGE(
CASE( Priority__c,
"低", "/img/samples/flag_green.gif",
"中", "/img/samples/flag_yellow.gif",
"高", "/img/samples/flag_red.gif",
""),
"優先度イメージ")

実行結果

そのほかに、以下のように信号機や重要度での表現も可能です。

信号機の場合のサンプル

IMAGE(
CASE( Priority__c,
"低", "/img/samples/light_green.gif",
"中", "/img/samples/light_yellow.gif",
"高", "/img/samples/light_red.gif",
""),
"優先度イメージ")

重要度のサンプル

IMAGE(
CASE( Priority__c,
"低", "/img/msg_icons/confirm16.png",
"中", "/img/msg_icons/warning16.png",
"高", "/img/msg_icons/error16.png",
""),
"優先度イメージ")

実行結果

そのほか、Salesforceで利用可能なイメージ画像のURL一覧が必要な場合は、以下のサイトを参照ください。

外部サイト(SALESFORCE: SOME INSIGHTS

数式項目を利用する場合の注意事項

制限事項

数式項目には以下のような制限があります。

  • 文字数制限 : 数式項目は、スペース、改行文字、コメントを含む最大 3,900 文字まで定義可能。(超過する場合には、別途に数式項目を作成するなどの検討が必要となります。)
  • ロングテキストエリア、暗号化、説明の項目は、数式では使用出来ません。
  • 数式で参照されている項目はオブジェクト定義から削除できないため、削除前に数式からその項目を削除する必要があります。
  • UI では、数式項目で使用される HTML タグがエスケープされます。
  • 取引先責任者のカスタム数式項目は、個人取引先からは参照できません。

その他、最新の制約については、公式のHELPサイトにてご確認ください。

Salesforce公式HELPサイト「数式項目の制限および制約

Apexから数式項目を利用する場合の注意事項

以下の通り、Apexで操作した場合に数式が評価されるのは、レコードをSELECTするタイミングとなります。

数式が評価されるタイミングは、「画面表示」や「API 経由でレコードを SELECT するタイミング」等、対象項目のデータが生成されるタイミングで毎回評価されます。  ※引用:Salesforce Help「数式項目の計算タイミングについて」より

Apex初心者の方がよく陥る罠としては、ApexでレコードをInsertして、SElECTせず数式項目を使って条件判定などする場合に、数式が評価されていないため、想定外の処理をしてしまうということがあるので注意してください。

サポーター
ブログランキングに参加しましたので、ご支援していただけると幸いです。

にほんブログ村 IT技術ブログへ
にほんブログ村

-Tips集
-, , , ,