Apexで数式項目を再計算する(サンプルコードで動作確認)

Salesforce

こんにちは、ヨリユです。
Apexにて、数式項目が参照している項目値を変更したにもかかわらず「数式項目の値が変わっていない」、ということがありました。
そこで今回は、Apexで数式項目を再計算する方法を共有させていただきます。

【この記事から学べること】
・Apexで数式項目を再計算する方法について
・Formulaクラスの「recalculateFormulasメソッド」の使い方
・Apexで数式項目を再計算する場合としない場合の動作について

Apex で数式項目を再計算:使用するメソッドについて

Apex で数式項目を再計算するには
Formulaクラスの「recalculateFormulasメソッド」を使用します。
引数と戻り値は、次のとおりです。

引数:List<SObject>
戻り値:List<FormulaRecalcResult Class>

※ 上記の他に、SObject クラスの「recalculateFormulasメソッド」もありますが、API バージョン 57.0 で廃止されています。

Apex で数式項目を再計算:サンプルコードで動作確認

次の2つの例をサンプルコードで確認していきます。

  • Apex で数式項目を再計算しない場合の動作
  • Apex で数式項目を再計算する場合の動作

動作確認には、商談オブジェクトに用意しました、下記の数式項目を使用します。

項目名:合計金額(TotalAmount__c)
数式:金額(Amount) × 数量(TotalOpportunityQuantity)

以下、動作を確認していきます。

【Apex で数式項目を再計算しない場合】

開発者コンソールから匿名Apexに以下のコードを入力します。

Opportunity opp = new Opportunity (Amount = 100, TotalOpportunityQuantity = 1);

System.debug('合計金額:' + opp.TotalAmount__c );

「excute」で実行します。

「recalculateFormulasメソッド」を呼び出していないため、数式が再計算されていません。
そのため、合計金額(TotalAmount__c)の値は「NULL」となっています。

【Apex で数式項目を再計算する場合】

開発者コンソールから匿名Apexに以下のコードを入力します。

Opportunity opp = new Opportunity (Amount = 100, TotalOpportunityQuantity = 1);
List<Opportunity> oppList = new List<Opportunity>{ opp };
List<FormulaRecalcResult> results = Formula.recalculateFormulas(oppList);

System.debug('合計金額:' + opp.TotalAmount__c );

「excute」で実行します。

「recalculateFormulasメソッド」を呼び出したことにより、数式が再計算されました。
合計金額(TotalAmount__c)の値に、数式の計算結果が設定されています。

おわりに

いかがでしたでしょうか。
今回はApexで数式項目を再計算する方法をみてきました。
Apexで数式項目を扱う際、参考にしていただければ幸いです。
最後までご覧いただきありがとうございました!