こんにちは、ヨリユです。
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で数式項目を扱う際、参考にしていただければ幸いです。
最後までご覧いただきありがとうございました!