You need to sign in to do that
Don't have an account?
sumit d
Total number of Campaign Members (Leads only) where Lead Status = RAW
Hi All,
I have a requirement where i want to calculate total number of Campaign members on Campaign where lead Status = RAW.
I have created a trigger for it and its helper class is given below:-
public class CampaignMemberTriggerHelper {
public static List<CampaignMember> newCampaignMembers = new List<CampaignMember>();
public static List<CampaignMember> oldCampaignMembers = new List<CampaignMember>();
public static Map<Id, CampaignMember> newMapCampaignMembers = new Map<Id, CampaignMember>();
public static Map<Id, CampaignMember> oldMapCampaignMembers = new Map<Id, CampaignMember>();
public static void updateNewNetleads(){
Set<Id> campaignsByIds = new Set<Id>();
Map<Id,Campaign> campaignMapToUpdate = new Map<Id,Campaign>();
List<Campaign> updateCampaignList = New List<Campaign>();
if(Trigger.isDelete){
for(CampaignMember cm: oldCampaignMembers){
if(cm.CampaignId != NULL){
campaignsByIds.add(cm.CampaignId);
}
}
}else{
for(CampaignMember cm: newCampaignMembers){
if(cm.CampaignId != NULL){
campaignsByIds.add(cm.CampaignId);
}
}
}
if(campaignsByIds.size()>0){
system.debug('test cam list'+campaignsByIds);
List<AggregateResult> aggrList = new List<AggregateResult>([SELECT Count(Id)ids,CampaignId
FROM CampaignMember
WHERE CampaignId IN:campaignsByIds
AND lead.Status ='RAW'
GROUP BY CampaignId]);
if(!aggrList.isEmpty()){
for(AggregateResult aggr:aggrList){
Campaign cmObj = new Campaign();
cmObj.Net_New_Lead__c = (Decimal)aggr.get('ids');
cmObj.Id = (Id)aggr.get('CampaignId');
campaignMapToUpdate.put(cmObj.Id, cmObj);
}
}
}
if(campaignMapToUpdate.values().size() > 0 ){
update campaignMapToUpdate.values();
}
}
}
I have a number field on which the total number of campaign members display
Now when i change the status of lead it does not work. how can i modify it so that when i change the status of lead still it work correct. As of now only when i create or delete a campaign member it works.
How can i modify this so that when i change the status of lead it works at that time too?
I have a requirement where i want to calculate total number of Campaign members on Campaign where lead Status = RAW.
I have created a trigger for it and its helper class is given below:-
public class CampaignMemberTriggerHelper {
public static List<CampaignMember> newCampaignMembers = new List<CampaignMember>();
public static List<CampaignMember> oldCampaignMembers = new List<CampaignMember>();
public static Map<Id, CampaignMember> newMapCampaignMembers = new Map<Id, CampaignMember>();
public static Map<Id, CampaignMember> oldMapCampaignMembers = new Map<Id, CampaignMember>();
public static void updateNewNetleads(){
Set<Id> campaignsByIds = new Set<Id>();
Map<Id,Campaign> campaignMapToUpdate = new Map<Id,Campaign>();
List<Campaign> updateCampaignList = New List<Campaign>();
if(Trigger.isDelete){
for(CampaignMember cm: oldCampaignMembers){
if(cm.CampaignId != NULL){
campaignsByIds.add(cm.CampaignId);
}
}
}else{
for(CampaignMember cm: newCampaignMembers){
if(cm.CampaignId != NULL){
campaignsByIds.add(cm.CampaignId);
}
}
}
if(campaignsByIds.size()>0){
system.debug('test cam list'+campaignsByIds);
List<AggregateResult> aggrList = new List<AggregateResult>([SELECT Count(Id)ids,CampaignId
FROM CampaignMember
WHERE CampaignId IN:campaignsByIds
AND lead.Status ='RAW'
GROUP BY CampaignId]);
if(!aggrList.isEmpty()){
for(AggregateResult aggr:aggrList){
Campaign cmObj = new Campaign();
cmObj.Net_New_Lead__c = (Decimal)aggr.get('ids');
cmObj.Id = (Id)aggr.get('CampaignId');
campaignMapToUpdate.put(cmObj.Id, cmObj);
}
}
}
if(campaignMapToUpdate.values().size() > 0 ){
update campaignMapToUpdate.values();
}
}
}
I have a number field on which the total number of campaign members display
Now when i change the status of lead it does not work. how can i modify it so that when i change the status of lead still it work correct. As of now only when i create or delete a campaign member it works.
How can i modify this so that when i change the status of lead it works at that time too?
You were doing dml operation Lead then you need to write a trigger on Lead object.
Thanks!!
Your trigger will be like below.
If this helps, Please mark it as best answer.
Thanks!!