日次バッチ処理でEventLogFileを取得してSalesforce上のファイルに保存するPGM.
お作法がなってないかもしれませんが大目に見て欲しいです.
誰かの参考になれば幸いです.
PGM
DownloadEventLogFileBatch
public class DownloadEventLogFileBatch implements Database.Batchable<sObject>, Database.Stateful{
// *************************************************
// EventLogFileをダウンロードしてファイルに格納する。
//
// Date targetLogDate = Date.newInstance(2022,2,24);
// DownloadEventLogFileBatch bat = new DownloadEventLogFileBatch(targetLogDate);
// Id jobId = Database.executeBatch(bat);
//
// *************************************************
private Date targetLogDate;
/**
* コンストラクタ
* @param なし
* @return void
*/
public downloadEventLogFileBatch() {
}
/**
* コンストラクタ
* @param targetLogDate Date 取得したいログの日付(GMTで)
* @return void
*/
public downloadEventLogFileBatch(Date targetLogDate) {
this.targetLogDate = targetLogDate;
}
/**
* start処理
* @param BC Database.BatchableContext
* @return Database.QueryLocator
*/
public Database.QueryLocator start(Database.BatchableContext BC){
// クエリ生成
Time t = Time.newInstance(0,0,0,0);
Datetime dt;
if(targetLogDate == null){
dt = DateTime.newInstanceGMT(DateTime.now().dateGMT(),t).addDays(-2);
} else {
dt = DateTime.newInstanceGMT(targetLogDate,t);
}
System.debug('dt:'+dt);
String query = 'SELECT id,EventType,LogDate,LogFile FROM EventLogFile WHERE LogDate = ' + dt.format('yyyy-MM-dd\'T\'00:00:00.000\'+0000\'');
System.debug('query:'+query);
return Database.getQueryLocator(query);
}
/**
* execute処理
* @param BC Database.BatchableContext
* @param scope List<sObject>
* @return void
*/
public void execute(Database.BatchableContext BC, List<sObject> scope){
try{
List<ContentVersion> cvList = new List<ContentVersion>();
for(EventLogFile elf : (List<EventLogFile>) scope){
ContentVersion cv = new ContentVersion();
cv.ContentLocation = 'S'; // ファイルはSalesforce上に保存
cv.PathOnClient = String.valueof(elf.LogDate.dateGMT())+'_'+elf.EventType+'.csv'; // ファイル名
cv.Title = String.valueof(elf.LogDate.dateGMT())+'_'+elf.EventType+'.csv'; // ファイルタイトル
cv.VersionData = elf.LogFile; // ファイルデータ
cvList.add(cv);
}
if(cvList.size() > 0){
insert cvList;
}
} catch(Exception e) {
System.debug('Exception:'+e.getMessage());
}
}
/**
* finish処理
* @param BC Database.BatchableContext
* @return void
*/
public void finish(Database.BatchableContext BC){
}
}
DownloadEventLogFileBatchSchedule
global class DownloadEventLogFileBatchSchedule implements Schedulable {
public downloadEventLogFileBatchSchedule() {
}
/**
* バッチ処理の起動
* @param SC SchedulableContext
* @return void
*/
global void execute(SchedulableContext SC){
Id batchInstanceId = Database.executeBatch(new DownloadEventLogFileBatch());
}
}