【Salesforce】SObjectの数式項目を再計算する

【Salesforce】SObjectの数式項目を再計算する

SalesforceのSObjectで数式項目を参照したとき、数式項目に必要な値が更新されても数式項目は再取得するまで値が変わりません。

毎回再取得しなければいけないのかと思っていたのですが、SObject型に再計算を行うメソッドが用意されていました。

確認のため、取引先に2つの数式項目を作成しました。

・従業員1人当たりの売上高を計算する「SalesPerEmployee__c」項目

・親取引先のNameを参照する「ParentName」項目

これらを計算するのに必要な項目を設定して参照しました。

public void recalculate(Account acc, Account parent){

    // 従業員数
    acc.NumberOfEmployees = 1000;
    // 売上高
    acc.AnnualRevenue = 10000;
    // 親会社
    acc.ParentId = parent.Id;

    // 数式項目を再計算する
    acc.recalculateFormulas();
    // 再計算される
    system.debug(acc.SalesPerEmployee__c);
    
    update acc;
    
    acc = [select Id, Name, ParentName__c from Account where Id = :acc.Id];
    // 再計算される
    system.debug(acc.ParentName__c);
}

取引先の項目のみで作成されている数式の「SalesPerEmployee__c」は、値を入力した時点で再計算することで、UPDATE前に数式が再計算できるようです。

親取引先を参照しなければいけない「ParentName__c」は、「recalculateFormulas」を呼び出しても再計算されません。

そのため、値を参照するためには更新後にレコードを再取得する必要があります。

https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_methods_system_sobject.htm

注意して使用すれば便利なメソッドだと思います。

No comments.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です