My Batch class logic is:
global class batch_update_Daily_Contacts implements Database.Batchable<sObject>,schedulable
{
Set<Id> ContactIds = New Set<Id>();
set<Id> OppIds = New Set<Id>();
Set<Id> CaseContactIds = New Set<Id>();
Set<Id> WhoIds = New Set<Id>();
List<Contact> conList = new List<Contact>();
global Database.QueryLocator start(Database.BatchableContext BC)
{
string query = 'SELECT Id FROM Contact where Validate_Retention__c =false';
if(query != null)
{
system.debug('inside if');
return Database.getQueryLocator(query);
}
else
return null;
}
global void execute(Database.BatchableContext BC,List<Contact> scope)
{
for(Contact ConObj : Scope){
ContactIds.add(ConObj.Id);
system.debug('This is ContactIds: ' +ContactIds);
}
if(ContactIds != null){
for(Case caseObj : [SELECT ID,ContactId FROM Case Where (ContactId IN : ContactIds) OR (CreatedDate = TODAY)]){
CaseContactIds.add(caseObj.ContactId);
system.debug('This is CaseContactIds: ' +CaseContactIds);
}
for(Task taskObj : [SELECT ID,WhoID FROM Task Where ( WhoID IN : ContactIds AND Who.Type = 'Contact') Or (CreatedDate = TODAY) ])
{
WhoIds.add(taskObj.WhoID);
system.debug('This is WhoIds: ' +WhoIds);
}
for(Opportunity oppObj : [select ContactId from Opportunity where Last_Donation__c = TODAY AND ContactId IN : ContactIds])
{
OppIds.add(oppObj.ContactID);
system.debug('This is OppIds: ' +OppIds);
}
}
if(CaseContactIds != null || WhoIds != null || OppIds != null){
CaseContactIds.addAll(WhoIds);
CaseContactIds.addAll(OppIds);
system.debug('This is CaseContactIds: ' +CaseContactIds);
}
for(Contact ConObj : [SELECT ID FROM Contact WHERE ID IN : CaseContactIds]){
system.debug('This is ConObj: ' +ConObj);
ConObj.Validate_Retention__c = true;
ConList.add(ConObj);
}
if(ConList != null){
update ConList;
}
}
global void finish(Database.BatchableContext BC)
{
}
public void execute(SchedulableContext sc)
{
}
}
After running, I am getting:
"First error: Apex CPU time limit exceeded"
Can someone help here?