Skip to content

Instantly share code, notes, and snippets.

@Sunil02kumar
Last active December 28, 2023 06:33
Show Gist options
  • Save Sunil02kumar/a15ab34f931e2978e1743c89e98ab951 to your computer and use it in GitHub Desktop.
Save Sunil02kumar/a15ab34f931e2978e1743c89e98ab951 to your computer and use it in GitHub Desktop.
Way to get list of Scheduled reports and Jobs from Salesforce using apex
public class SK_ScheduleJobUtility{
public static void findScheduledJobDetails(string jobType){
string jobTypeNumber=jobTypeMap.get(jobType);
if(jobTypeNumber!=null && jobTypeNumber!=''){
List<CronTrigger> cjList=new List<CronTrigger>();
Set<string> userIdSet = new Set<string>();
for(CronTrigger cj :[select id, CronJobDetailId,CronJobDetail.Name,CronJobDetail.JobType, ownerId from CronTrigger where CronJobDetail.JobType=:jobTypeNumber]){
cjList.add(cj);
userIdSet.add(cj.ownerId);
}
//fetch user information as we cannot access user details using child to parent query using dot notation
Map<string,User> userMap= new Map<string,User>();
for(User userRecord:[select id,username,email,IsActive from User where Id IN:userIdSet]){
userMap.put(userRecord.Id,userRecord);
}
string header = 'CronJobDetailId , CronJobDetail Name, CronJobDetail JobType,Submittedby Username,SubmittedBy Userid, User IsActive, User Email \n';
string finalstr = header ;
for(CronTrigger jb: cjList){
string recordString='';
if(userMap.get(jb.ownerId)!=null){
recordString = jb.CronJobDetailId+','+jb.CronJobDetail.Name+','+jobType + ','+userMap.get(jb.ownerId).username + ','+jb.ownerId + ','+userMap.get(jb.ownerId).IsActive + ',' +userMap.get(jb.ownerId).email+'\n';
}else{
recordString = jb.CronJobDetailId+','+jb.CronJobDetail.Name+','+jobType + ', ,'+jb.ownerId + ', ,\n';
}
finalstr = finalstr +recordString;
}
Messaging.EmailFileAttachment csvAttc = new Messaging.EmailFileAttachment();
blob csvBlob = Blob.valueOf(finalstr);
string csvname= jobType+ ':Schedule Job List'+system.now()+'.csv';
csvAttc.setFileName(csvname);
csvAttc.setBody(csvBlob);
Messaging.SingleEmailMessage email =new Messaging.SingleEmailMessage();
String[] toAddresses = new list<string> {UserInfo.getUserEmail()};
String subject =jobType+': Scheduled jobs report';
email.setSubject(subject);
email.setToAddresses( toAddresses );
email.setPlainTextBody(subject);
email.setFileAttachments(new Messaging.EmailFileAttachment[]{csvAttc});
Messaging.SendEmailResult [] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[] {email});
}
}
public static Map<string,string> jobTypeMap = new Map<string, string>{
'Data Export' => '0',
'Weekly Export' => '1',
'Test' => '2',
'Dashboard Refresh' => '3',
'Reporting Snapshot' => '4',
'System' => '5',
'Scheduled Apex'=>'7',
'Report Run' => '8',
'Batch Job' => '9'
};
//run below script to get job list in email
//SK_ScheduleJobUtility.findScheduledJobDetails('Report Run');
//SK_ScheduleJobUtility.findScheduledJobDetails('Batch Job');
//SK_ScheduleJobUtility.findScheduledJobDetails('Scheduled Apex');
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment