I was looking through the scheduled jobs in my org.

I would like to know which apex class is scheduled through these jobs. Please let me know how i can find this information?


First of all get ClassId from AsyncApex by following qyery:-

SELECT ApexClassId, Id FROM AsyncApexJob WHERE JobType IN

After this get class name by following query:-

SELECT Id, Name FROM ApexClass WHERE Id ='ClassId' 
| improve this answer | |
  • is there any way to do this query with the Job name? That will be really helpful as this query is returning only the ids – Rimii Jun 28 '17 at 9:45
  • You can pass Id of Apex Job in following query:- SELECT ApexClassId FROM AsyncApexJob WHERE Id = :Id. For more details got to developer.salesforce.com/docs/atlas.en-us.object_reference.meta/… – Amit Kumar Jun 28 '17 at 9:52
  • Best way create apex job with the name of the class. – Amit Kumar Jun 28 '17 at 10:19
  • Well I understand that. Actually it is not created by me. So I used the following query :SELECT Id, CronJobDetail.Id, CronJobDetail.Name, CronJobDetail.JobType FROM CronTrigger where CronJobDetail.Name='My Job Name' Then I used this id in ur query. but it is showing no records found – Rimii Jun 28 '17 at 10:23
  • You can also query CronTrigger as well – Rohit Mourya Jun 28 '17 at 10:23

Unfortunately there isn't any direct link between the CronTrigger table and the related apex class id (at least that they expose). See the these two ideas to vote it up. That said you've got some options.

Option 1 - Setup Menu

Sometimes you can get it from the setup. Go to setup->monitor->jobs->scheduled jobs, and you'll see a list of all scheduled jobs. For apex classes that were scheduled through the 'Schedule Apex' button in setup->develop->apex classes, you'll see a 'Manage' link next to the job. Click that and you'll see the class name associated with that job.

Option 2 - Test Delete Schedulable Classes

However, it turns out the metadata api is kind enough to return the id of the CronTrigger records associated with an apex class if you try and delete it.

First you'll need to get a list of all schedulable apex classes then you org and then try and delete them with the metadata api. If say there was just one, MySchedulableClass you would you would have the following destructiveChanges.xml

<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">

If you do a test deployment, you'll get an error like the following which includes the crontrigger ids (they start with 08e)

/Users/yourname/ant/sfse/build.xml:95: The following error occurred while executing this line:
*********** DEPLOYMENT FAILED ***********

All Component Failures:
1.  classes/MySchedulableClass.cls -- Error: This apex class is referenced elsewhere in salesforce.com.  Remove the usage and try again. : Scheduled Jobs - 08eXXXXXXXXXXXX. This Schedulable class is in use. : Apex Class.

*********** DEPLOYMENT FAILED ***********

Then it's just a matter of searching those errors for the id of the particular CronTrigger you're interested in and you'll have your answer.

CAVEAT I expect this approach won't work for schedulable classes that are part of a managed package since you won't be able to delete those with the metadata api, but who knows, worth trying.

Option 3 - Correlate with AsyncApexJob Table

Based on @michael's answer. In most cases schedulable jobs will start a batch job. If that's the case you can look at the last fired date for the scheduled jobs list and try and find the corresponding job in the AsyncApexJob table based on the created date for the AsyncApexJob, then you can inspect the ApexClassId column.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.