LoginSignup
2
1

More than 5 years have passed since last update.

salesforceで後から追加したトリガーにフックさせるためなんとなくupdateした

Posted at

冷静に変な項目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)

妥当なところだけが更新されていそうで安心しました。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1