1

以下のクラスは、logindate をカスタム フィールドにプッシュします。数式を使用して、日付/時刻から日付に変換できます。次に、apex を実行するようにスケジューラを設定して、最終ログイン日を最新の状態に保ちます。

public void ResetlastLogin_Update(List<User> oldUsers, List<User> newUsers) {

System.debug('ResetlastLogin_Update: entering trigger');

List<Id> idsToUpdate = new List<Id>();

for (integer i=0; i<newUsers.size(); i++) {
  User newVals = newUsers[i];
  User oldVals = oldUsers[i];

  if (newVals.lastlogindate != oldVals.lastlogindate__c) {
          idsToUpdate.add(newVals.Id);
  }
}
System.debug('Ids to Update: ' + idsToUpdate.size());

if (idsToUpdate.size() > 0) {

  List<User> usersToUpdate = [SELECT Id, lastlogindate, lastlogindate__c FROM User WHERE Id IN :idsToUpdate];
  for (User u : usersToUpdate) {

  if (u.lastlogindate__c == NULL ) {

     u.lastlogindate__c = u.lastlogindate ;
    }
   }
  update usersToUpdate;

}

System.debug('ResetlastLogin_Update_Update: exiting trigger');

}

4

1 に答える 1

2

https://salesforce.stackexchange.com/questions/9926/execute-an-action-run-a-trigger-every-time-a-user-logs-in-to-salesforceを確認してください。ログインの行為は、ユーザー レコードの更新としてカウントされません (たとえば、lastmodifieddate は変更されません)。これは、ワークフローと数式も問題外であることを意味します。

バッチ頂点を使用してそのデータをクエリするか、ログイン履歴レポートを (Analytics API 経由で) 使用する必要があります...


あなたの質問について。DateTime から Date に変換するには、date()またはdateGMT()を使用できます。

DateTime dt = System.now();
Date d = dt.date();
System.debug(dt + '  ->  ' + d);
System.assertEquals(System.today(), d);

2014-01-14 18:44:14  ->  2014-01-14 00:00:00
于 2014-01-14T18:45:10.607 に答える