I have the following code. I want to schedule my class every 15 seconds to update parent object called Opportunity.
Do let me know if my code is correct to acheive that.
secondly my batch apex is only processing one record. is there any bug in my code. do let ne know
global class updateOpportunityStage implements Database.Batchable<sObject>,Schedulable{
global string query ;
global updateOpportunityStage(){
Query = 'Select Id,BigMachines__Status__c from BigMachines__Quote__c' ;
}
global database.querylocator start(Database.BatchableContext BC){
return Database.getQueryLocator(query);
}
global void execute(SchedulableContext SC){
updateOpportunityStage stg = new updateOpportunityStage();
String cronStr = '0 0 * 30 * ?n';
System.schedule('Process Quotes', cronStr, stg);
database.executebatch(stg);
}
global void execute(Database.BatchableContext BC, List<sObject> scope){
Set<id> liOppIds = new Set<id>();
//List <Opportunity> oppList = new List<Opportunity>() ;
for(sObject s : scope){
BigMachines__Quote__c quote = (BigMachines__Quote__c)s;
// System.debug('Adil'+quote);
if(quote.BigMachines__Status__c == 'unison' && quote.BigMachines__Is_Primary__c == true)
liOppIds.add(quote.BigMachines__Opportunity__c);
}
//query all the opportunities in a single query
List<Opportunity> opp = new List<Opportunity>();
opp = [select id, StageName from Opportunity where id in :liOppIds and stagename != 'Closed Won'];
for ( Opportunity opps : opp)
{
opps.StageName = 'Closed Won' ;
}
//update all opportunities in a single DML
if(opp.size() > 0)
update opp;
}
global void finish(Database.BatchableContext BC){}
}