Hello friends, today we are going to discuss Retrieve Schedule Jobs in Apex LWC. Here we will create an LWC component and show the Schedule Jobs of the salesforce org with proper details. The AsyncApexJob object has all info of async jobs.
Also, check this: Rest Resource Apex Class in Salesforce
Key Highlights :
- Can check all scheduled jobs.
- Query the AsyncApexJob with the Cron details.
- CronTrigger contains schedule information for a scheduled job.
Code :
AsyncJobs.cls :
public class AsyncJobs {
@AuraEnabled(cacheable=true)
public static List<AsyncWrapper> fetchAsyncJobs(){
//query the AsyncApexJobs
List <AsyncApexJob> asyncApexJobList = [select Id, ApexClass.Name, Status, CronTrigger.CronJobDetail.Name, CronTrigger.CronExpression,
CronTrigger.State, CronTrigger.StartTime, CronTrigger.EndTime, CronTrigger.PreviousFireTime, CronTrigger.NextFireTime,
CronTrigger.TimesTriggered, CronTrigger.CreatedBy.Username, CronTrigger.CreatedDate, CronTrigger.LastModifiedBy.Username
from AsyncApexJob where JobType in ('ScheduledApex') ORDER BY CronTrigger.TimesTriggered DESC NULLS LAST
];
List<AsyncWrapper> asyncWrapperList = new List<AsyncWrapper>();
//itrate the AsyncApexJobs if any
for (AsyncApexJob job : asyncApexJobList) {
AsyncWrapper wrapper = new AsyncWrapper();
wrapper.className = job.ApexClass.Name;
wrapper.cronJobName = job.CronTrigger.CronJobDetail.Name;
wrapper.cronExpression = job.CronTrigger.CronExpression;
wrapper.jobState = job.CronTrigger.State;
wrapper.jobStartTime = job.CronTrigger.StartTime;
wrapper.jobEndTime = job.CronTrigger.EndTime;
wrapper.jobPreviouseFireTime = job.CronTrigger.PreviousFireTime;
wrapper.jobNextFireTime = job.CronTrigger.NextFireTime;
wrapper.jobTimesTriggered = job.CronTrigger.TimesTriggered;
wrapper.createdByUserName = job.CronTrigger.CreatedBy.Username;
asyncWrapperList.add(wrapper);
}
return asyncWrapperList;
}
public class AsyncWrapper{
@AuraEnabled
public String className;
@AuraEnabled
public String cronJobName;
@AuraEnabled
public String cronExpression;
@AuraEnabled
public String jobState;
@AuraEnabled
public Datetime jobStartTime;
@AuraEnabled
public Datetime jobEndTime;
@AuraEnabled
public Datetime jobPreviouseFireTime;
@AuraEnabled
public Datetime jobNextFireTime;
@AuraEnabled
public Integer jobTimesTriggered;
@AuraEnabled
public String createdByUserName;
public AsyncWrapper(){}
}
}
lWCAsyncJobs.HTML :
<template>
<lightning-card title="Retrieve Schedule Jobs in Apex LWC" icon-name="standard:macros">
<div class="slds-p-horizontal_small">
<div if:true={data}>
<lightning-datatable data={data} columns={columns} key-field="Id"></lightning-datatable>
</div>
</div>
</lightning-card>
</template>
lWCAsyncJobs.JS:
import { LightningElement, wire } from 'lwc';
import fetchAsyncJobs from '@salesforce/apex/AsyncJobs.fetchAsyncJobs';
const columns = [
{
label: 'Class Name',
fieldName: 'className',
type: 'text',
},
{
label: 'Cron Job Name',
fieldName: 'cronJobName',
type: 'text',
},
{
label: 'Job State',
fieldName: 'jobState',
type: 'text'
},
{
label: 'Job Start Time',
fieldName: 'jobStartTime',
type: 'date',
typeAttributes: {
day: 'numeric',
month: 'short',
year: 'numeric',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: true
}
},
{
label: 'Job End Time',
fieldName: 'jobEndTime',
type: 'date',
typeAttributes: {
day: 'numeric',
month: 'short',
year: 'numeric',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: true
}
},
{
label: 'Job Previouse Fire Time',
fieldName: 'jobPreviouseFireTime',
type: 'date',
typeAttributes: {
day: 'numeric',
month: 'short',
year: 'numeric',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: true
}
},
{
label: 'Job Next Fire Time',
fieldName: 'jobNextFireTime',
type: 'date',
typeAttributes: {
day: 'numeric',
month: 'short',
year: 'numeric',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: true
}
},
{
label: 'Job Times Triggered',
fieldName: 'jobTimesTriggered'
},
{
label: 'Created By',
fieldName: 'createdByUserName',
type: 'text'
}
];
export default class LWCAsyncJobs extends LightningElement {
data = [];
columns = columns;
@wire(fetchAsyncJobs)
wireAccounts({ error, data }) {
if (data) {
console.log(data);
this.data = data;
this.error = undefined;
} else if (error) {
this.error = error;
}
}
}
lWCAsyncJobs.js-meta.xml :
<?xml version="1.0"?> <LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata"> <apiVersion>55.0</apiVersion> <isExposed>true</isExposed> <targets> <target>lightning__HomePage</target> </targets> </LightningComponentBundle>
Output :
Reference :
What’s your Reaction?
+1
+1
+1
+1
+1
+1
