最終更新日(LastModifiedDate)とSystem Modstamp(SystemModstamp)は、今まで特に意識もせず、同じタイムスタンプが入っているなーぐらいの認識でした。
ですが、「レコードの作成時に監査項目を設定」を有効化して、最終更新日(LastModifiedDate)に直接タイムスタンプを指定した時に違いがでるということを知りました。
例えば、監査項目を設定を有効にして次のデータを登録します。
NAME | CREATEDDATE | LASTMODIFIEDDATE |
sample01 | 2017-07-27T00:44:38.000Z | 2017-07-27T00:44:38.000Z |
sample02 | 2017-07-27T00:23:48.000Z | 2017-07-27T00:23:48.000Z |
sample03 | 2017-07-27T00:31:56.000Z | 2017-07-27T23:38:28.000Z |
すると登録後は、System Modstamp(SystemModstamp)は、登録時刻がセットされます。
NAME | CREATEDDATE | LASTMODIFIEDDATE | SYSTEMMODSTAMP |
sample01 | 2017-07-27T00:44:38.000Z | 2017-07-27T00:44:38.000Z | 2017-08-21T23:36:34.000Z |
sample02 | 2017-07-27T00:23:48.000Z | 2017-07-27T00:23:48.000Z | 2017-08-21T23:36:34.000Z |
sample03 | 2017-07-27T00:31:56.000Z | 2017-07-27T23:38:28.000Z | 2017-08-21T23:36:34.000Z |
最終更新日(LastModifiedDate)で判定すると、直接、最終更新日(LastModifiedDate)に値を指定されると対象から漏れてしまうかもしれません。
Apexプログラムや、APIの中で、この項目の値の違いを理解して設計しておいた方がいいのだと思います。
最後に
監査項目に値を指定するために、以前はSalesforceの内部設定を変更してもらう必要があったのですが、Winter16から画面の設定でできるように変更になっていたんですね。やり方は次の通りでした。
設定>ビルド>ユーザインタフェース>
「レコードの作成時に監査項目を設定」および「無効な所有者のレコードを更新」ユーザ権限を有効化 にチェック
プロファイルで「レコードの作成時に監査項目を設定」をチェック
さらに、プロファイルで「無効な所有者のレコードを更新」をチェックすると所有者に無効ユーザが指定できます