LoginSignup
0
0

More than 1 year has passed since last update.

【Salesforce】項目を変更した時間の差分を取得したい

Last updated at Posted at 2020-05-04

動作確認

・フェーズを更新していない状態

スクリーンショット 2020-05-04 13.20.26.png

・フェーズを一回更新した状態

スクリーンショット 2020-05-04 13.24.40.png

・フェーズを二回更新した状態
※この状態で差分を出力

スクリーンショット 2020-05-04 13.25.10.png

・フェーズを三回更新した状態
※更新前は二回目に更新した際の日時を設定、更新後は三回目に更新した際の日時を設定

スクリーンショット 2020-05-04 13.25.50.png

実現方法

オブジェクトに項目を持たせるパターン

フェーズを更新した際に値を持たせる項目を作成
スクリーンショット 2020-05-04 13.16.20.png

更新後 - 更新前の数式を保持する項目を作成
スクリーンショット 2020-05-04 13.15.39.png

Apexや項目自動更新でフェーズ更新前日時、更新後日時を設定
※省略

差分日時が取得可能
スクリーンショット 2020-05-04 13.18.26.png

Historyから取得するパターン(不可)

オブジェクトの項目履歴管理を設定

スクリーンショット 2020-05-04 12.28.31.png

フェーズ項目の履歴を設定

スクリーンショット 2020-05-04 12.29.09.png

TriggerHandlerで値を取得するように設定
※フェーズ項目を更新したらいつ(Before, After)Historyが作成されるのか確認

TestTriggerHandler.cls

    public void onBeforeUpdate(Test__c[] newList, Map<Id, Test__c> newMap, Test__c[] oldList, Map<Id, Test__c> oldMap){
        System.Debug('★★★★ 関数を開始する : onBeforeUpdate');
        System.Debug('★★ 変数 newList : ' + newList);
        List<Test__History> tHisList = [SELECT Id, IsDeleted, ParentId, CreatedById, CreatedDate, Field, OldValue, NewValue FROM Test__History WHERE ParentId = :newList[0].Id AND Field = 'Field1__c' ORDER BY CreatedDate DESC LIMIT 2];
        System.Debug('★★ for文に渡すリスト tHisList : ' + tHisList );
        System.Debug('★★ for文に渡すリストのサイズ tHisList : ' + tHisList.size());
        for(Test__History th : tHisList){
            System.Debug('★★ for文の現在値 th : ' + th);
            System.Debug('★★ for文の現在値 th.CreatedDate : ' + th.CreatedDate);
            System.Debug('★★ for文の現在値 th.OldValue : ' + th.OldValue);
            System.Debug('★★ for文の現在値 th.NewValue : ' + th.NewValue);
        }
        System.Debug('★★★★ 関数を終了する : onBeforeUpdate');
    }

    public void onAfterUpdate(Test__c[] newList, Map<Id, Test__c> newMap, Test__c[] oldList, Map<Id, Test__c> oldMap){
        System.Debug('★★★★ 関数を開始する : onAfterUpdate');
        System.Debug('★★ 変数 newList : ' + newList);
        List<Test__History> tHisList = [SELECT Id, IsDeleted, ParentId, CreatedById, CreatedDate, Field, OldValue, NewValue FROM Test__History WHERE ParentId = :newList[0].Id AND Field = 'Field1__c' ORDER BY CreatedDate DESC LIMIT 2];
        System.Debug('★★ for文に渡すリスト tHisList : ' + tHisList );
        System.Debug('★★ for文に渡すリストのサイズ tHisList : ' + tHisList.size());
        for(Test__History th : tHisList){
            System.Debug('★★ for文の現在値 th : ' + th);
            System.Debug('★★ for文の現在値 th.CreatedDate : ' + th.CreatedDate);
            System.Debug('★★ for文の現在値 th.OldValue : ' + th.OldValue);
            System.Debug('★★ for文の現在値 th.NewValue : ' + th.NewValue);
        }
        System.Debug('★★★★ 関数を終了する : onAfterUpdate');
    }

フェーズを更新

スクリーンショット 2020-05-04 12.30.10.png

BeforeUpdateでもAfterUpdateでもHistoryが作成されていないことを確認
※両方とも同じHistoryを取得している

スクリーンショット 2020-05-04 12.36.34.png

開発者コンソールで取得できることを確認
※フェーズ項目更新時、作成されたHistoryを元に差分取得は不可と確認

スクリーンショット 2020-05-04 12.37.27.png

参考リンク

無し

0
0
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
0
0