Campaign Member History:
Campaign Member Status:
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.
This article explains how to build a custom Campaign Member History solution, since standard Field History Tracking isn't available on the CampaignMember object. A custom object plus an Apex trigger is used to capture insert, update, and delete events on Campaign Members.
Create a custom object named "CampaignMemberHistory" (API name: CampaignHistory__c) to store the record of changes made to CampaignMember records.
Create a trigger on CampaignMember to detect inserts, status/campaign changes on update, and deletes, and log each event as a CampaignHistory__c record. This sample trigger logs three scenarios: Campaign Member deletion, a status or Campaign change during update, and new Campaign Member creation.
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;
}
This trigger builds a human-readable log entry (who changed what, and when) for each Campaign Member insert, delete, status change, or Campaign reassignment, and inserts those log entries into the CampaignHistory__c custom object.
Go to Campaign, click Edit Layout, select the Campaign History related list you created, add any other required fields, and click Save.
Note: This is sample code and will not work in all scenarios — please edit and tailor the code to match your specific requirements.
000385967

We use three kinds of cookies on our websites: required, functional, and advertising. You can choose whether functional and advertising cookies apply. Click on the different cookie categories to find out more about each category and to change the default settings.
Privacy Statement
Required cookies are necessary for basic website functionality. Some examples include: session cookies needed to transmit the website, authentication cookies, and security cookies.
Functional cookies enhance functions, performance, and services on the website. Some examples include: cookies used to analyze site traffic, cookies used for market research, and cookies used to display advertising that is not directed to a particular individual.
Advertising cookies track activity across websites in order to understand a viewer’s interests, and direct them specific marketing. Some examples include: cookies used for remarketing, or interest-based advertising.