function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
LorenzoLorenzo 

batch class is not working

I write this batch class to update Campaigns with certains criteria and to delete their CAmpaign Member with certains criteria. But is not working! 
global class CampaignMemberDeleteBatch implements Database.Batchable<sObject>{

	

    global Database.QueryLocator start(Database.BatchableContext BC){
    	
    	//return Database.getQueryLocator('Select Id, Status, IsProcessed__c,IsActive,(Select Id,LeadId,ContactId,IsProcessed__c from CampaignMembers) from Campaign Where IsProcessed__c = true AND Status=\'Completed');
        return Database.getQueryLocator('Select Id, Status, IsProcessed__c,IsActive,(Select Id,LeadId,ContactId,IsProcessed__c from CampaignMembers) from Campaign Where IsProcessed__c = true AND Status=\'Completed');
    }

    global void execute(Database.BatchableContext BC,List<Campaign> scope){

	    List<Campaign>campaignToUpdate = new List<Campaign>();
		List<CampaignMember> memberToDelete = new List<CampaignMember>(); 

    	for(Campaign campaign : scope){
    		campaign.IsActive = false;
    		campaignToUpdate.add(campaign);


    		for(CampaignMember member : campaign.campaignMembers){
    			if((member.LeadId!=null || member.ContactID!=null) && member.IsProcessed__c ==true){
    				memberToDelete.add(member);
    			}

    		}
    	
    	}
    	update campaignToUpdate;                          //update IsActive field

    	delete memberToDelete;                            //delete
        Database.emptyRecycleBin(memberToDelete);         //hard delete
    }

    global void finish(Database.BatchableContext BC){
    
        
    }
}
Steven NsubugaSteven Nsubuga
I think you needed to use more quotes in the query. Try this
global class CampaignMemberDeleteBatch implements Database.Batchable<sObject>{

	

    global Database.QueryLocator start(Database.BatchableContext BC){
    	
    	//return Database.getQueryLocator('Select Id, Status, IsProcessed__c,IsActive,(Select Id,LeadId,ContactId,IsProcessed__c from CampaignMembers) from Campaign Where IsProcessed__c = true AND Status=\'Completed');
        return Database.getQueryLocator('Select Id, Status, IsProcessed__c,IsActive,(Select Id,LeadId,ContactId,IsProcessed__c from CampaignMembers) from Campaign Where IsProcessed__c = true AND Status=\'Completed\'');
    }

    global void execute(Database.BatchableContext BC,List<Campaign> scope){

	    List<Campaign>campaignToUpdate = new List<Campaign>();
		List<CampaignMember> memberToDelete = new List<CampaignMember>(); 

    	for(Campaign campaign : scope){
    		campaign.IsActive = false;
    		campaignToUpdate.add(campaign);


    		for(CampaignMember member : campaign.campaignMembers){
    			if((member.LeadId!=null || member.ContactID!=null) && member.IsProcessed__c ==true){
    				memberToDelete.add(member);
    			}

    		}
    	
    	}
    	update campaignToUpdate;                          //update IsActive field

    	delete memberToDelete;                            //delete
        Database.emptyRecycleBin(memberToDelete);         //hard delete
    }

    global void finish(Database.BatchableContext BC){
    
        
    }
}