Loading

Salesforce Platform: Track Campaign Member Status History

Veröffentlichungsdatum: Mar 31, 2026
Beschreibung

Campaign Member History:

  • Tracks the audit trail of status changes for Contacts or Leads in Campaigns.
  • Provides historical insights into engagement behavior, such as email interactions (e.g., sent, opened, clicked).
  • Not enabled by default and requires configuration.

Campaign Member Status:

  • Represents the engagement level of a Contact or Lead in a Campaign.
  • Examples include statuses like "Sent," "Opened," "Responded."
  • Can be customized and used to filter or sort campaign data.

Capturing campaign member history isn't possible with standard functionality, History Tracking isn't available for Campaign Members. However, by customizing the functionality as mentioned below may help to establish the requirement.

Lösung

Enabling History Tracking configuration steps

1. Create a Custom object named as "CampaignMemberHistory" i.e; CampaignHistory__c to store the record of changes done for CampaignMember. 


2. Create two fields:

a) Lookup with Campaign that will capture associated campaign id named as "CampaignId__c" with that Campaign Member.

b) Create a Rich text field with max character limit to capture the description of changes done named as "HistoryDetails__c".


3. Now create a Trigger as mentioned below on CampaignMember.
 

Trigger HistoryTrack on CampaignMember (after insert, before update, before delete) {          
List<CampaignHistory__c> ch= new List<CampaignHistory__c>(); 
List<CampaignMember> cmOld= Trigger.old;  
List<String> changes  = new List<String>(); 
List<String> CampHisId  = new List<String>(); 
integer i=0;     
if(Trigger.isDelete){
            for(CampaignMember cm: Trigger.old ){     
                       String s;                            
                       s='Campaign Member id ' + cm.id + 
                       'is Deleted from campaign id: '+ cm.campaignId + 'by user '+ userinfo.getUserName();                                        
                       changes.add(s);
                       CampHisId.add(cm.campaignId);
                       CampaignHistory__c c= new CampaignHistory__c();               
                       c.Name='History'+DateTime.now();  
                       System.debug('CName:'+c.Name);
                       c.CampaignId__c=CampHisId[i];
                       System.debug('CampaignId:'+c.CampaignId__c);                              
                       c.HistoryDetails__c=changes[i];
                      System.debug('CHistory:'+c.HistoryDetails__c);         
                      ch.add(c);                              
                      i++;           
             } 
        }else {      
                     for(CampaignMember cm: Trigger.new ){  
                            String s;
                            if((Trigger.isUpdate)){
                                   if(cmOld[i].status!=cm.status){    
                                          s='on dated ' + DateTime.now() +                        
                                            ' status changed from ' + cmOld[i].status + ' to ' + cm.status +                        
                                            ' by user ' + userinfo.getUserName();
                                           
                                           changes.add(s);
                                          CampHisId.add(cm.campaignId);                                                  
                                          CampaignHistory__c c= new CampaignHistory__c();                          
                                          c.Name='History'+DateTime.now();
                                          System.debug('CName:'+c.Name);
                                          c.CampaignId__c=CampHisId[i];                        
                                          System.debug('CampaignId:'+c.CampaignId__c);                                      
                                          c.HistoryDetails__c=changes[i];
                                          System.debug('CHistory:'+c.HistoryDetails__c);
                                          ch.add(c); 
                                      }else if(cmOld[i].campaignId!=cm.campaignId){                        
                                                s='Changed Campaign id from : '+ cmOld[i].campaignId + 'to :' + cm.campaignId +                        
                                                    ' by user '+ userinfo.getUserName();  
                                              changes.add(s);                        
                                             CampHisId.add(cm.campaignId);                                                            
                                            CampaignHistory__c c= new CampaignHistory__c();                           
                                            c.Name='History'+DateTime.now();
                                            System.debug('CName:'+c.Name);              
                                            c.CampaignId__c=CampHisId[i];                   
                                           System.debug('CampaignId:'+c.CampaignId__c);                                          
                                            c.HistoryDetails__c=changes[i];
                                            System.debug('CHistory:'+c.HistoryDetails__c);                         
                                            ch.add(c);
                                         }             
                           }else if(Trigger.isInsert){                                
                                       s='A new Campaign Member id : ' + cm.id + ' is added to Campaign id :' + cm.campaignId +' by user '+ userinfo.getUserName();
                                       changes.add(s);                    
                                       CampHisId.add(cm.campaignId);                    
                                       System.debug('s>>>'+s);                                                                    
                                       CampaignHistory__c c= new CampaignHistory__c();
                                       c.Name='History'+DateTime.now();                   
                                       System.debug('CName:'+c.Name);
                                       c.CampaignId__c=CampHisId[i];
                                       System.debug('CampaignId:'+c.CampaignId__c);                                          
                                       c.HistoryDetails__c=changes[i];
                                       System.debug('CHistory:'+c.HistoryDetails__c);                                        
                                       ch.add(c);
                            } 
                            i++;     
                       }         
                }    
                insert ch;
     }

4. Now go to Campaign and click Edit layout, now select Campaign History that you have created and add other required field and click Save.

Please note that this is a sample code and will not work in all scenarios, please edit and tailor the code to match your requirement

Nummer des Knowledge-Artikels

000385967

 
Laden
Salesforce Help | Article