You need to sign in to do that
Don't have an account?
rajesh k 10
Urgent:How to run a batch between Two dates below batch class?
Hi ,
I created one batch class like below .I have one object like Renual__c,This object consist of two fields startdate__c and Enddate__c.How to run my batchclass between these two dates?
global class ExpiryDateBatchCls implements Database.Batchable<sObject>
{
String query;
global Database.querylocator start(Database.BatchableContext BC)
{
query = 'Select id,Expire_Date__c from Sales_Order__c';
System.debug('***query****'+query);
return Database.getQueryLocator(query);
}
global void execute(Database.BatchableContext BC, List<Sales_Order__c> scope)
{
Date tempdate = system.today() + 90;
list<Opportunity> OppList = new list<Opportunity>();
for( Sales_Order__c ob1 : scope){
if(ob1.Expire_Date__c == tempdate)
{
Opportunity op = new Opportunity();
op.Name = op.Name+'Renual';
op.ForecastCategoryName = 'Pipeline' ;
op.CloseDate = System.today() + 15 ;
op.StageName = 'Prospecting';
OppList.add(op);
}
}
if(OppList.size()>0){
insert OppList;
}
}
global void finish(Database.BatchableContext BC)
{
}
}
please help me.......
I created one batch class like below .I have one object like Renual__c,This object consist of two fields startdate__c and Enddate__c.How to run my batchclass between these two dates?
global class ExpiryDateBatchCls implements Database.Batchable<sObject>
{
String query;
global Database.querylocator start(Database.BatchableContext BC)
{
query = 'Select id,Expire_Date__c from Sales_Order__c';
System.debug('***query****'+query);
return Database.getQueryLocator(query);
}
global void execute(Database.BatchableContext BC, List<Sales_Order__c> scope)
{
Date tempdate = system.today() + 90;
list<Opportunity> OppList = new list<Opportunity>();
for( Sales_Order__c ob1 : scope){
if(ob1.Expire_Date__c == tempdate)
{
Opportunity op = new Opportunity();
op.Name = op.Name+'Renual';
op.ForecastCategoryName = 'Pipeline' ;
op.CloseDate = System.today() + 15 ;
op.StageName = 'Prospecting';
OppList.add(op);
}
}
if(OppList.size()>0){
insert OppList;
}
}
global void finish(Database.BatchableContext BC)
{
}
}
please help me.......
The string parameter(sch in my code sample) composed of
Seconds Minutes Hours Day_of_month Month Day_of_week optional_year
So if StartDate = 06/08/2014 string will be "0 0 0 06 08 ? 2014"
Don't forget to unschedule job if you wan't it to be executed only once
Here's the link of how you can do it http://salesforce.stackexchange.com/questions/24436/is-there-any-way-to-unschedule-an-apex-scheduled-job-programmatically
All Answers
I can't understand your proper requirment and If you want a batch should run at some speicific time than you can schedule a batch.
Schedule a batch means use scheduler class to schedule your batch at specific time.
http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_scheduler.htm
http://blog.shivanathd.com/2013/01/run-batch-class-hourly.html
IF it helps you than please mark it as a solution and ENJOY APEX
I want above batch run between based on the startdate__c and enddate__c of Renewal__c object.Renual__c object and sales_Order__c both no relationships.
How to run above batch between startdate__C and Enddate__c?
please help me............
This is info from docs givven above by Ashlekh
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 2
proschedule - class implemented "Schedulable"
I will enter my dates In my object(Renual__c) fields like startdate and enddate (both fields are datetime fields).Based on these dates how to run above Batch class?
help me......
The string parameter(sch in my code sample) composed of
Seconds Minutes Hours Day_of_month Month Day_of_week optional_year
So if StartDate = 06/08/2014 string will be "0 0 0 06 08 ? 2014"
Don't forget to unschedule job if you wan't it to be executed only once
Here's the link of how you can do it http://salesforce.stackexchange.com/questions/24436/is-there-any-way-to-unschedule-an-apex-scheduled-job-programmatically
I will enter any dates in startdate and enddate(these dates not fixed .Every time i will goto renewal__c object i will give startdate and enddate).How to run my batch class between these dates.
help me...
Every time with in the renual Object record creation time based on the user will enter startdate and enddate .Between these two dates above batch class how will run?
want schedule batch from visualforce page?
Like below link how?
https://www.cloudclickware.com/jobbook/
As I see in the link you've provided there's only one date - "preferred start". So you have only one date and you shuold add Shceduled job as I described in my first response on this thread via system.schedule() method
This is my requirement
How to run a batch class between Two dates based on frequency(scheduled time) Dynamically from visualforce page?
In my visualforce page 4 fields
1)Job name
2)Startdate(datetime field type)
3)Enddate(datetime field type)
4)Frequency(datetime field type)
My requirement is how to run batch between Startdate and enddate based on Frequency
Dynamically from visualforce page?
-
Create another 1 scheduled batch job which checks StardDate fields and create new jobs with needed frequency.
-
After creating object you create scheduled job from startDate field. After job is done you just delete current and create new based on needed frequency.
But anyway you should delete jobs: in another batch as in 1st oprtion or in the end of created scheduled job.Here's the some info from the web http://penrodcrm.com/blog/how-create-system-job-cron-job-forcecom-salesforce
Here What is Cronid__c
This is ID of created job. After you scheduled you job you have CronId.
This is my code please help me 1 week to i wa try to this only
page:
..........
<apex:page standardController="Renewal__c" extensions="RSCls" sidebar="false">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<Script>
function resetForm(ele)
{
$(ele).closest('form').find("input[type=text], textarea").val("");
}
</script>
<apex:form >
<apex:sectionHeader title="Renewal"/>
<apex:pageBlock >
<apex:pageBlockButtons location="bottom">
<apex:commandButton value="Renewal" action="{!dosave}"/>
<!-- <apex:commandButton value="Save & New" action="{!doNewSave}"/>-->
<!-- <apex:commandButton value="Cancel"/> -->
<apex:commandButton value="reset" onclick="return resetForm(this);"/>
</apex:pageBlockButtons>
<apeX:pageBlockSection columns="1">
<apex:inputField value="{!Renewal__c.Name}"/>
<apex:inputField value="{!Renewal__c.Start_Date__c}"/>
<apex:inputField value="{!Renewal__c.End_date__c}"/>
<apex:inputField value="{!Renewal__c.Frequency__c}"/>
</apeX:pageBlockSection>
</apex:pageBlock>
</apex:form>
</apex:page>
Controller:
...................
public class RSCls {
public Renewal__c renewal;
public RSCls(ApexPages.StandardController controller) {
this.renewal=(Renewal__c)controller.getRecord();
Datetime Sdate1=renewal.Start_date__c;
Datetime Edate1=renewal.End_date__c;
Datetime Fdate=renewal.Frequency__c;
String Rname=renewal.name;
}
public pageReference doNewSave()
{
doSave();
pageReference ref=new pageReference('/apex/jobschedular');
return ref.setRedirect(true);
}
public void doSave()
{
// callRenewal.getX();
Datetime Sdate1=renewal.Start_date__c;
integer d = Sdate1.day();
integer m = Sdate1.month();
integer h = Sdate1.hour();
integer s = Sdate1.second();
integer min = Sdate1.minute();
integer yr = Sdate1.year();
ExpiryDateBatchClsSchedular addmerge = new ExpiryDateBatchClsSchedular();
String sch = string.valueof(s) + ' ' + string.valueof(min) + ' ' + string.valueof(h) + ' ' + string.valueof(d) + ' ' + string.valueof(m) + ' ' + '?' + ' ' + string.valueof(yr);
String Rname=renewal.name;
Id cronId=System.schedule(Rname,sch,new ExpiryDateBatchClsSchedular());//'1 0 * * * ?'
Renewal__c[] ren=[SELECT name,Start_date__c,End_date__c,Frequency__C FROM Bisoftsols__Renewal__C];
CronTrigger ct=[SELECT StartTime,EndTime,NextFireTime,TimesTriggered,State FROM CronTrigger];
DateTime starttime=ct.StartTime;
DateTime Endtime=ct.EndTime;
DateTime NextFireTime=ct.NextFireTime;
Integer TimesTriggered=ct.TimesTriggered;
for(Integer i=0;i<ren.size();i++)
{
ren[i].start_date__C=starttime;
ren[i].End_date__C=Endtime;
ren[i].Frequency__c=NextFireTime;
update ren;
}
/* List<CronTrigger> cronTriggersReadyToFireAgain = [SELECT Id FROM CronTrigger WHERE NextFireTime != null]; //create a list of CronTrigger records that are scheduled to fire again
System.debug('******cronTriggersReadyToFireAgain********'+cronTriggersReadyToFireAgain);
if (!cronTriggersReadyToFireAgain.isEmpty()) { //if the list is not empty
for (CronTrigger t : cronTriggersReadyToFireAgain) { //for each record
System.debug('******t******'+t);
System.abortJob(t.Id); //abort the job
// System.debug('****** System.abortJob(t.Id)******'+System.abortJob(t.Id));
}
}*/
}
}
please help me..............