はじめに
この投稿はSalesforce Advent Calendar 2022の20日目の記事です。
初めて投稿させていただきます。
今年から新卒で入社した会社にてSalesforceの部署に配属が決まり、Salesforce歴6ヶ月目(実務は4ヶ月目)です。
項目履歴管理にて困ったことがあったのですが、調べても解決策が出てこなかったため自力で実装した方法を備忘録も兼ねて残します。
概要
今回は項目履歴管理にて、積み上げ集計項目の値がどう変化したかを追跡する方法を紹介します。
項目履歴管理では積み上げ集計項目を追跡することができません。
しかし、フローを使用して値が全く同じ項目を用意し、その値を項目履歴管理で追跡するという方法を使用したら追跡をすることができたのでご紹介します。
項目履歴管理とは
項目変動履歴はレコードに変更が生じた際に、「いつ、誰が、どの項目を、何からに何に変更した」という履歴を保存することができる機能です。
対象のオブジェクトの関連レコードとして履歴がオブジェクトが作成されます。
考慮事項
・オブジェクトごとに追跡できる項目数は20である。
・組織経由で最大 18 か月間、API 経由で最大 24 か月間しか保持できない。
・255文字を超える項目、複数選択リストに対する変更は、編集済みとして追跡され、元の値と新しい値は記録されない。
・数式項目、積み上げ集計項目、自動採番項目などの他の項目によって変化する項目は追跡ができない。
実装する際にはこれらを考慮する必要があります。
下準備
今回は採用に関するオブジェクトとして「面接申込者」と「面接」の二つを作成し、主従関係を作成しました。
「面接申込者」オブジェクト・・・合計評価(積み上げ集計(合計 面接)),
メールアドレス(メール)、電話番号(電話)
「面接」オブジェクト・・・評価(数値(2,0))、面接申込者(主従関係(面接申込者))
実装
項目履歴管理の作成
面接申込者の方に項目履歴管理を作成します。
項目の選択
最初に「オブジェクトマネージャー」→「詳細」→「追加の機能」の「項目履歴管理」にチェックを入れる必要があります。
次に「項目とリレーション」の項目履歴管理の設定を押します。
すると項目が一覧となって並んでいます。
この中から追跡したい項目にチェックを入れます。
ここではまだ積み上げ集計項目である「合計評価」は一覧として表示がされません。
しかし一旦作成を進みます。
レイアウトに追加
「ページレイアウト」から対象のレイアウトを開くと、関連リストに「〇〇の履歴(今回は面接申込者の履歴)」があるので、それを関連リストに追加します。
保存をした後に、適当なレコードを作成するとレコードページに追加されています。
レコードを更新すると以下の画像のように変更された履歴を残すことができます。
積み上げ集計項目の追跡
ここまでで通常の項目についての追跡ができたので、積み上げ集計項目の追跡を行えるようにします。
追跡する項目の追加
今の状態のままだと追跡ができないので全く同じ値を持つ項目を作成します。
データ型・・・数値
項目の表示ラベル・・・合計評価
項目名・・・末尾に_copyを追加(同じものは使用できないため)
※他の人が迷わないように説明欄に追跡用などと記載しておくと親切かもしれません。
作成する際にページレイアウトに追加しないようにすると、同じレコードページに同じ項目が存在しているように見えることを避けれるので、追加しないことをお勧めします。
フローの作成
レコードが作成or更新されたら値を合計値(copy)を更新する新しいフローを作成します。
フローの新規からレコードトリガーフローを選択し、下の画像のように設定をします。
続いて、フローの中身を作成していきます。
「+」をクリックし、レコードを更新を選択し、
作成した項目に積み上げ集計項目の値を代入するように作成をします。
最後に保存をして、有効化をしたらフローは終わりです。
追跡の再設定
新しく作った項目は数値項目なので、項目履歴管理の設定の項目一覧に追加されているので、追跡できるようにチェックをしてください。
完成
これにて追跡がされるようになったので、従オブジェクトの値を更新して積み上げ集計項目を更新してみてください。
すると、下の画像のようにまるで積み上げ集計項目が追跡されているように表示することができます。
ちなみに元の値が空なのは更新or作成された時にフローが働くため、最初は値の代入がされていないからです。
おわりに
今回は項目履歴管理にて追跡できない項目を追跡する方法を紹介しました。
同じような課題にぶち当たった人に見ていただけると嬉しいです。
〇〇できないとされている項目タイプは今回のように別の項目に値だけ代入する方法をとれば実装が可能かもしれないのでぜひ試してみてください。(グローバル検索とか?)