Last active
December 28, 2023 06:33
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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