冷静に変な項目updateしてるんじゃないか問題
確認
public static Sobject getSobject(String objectName, Id id) {
String query = '' +
'SELECT ' +
String.join(new List<String>(Schema.describeSObjects(new List<String>{objectName})[0].fields.getMap().keySet()), ',') +
' FROM ' + objectName +
' WHERE Id = :id LIMIT 1'
;
return Database.query(query);
}
// 適当なアカウント取得
account a = [select id from account limit 1];
// 全項目取得
Account aAll = (Account)getSobject('Account', a.Id);
// おねがいトリガー
update a;
// 更新後の項目取得
account a2 = (Account)getSobject('Account', a.Id);
// 項目と値のマップ作ってDMLの前後で確認して違うもの出力
Map<String, Object> fieldsToValueMap = a2.getPopulatedFieldsAsMap();
for (String field : fieldsToValueMap.keySet()) {
if(aAll.get(field) != a2.get(field)) {
system.debug('field:' + field);
system.debug('old:' + aAll.get(field));
system.debug('new:' + a2.get(field));
}
}
コンソールから適当に叩いたので大文字小文字とか色々適当なのはさておき、結果は
[22]|DEBUG|field:LastModifiedDate
[23]|DEBUG|old:2018-02-09 06:24:46
[24]|DEBUG|new:2018-02-09 06:26:51
[22]|DEBUG|field:SystemModstamp
[23]|DEBUG|old:2018-02-09 06:24:46
[24]|DEBUG|new:2018-02-09 06:26:51
[22]|DEBUG|field:LastViewedDate
[23]|DEBUG|old:2018-02-09 06:24:46
[24]|DEBUG|new:2018-02-09 06:26:51
[22]|DEBUG|field:LastReferencedDate
[23]|DEBUG|old:2018-02-09 06:24:46
[24]|DEBUG|new:2018-02-09 06:26:51
LastModifiedDateはなんとなく分かるけど他の3つは見たことない
ざっくりこんな感じらしい
SystemModstamp:システム処理(triggerとか)による更新
LastViewedDate:詳細画面参照(For VIEW)
LastReferencedDate:詳細画面参照 + ルックアップ参照(For REFERENCE)
妥当なところだけが更新されていそうで安心しました。