Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Panel
nameblue

This section describes how a task can be sent to the scheduler.

 

What does this section cover?

Table of Contents

Two methods can be used to schedule a process to run:

Method 1
Expand
titleMethod 1
Code Block
languagejava
title
CRMBOProcessRunDefinitionBean.java
public Date scheduleProcess(String processRunLogID, String processRunLogNum, String EJBName, String processRunFunction,	String processRunDesc, Date executionDate,String entityName,String entityID) throws Exception

processRunLogID: the process run log id

processRunLogNum: the process run log number

EJBName: the EJB class name containing the method call

processRunFunction - the name of the method to call

processRunDesc - the process run description

executionDate - the date that the process run is going to be executed

entityName - the name of the entity as it is defined in entities metadata file

entityID - the id of the entity as it is defined in entities metadata file

 


Method 2
Expand
titleMethod 2
Code Block
languagejava
title
CRMBOProcessRunDefinitionBean.java
public Date scheduleProcess(String processRunLogID, String processRunLogNum, String EJBName, String processRunFunction,String processRunDesc, String cronExpression,String entityName,String entityID) throws Exception {

...

processRunLogID: the process run log id

processRunLogNum: the process run log number

EJBName: the EJB class name containing the method call

processRunFunction - the name of the method to call

processRunDesc - the process run description

cronExpression - the cron expression that defines when the process run is going to be executed

entityName - the name of the entity as it is defined in entities metadata file

entityID - the id of the entity as it is defined in entities metadata file


 

The cronExpression parameter is used for complex triggers and defines the date and time of task execution. The valid forms of cronExpression are:

 

 ExpressionMeaning
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 * * ? 2005Fire 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 WEDFire at 2:10pm and at 2:44pm every Wednesday in the month of March.
0 15 10 ? * MON-FRIFire 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 ? * 6LFire at 10:15am on the last Friday of every month
0 15 10 ? * 6L 2002-2005Fire at 10:15am on every last friday of every month during the years 2002, 2003, 2004 and 2005
0 15 10 ? * 6#3Fire at 10:15am on the third Friday of every month


In the example below, you can see how the first method is used to send a process run log to the scheduler for execution. 

Code Block
titleSubmit a process run log to the scheduler
linenumberstrue
collapsetrue
 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;
	}

For method 1: 

processRunLogID: the process run log id

...

entityName - the name of the entity as it is defined in entities metadata file

entityID - the id of the entity as it is defined in entities metadata file


The only difference between the first and the second method is their sixth parameter. The first method accepts a date and the second one a cron expression.


public Date scheduleProcess(String processRunLogID, String processRunLogNum, String EJBName, String processRunFunction,    String processRunDesc, Date executionDate)

The cronExpression parameter is used for complex triggers which defines date and time of task execution. The following forms are valid for cronExpression :


 ExpressionMeaning
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 * * ? 2005Fire 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 WEDFire at 2:10pm and at 2:44pm every Wednesday in the month of March.
0 15 10 ? * MON-FRIFire 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 ? * 6LFire at 10:15am on the last Friday of every month
0 15 10 ? * 6L 2002-2005Fire at 10:15am on every last friday of every month during the years 2002, 2003, 2004 and 2005
0 15 10 ? * 6#3Fire at 10:15am on the third Friday of every month


As example, we perform a normal billing run which is send to the scheduler as a task. In the beginning, we create a new normal billing run (BILLING>BILLING>PERFORM NORMAL BILLING RUNS>NEW), we define when it will be billed and also to the filter tab at subscription sub section, we choose random subscription to execute the normal billing. After we save the new normal billing run, we choose to execute up to formatting action and send the task to the scheduler. In addition, going to the scheduled tasks (FOUNDATION>UTILITIES>MANAGE SCHEDULED TASKS), we can see the billing task that been processed. As we can see below, some of the parameters which are passed in the methods are also illustrated as fields.

 

Expand
titleScheduler tasks


 

...