プログラマ38の日記

主にプログラムメモです。

Salesforce: 最終更新日(LastModifiedDate)とSystem Modstamp(SystemModstamp)の違い

最終更新日(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から画面の設定でできるように変更になっていたんですね。やり方は次の通りでした。

設定>ビルド>ユーザインタフェース
「レコードの作成時に監査項目を設定」および「無効な所有者のレコードを更新」ユーザ権限を有効化 にチェック

f:id:crmprogrammer38:20170822090544p:plain
プロファイルで「レコードの作成時に監査項目を設定」をチェック

f:id:crmprogrammer38:20170822090758p:plain
さらに、プロファイルで「無効な所有者のレコードを更新」をチェックすると所有者に無効ユーザが指定できます

f:id:crmprogrammer38:20170822091032p:plain