【Salesforce】数式項目で数値を参照した際の動きについて

【Salesforce】数式項目で数値を参照した際の動きについて

Salesforceの数式項目で数値項目とnullを比較したところ、期待した動作をしませんでした。

頭が良い方や察しが良い方は既に分かったかもしれませんね。

例えば、このような数式です。

取引先の年間売上項目に値が入っていればtrueを返す(ことを期待した)数式です。

NOT( 
ISNULL(AnnualRevenue) 
)

年間売上項目に値が入っている場合の動きです。

これだけを見ると期待した通りに動いてくれそうに見えます。

Account acc;

acc = new Account();
acc.Name = '確認';
acc.AnnualRevenue = 100;
insert acc;

acc = [select
           Id,
           Name,
           AnnualRevenue,
           IsAnnualInput__c
       from
           Account
       where 
           Id = :acc.Id];

system.debug('【ログ】Name:' + acc.Name);                           // 【ログ】Name:確認
system.debug('【ログ】AnnualRevenue:' + acc.AnnualRevenue);         // 【ログ】AnnualRevenue:100
system.debug('【ログ】IsAnnualInput__c:' + acc.IsAnnualInput__c);   // 【ログ】IsAnnualInput__c:true

delete acc;

年間売上項目に値が入っていない場合の動きです。

数式で参照している項目に値が入っていないにも関わらず、数式項目がtrueになっていますね。

Account acc;

acc = new Account();
acc.Name = '確認';
acc.AnnualRevenue = null;
insert acc;

acc = [select
           Id,
           Name,
           AnnualRevenue,
           IsAnnualInput__c
       from
           Account
       where 
           Id = :acc.Id];

system.debug('【ログ】Name:' + acc.Name);                           // 【ログ】Name:確認
system.debug('【ログ】AnnualRevenue:' + acc.AnnualRevenue);         // 【ログ】AnnualRevenue:null
system.debug('【ログ】IsAnnualInput__c:' + acc.IsAnnualInput__c);   // 【ログ】IsAnnualInput__c:true

delete acc;

実は、数式項目の「空白項目の処理」のチェックが「空白項目を 0 として処理」になっていました。

これにより、数値通貨の項目である「年間売上」が0となっていたようです。

空白項目の処理

「空白項目を空白として処理」にチェックを入れることでうまく動作しました。

No comments.

コメントを残す

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