べにおブログ

学んだことを、ゆっくり深く。

クロスオブジェクト数式項目とは何か:親レコードの値を子レコードに映す仕組み

結論:まずこれだけ覚える

「取引先に入っている値を、商談の画面にも出したい」——このときに作るのがクロスオブジェクト数式項目です。 データを商談側にコピーするのではありません。参照して表示するだけです。だから親の値を書き換えれば、子の表示も同時に変わります。二重管理が起きないのが最大の利点です。


用語の整理

数式項目とは

値を人が入力するのではなく、計算式の結果を自動表示する読み取り専用の項目です。Excelの数式セルと同じ発想ですが、レコードごとに自動で再計算されます。値はデータベースに保存されず、表示するたびに計算されます。

クロスオブジェクト数式とは

数式の中で、自分のオブジェクトの項目だけでなく、リレーションでつながった別オブジェクト(親)の項目を参照する数式のことです。 商談は取引先への標準リレーションを持つので、商談側の数式から取引先の項目を参照できます。取引先の[業種]は選択リスト項目のため、テキストとして表示する数式では TEXT 関数で変換します。

TEXT(Account.Industry)

参照関係・主従関係の親をたどるときは、リレーション名にドットをつないでいきます。カスタムオブジェクトを参照する場合は、リレーション名の末尾が __r になります。


どちらの向きに参照できるのかが最重要

クロスオブジェクト数式は、子から親へしかたどれません。

向き可否代わりの手段
子 → 親商談から取引先の業種を見る⭕ クロスオブジェクト数式
親 → 子(合計・件数)取引先で商談金額を合計する✕ 数式では不可積み上げ集計項目(主従関係が必要)
親 → 子(individual)取引先で「最新の商談名」を出す✕ 数式では不可フローや Apex

「親に子の値を出したい」と言われたら数式ではなく積み上げ集計、と切り替えてください。ここが実務でも試験でも最初のつまずきポイントです。


似た手段との使い分け

手段値の実体親を更新したとき向いている場面
クロスオブジェクト数式項目持たない(都度計算)子の表示も即座に変わる参照して見せたいだけのとき
フローによる項目更新子に実データとして保存別途更新処理が要る取得した時点の値を凍結したいとき
積み上げ集計項目親に集計値を保存子の合計・件数・最大値を親に出したいとき
参照関係項目を追加別レコードへのリンク関連そのものを新しく作りたいとき

業種のように「取引先が正」の情報を商談に出すだけなら、コピーしてはいけません。コピーすると、取引先の業種が変わったときに商談側が古い値のまま取り残されます。


設定手順

  1. [設定]→[オブジェクトマネージャ]→ 商談(値を表示したい側=子)を選択
  2. [項目とリレーション]→[新規]
  3. データ型に数式を選択
  4. 項目の表示ラベルを入力し、数式の戻り値の型を選ぶ(業種ならテキスト
  5. 数式エディタで[高度な数式]→[項目の挿入]→[商談]→[取引先]→[業種]の順にたどる
  6. 挿入された Account.IndustryTEXT(Account.Industry) で囲み、[構文を確認]でエラーがないことを確認して保存
  7. ページレイアウトに配置する 数式項目は読み取り専用なので、ユーザーが商談側で書き換えてしまう心配はありません。

よくある質問

Q. 数式項目でレポートの検索条件に使えますか。 使えます。表示だけでなく、レポートやリストビューの検索条件にも指定できます。 Q. 何階層まで親をたどれますか。 クロスオブジェクト数式では、最大10個先のリレーションまで参照できます。これとは別に、1つのオブジェクトから参照できる一意のリレーションは最大10個で、この上限は数式項目だけでなく、ルールや参照関係の検索条件で使うリレーションも含めて累積します。深い参照や多数の参照先を使う設計では、両方の上限を確認します。 Q. 主従関係を作れば解決しますか。 業種を表示したいだけで主従関係を作るのは過剰です。主従関係は親が削除されると子も削除され、従レコードの所有権や共有が親に従属する強い関係です。表示目的だけで選ぶ関係ではありません。 Q. 親レコードを直接参照できないユーザーにも値が見えますか。 クロスオブジェクト数式では、参照先レコードへの直接アクセスがないユーザーにも、数式項目を通じて参照先の値が表示される場合があります。機密情報を参照する数式を作るときは、数式項目自体の項目レベルセキュリティとページ配置を確認します。


出典(Salesforce公式)

  • What Is a Cross-Object Formula? — クロスオブジェクト数式がリレーションでつながった別オブジェクトの項目を参照する数式であり、最大10個先のリレーションまで参照できること。参照先レコードへのアクセスがないユーザーにも数式結果が表示され得ること
  • Building Cross-Object Formulas in the Simple Formula Tab — 「親の取引先名を参照する構文は Parent.Name である」「カスタムオブジェクトを参照するときはリレーション名にアンダースコア2つを付ける」
  • TEXT — 商談の数式項目で取引先の業種を表示する公式例が TEXT(Account.Industry) であり、選択リスト値をテキストへ変換する必要があること
  • Formula fields calculate when the requested record is accessed — 数式項目の値がデータベースに保存されず、レコード参照時に現在のデータから計算されること
  • Tips for Building Cross-Object Formulas — 1オブジェクトあたり最大10個の一意なリレーションという上限が、数式項目、ルール、参照関係の検索条件を通じて累積すること
  • Create a Roll-Up Summary Field — 親側で子の合計・件数を出す場合は積み上げ集計項目を使うことの根拠