You are viewing an old version of this page. View the current version.
Compare with Current
View Page History
« Previous
Version 19
Next »
This section describes how a task can be sent to the scheduler.
What does this section cover?
Available Methods to Use
To schedule a process run, you can use one of the following methods.
Method 1
/**
* Schedules a process.
*
* @param processRunLogID - the process run log id
* @param processRunLogNum - the process run log number
* @param EJBName - the EJB class name containing the method call
* @param processRunFunction - the name of the method to call
* @param processRunDesc - the process run description
* @param executionDate - the date that the process run is going to be executed
* @param entityName - the entity name of entity that is being scheduled
* @param entityID - the id of entity that is being scheduled
* @throws Exception
*/
public Date scheduleProcess(String processRunLogID, String processRunLogNum, String EJBName, String processRunFunction, String processRunDesc, Date executionDate,String entityName,String entityID) throws Exception
Note that the entityName and entityID parameters are the name and id of the entity, as they are defined in entities metadata file
Method 2
/**
* Schedules a process.
*
* @param processRunLogID - the process run log id
* @param processRunLogNum - the process run log number
* @param EJBName - the EJB class name containing the method call
* @param processRunFunction - the name of the method to call
* @param processRunDesc - the process run description
* @param cronExpression - the cron expression that defines when the process run is going to be executed
* @param entityName - the entity name of entity that is being scheduled
* @param entityID - the id of entity that is being scheduled
* @throws Exception
*/
public Date scheduleProcess(String processRunLogID, String processRunLogNum, String EJBName, String processRunFunction,String processRunDesc, String cronExpression,String entityName,String entityID) throws Exception {
The cronExpression parameter is used for complex triggers and defines the date and time of task execution. The valid forms of cronExpression are:
Expression | Meaning |
0 0 12 * * ? | Fire at 12pm (noon) every day |
0 15 10 ? * * | Fire at 10:15am every day |
0 15 10 * * ? | Fire at 10:15am every day |
0 15 10 * * ? * | Fire at 10:15am every day |
0 15 10 * * ? 2005 | Fire at 10:15am every day during the year 2005 |
0 * 14 * * ? | Fire every minute starting at 2pm and ending at 2:59pm, every day |
0 0/5 14 * * ? | Fire every 5 minutes starting at 2pm and ending at 2:55pm, every day |
0 0/5 14,18 * * ? | Fire every 5 minutes starting at 2pm and ending at 2:55pm, AND fire every 5 minutes starting at 6pm and ending at 6:55pm, every day |
0 0-5 14 * * ? | Fire every minute starting at 2pm and ending at 2:05pm, every day |
0 10,44 14 ? 3 WED | Fire at 2:10pm and at 2:44pm every Wednesday in the month of March. |
0 15 10 ? * MON-FRI | Fire at 10:15am every Monday, Tuesday, Wednesday, Thursday and Friday |
0 15 10 15 * ? | Fire at 10:15am on the 15th day of every month |
0 15 10 L * ? | Fire at 10:15am on the last day of every month |
0 15 10 ? * 6L | Fire at 10:15am on the last Friday of every month |
0 15 10 ? * 6L 2002-2005 | Fire at 10:15am on every last friday of every month during the years 2002, 2003, 2004 and 2005 |
0 15 10 ? * 6#3 | Fire at 10:15am on the third Friday of every month |
How to use the available methods
In the example below, you can see how the first method is used to send a process run log to the scheduler for execution.
Scheduler tasks
public Process submit(CRMDOProcessRunLog processRunLog) throws Exception {
Process process =null;
CRMDOProcessRunDefinition processRunDefinition = processRunLog.getProcessRunDefinition();
SchedulerTask schedulerTask = processRunDefinitionXMLUtilBean.loadScheduleSettings(processRunDefinition.getSchSettingXML());
CronExpression cron = new CronExpression(SchedulerUtil.createCronExpression(this, schedulerTask).getCron());
Date startDate = schedulerTask.getRecurrdate();
if(startDate==null || startDate.before(getCurrentDate()))
{
startDate = DateUtil.addSeconds(getCurrentDate(),5);
}else if(schedulerTask.getRunmode().equals(SchedulerUtil.RUN_MODE_RECURRENCE) || schedulerTask.getRunmode().equals(SchedulerUtil.RUN_MODE_REPEAT))
{
startDate = DateUtil.addSeconds(startDate,-5);
}
Date nextExecutionDate = cron.getNextValidTimeAfter(startDate);
Date endDate = schedulerTask.getEnddate();//schedulerTask.calculateEndDate();
if (nextExecutionDate!=null)
{
Entity entity = MetadataUtil.getEntityByClass(processRunDefinition.getClass().getName(), getCRMSession().getRealPath(), getOrganisationID());
if(endDate==null || nextExecutionDate.before(endDate))
{
processRunLogBean.save(processRunLog);
Module module = MetadataUtil.getModuleByID(
processRunDefinition.getModule(),
getCRMSession().getRealPath(),
getOrganisationID());
process = MetadataUtil.getModuleAdditionalProcess(module, processRunDefinition.getProcess());
ArrayList<Method> methods = process.getMethods();
for (int i=0; i<methods.size(); i++)
{
Method method = methods.get(i);
String dateInfo = DateUtil.getDateString(processRunLog.getCreatedDate(), "dd MM yyyy HH mm ss");
dateInfo = dateInfo.replaceAll("\\s","");
String jobName = processRunLog.getNumber() + "_" + dateInfo;
Date scheduledDate = CRMProcessRun.scheduleProcess(
processRunLog.getId(),
jobName,
method.getEjbname(),
method.getMethodname(),
processRunDefinition.getDescription(),
nextExecutionDate,
entity.getId(),
processRunDefinition.getId());
processRunDefinition.setScheduledDate(scheduledDate);
save(processRunDefinition);
}
}
}
return process;
}