
Salesforceの項目履歴管理の制限に関するナレッジとフローを用いて疑似的に項目履歴管理を再現し制限を突破する実装案をまとめてみました。
はじめに
Salesforceには「項目履歴管理」という便利な機能がありますが、
- 保持期間が最大で18か月(レポート参照は最大24か月)
- 監査証跡(Field Audit Trail)機能を使う場合は追加ライセンスが必要
という制限があります。
この記事では、この制限を回避するために履歴管理用カスタムオブジェクトを作成し、フローなどを使って変更履歴を動的に保存する方法を紹介します。
項目履歴管理の制限と監査を実装する際の懸念事項
Salesforce標準の項目履歴管理にはデータの保存期間や保存対象の最大数に制限があります。
- 標準履歴管理では、18か月を過ぎるとデータが自動削除されます。
- レポートから参照できるのは最大24か月。
- 1オブジェクトにつき20項目までしか履歴を残すことができない
上記のように項目履歴管理には制限が存在します
そのため、この制限以上の履歴を追うアドオンとして監査証跡機能というものが存在します。
ただし、監査はアドオンのため実装には以下を考慮しなければいけません。
- 永続的な保持や長期保存を行いたい場合は、Field Audit Trailのライセンスが必要。
- 年間契約の追加料金が発生するため、中小規模の組織では負担になる場合があります。
今回はこの監査を使用せずに、履歴管理をカスタムで追加実装する方法を紹介します。
項目履歴管理の保存数と保存期間の問題を解決するためのカスタムの実装案は以下です。
カスタムでの項目履歴管理の実装概要
今回は項目履歴管理用のオブジェクトを用意し、レコードとして履歴の情報を保存します。
大まかな機能としては以下のようなイメージです。

まずは履歴管理用のオブジェクトを作成します。
構成としては以下を参考に作成してください。
- オブジェクト名例:
FieldHistory__c - 変更対象商談レコード(
RelatedOpportunity__c)(商談参照関係)
※ 今回は商談の項目変更を感知する想定のため商談の参照関係を作成しています - 項目名(
FieldName__c) - 変更前の値(
OldValue__c) - 変更後の値(
NewValue__c) - 変更者(
ChangedBy__c)(ユーザー参照関係)(レコードの作成者が実質的な変更者となるため作成不要) - 変更日時(
ChangedDateTime__c)(レコードの作成日が実質的な変更日時になるため作成不要)
次に「変更を検知し新規レコードとして履歴を保存するフロー」を作成します。
- フロー種別:レコードトリガーフロー
- トリガー条件:対象の項目が変更されたとき
- 処理内容:変更前のpriorRecordの項目の値、変更後のRecordの値、変更者と日時をレコードに割り当てし新規作成する


上記フローは変更を検知したいオブジェクトごとに作成する必要があり、「変更対象商談レコード」のようにオブジェクトごとに履歴管理オブジェクトへ参照関係を作る想定です。
また、上記実装にあたり以下の懸念事項を考慮する必要があります。
- 大量のレコードを作成し組織の容量を圧迫するため、保存する履歴のエクスポートを適切なタイミングで行う必要がある
- 自動化の順番によっては値がフローに渡されずに履歴管理レコードが作成されない可能性がある
まとめ
いかがでしたでしょうか。
今回はSalesforce標準の項目履歴管理をカスタムオブジェクトを用いて別途保存していく方法を書かせていただきました。
組織の容量を圧迫するという欠点はありますが、上記方法を用いることでアドオンの監査を用いずに履歴を長期間保持することが可能です。
また、レポートなどを用いて履歴を一覧化することもできます。
要件に応じてカスタマイズして実装を検討してみるのはいかがでしょうか?
エビデンス・参考ナレッジ
この変更に関するSalesforceの公式ナレッジは以下の通りです。
- Salesforce サクセスナビ : 項目監査履歴とは
- https://successjp.salesforce.com/article/NAI-000513
- 概要 : Salesforceの項目履歴管理と監査証跡機能に関する、それぞれの制限などが記載されています。
