Tuesday, 6 November 2012


Apex Scheduler
To invoke Apex classes to run at specific times, first implement the Schedulable interface for the class, then specify the schedule using either the Schedule Apex page in theSalesforce user interface, or the System.schedule method.
For more information about the Schedule Apex page, see “Scheduling Apex” in the Salesforce online help.
Important
http://www.salesforce.com/us/developer/docs/apexcode/Content/images/help/important.gifSalesforce only adds the process to the queue at the scheduled time. Actual execution may be delayed based on service availability.
You can only have 25 classes scheduled at one time. You can evaluate your current count by viewing the Scheduled Jobs page in Salesforce or programmatically using SOAP API to query the CronTrigger object.
Use extreme care if you are planning to schedule a class from a trigger. You must be able to guarantee that the trigger will not add more scheduled classes than the 25 that are allowed. In particular, consider API bulk updates, import wizards, mass record changes through the user interface, and all cases where more than one record can be updated at a time.
You cannot update an Apex class if there are one or more active scheduled jobs for that class.

The following are the values for the expression:
Name
Values
Special Characters
Seconds
0–59
None
Minutes
0–59
None
Hours
0–23
, - * /
Day_of_month
1–31
, - * ? / L W
Month
1–12 or the following:
·         JAN
·         FEB
§  MAR
§  APR
§  MAY
§  JUN
§  JUL
§  AUG
§  SEP
§  OCT
§  NOV
§  DEC
, - * /
Day_of_week
1–7 or the following:
·         SUN
·         MON
§  TUE
§  WED
§  THU
§  FRI
§  SAT
, - * ? / L #
optional_year
null or 1970–2099
, - * /
The special characters are defined as follows:
Special Character
Description
,
Delimits values. For example, use JAN, MAR, APR to specify more than one month.
-
Specifies a range. For example, use JAN-MAR to specify more than one month.
*
Specifies all values. For example, if Month is specified as *, the job is scheduled for every month.
?
Specifies no specific value. This is only available for Day_of_month and Day_of_week, and is generally used when specifying a value for one and not the other.
/
Specifies increments. The number before the slash specifies when the intervals will begin, and the number after the slash is the interval amount. For example, if you specify 1/5 for Day_of_month, the Apex class runs every fifth day of the month, starting on the first of the month.
L
Specifies the end of a range (last). This is only available for Day_of_month and Day_of_week. When used with Day of month, L always means the last day of the month, such as January 31, February 28 for leap years, and so on. When used with Day_of_week by itself, it always means 7 or SAT. When used with a Day_of_week value, it means the last of that type of day in the month. For example, if you specify 2L, you are specifying the last Monday of the month. Do not use a range of values with L as the results might be unexpected.
W
Specifies the nearest weekday (Monday-Friday) of the given day. This is only available for Day_of_month. For example, if you specify 20W, and the 20th is a Saturday, the class runs on the 19th. If you specify 1W, and the first is a Saturday, the class does not run in the previous month, but on the third, which is the following Monday.Tip
http://www.salesforce.com/us/developer/docs/apexcode/Content/images/help/helpTips_icon.gifUse the L and W together to specify the last weekday of the month.
#
Specifies the nth day of the month, in the format weekday#day_of_month. This is only available forDay_of_week. The number before the # specifies weekday (SUN-SAT). The number after the # specifies the day of the month. For example, specifying 2#2 means the class runs on the second Monday of every month.
The following are some examples of how to use the expression.
Expression
Description
0 0 13 * * ?
Class runs every day at 1 PM.
0 0 22 ? * 6L
Class runs the last Friday of every month at 10 PM.
0 0 10 ? * MON-FRI
Class runs Monday through Friday at 10 AM.
0 0 20 * * ? 2010
Class runs every day at 8 PM during the year 2010.
In the following example, the class proschedule implements the Schedulable interface. The class is scheduled to run at 8 AM, on the 13th of February.
proschedule p = new proschedule();
        String sch = '0 0 8 13 2 ?';
        system.schedule('One Time Pro', sch, p);
Apex Scheduler Best Practices and Limits
·         Salesforce only adds the process to the queue at the scheduled time. Actual execution may be delayed based on service availability.
·         Use extreme care if you are planning to schedule a class from a trigger. You must be able to guarantee that the trigger will not add more scheduled classes than the 25 that are allowed. In particular, consider API bulk updates, import wizards, mass record changes through the user interface, and all cases where more than one record can be updated at a time.
§  Though it's possible to do additional processing in the execute method, we recommend that all processing take place in a separate class.
§  You can only have 25 classes scheduled at one time. You can evaluate your current count by viewing the Scheduled Jobs page in Salesforce or programmatically using SOAP API to query the CronTrigger object.
§  You can't use the getContent and getContentAsPDFPageReference methods in scheduled Apex.
§  Synchronous Web service callouts are not supported from scheduled Apex. To be able to make callouts, make an asynchronous callout by placing the callout in a method annotated with @future(callout=true) and call this method from scheduled Apex. However, if your scheduled Apex executes a batch job, callouts are supported from the batch class. See Using Batch Apex.

Reference Salesforce docs


No comments:

Post a Comment

Why to use Database.Stateful()?

Database Stateful is interface. It is used in batch classes to maintain the state of the class across transactions i.e. if you want to use ...