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
NecroGigglesNecroGiggles 

Trigger Timing problem

I am having a problem with the timing of this trigger. Here is the scenario that cuases it not to work right.

When you add a Lead or Contact as a Campain Memebr and you set the  Response_Tracking_date__c from Null to a date the trigger does not fire off. It will fire if you edit the same recored and save it again no problem or if you just leave Response_Tracking_date__c blank and let the system fill it out. 

I think it has something to do with it being "before Insert" I am guessing the new info in  Response_Tracking_date__c is not there to look at when the trigger fires off. I tired adding "after Insert" but get errror " execution of AfterInsert caused by: System.FinalException: Record is read-only: Trigger.CampaignMemberTrigger: line 15, column 1"
 
trigger CampaignMemberTrigger on CampaignMember (before insert, before update, after insert) {
    // Get a list of fields from the sObject Marketing_KPI_Target__c and name the list kpiTargetList
    List<Marketing_KPI_Target__c> kpiTargetList = [SELECT Type_of_Sale__c, ECI_Product__c, CurrencyIsoCode,KPI_Target_Date__c FROM Marketing_KPI_Target__c];
    
    for (CampaignMember member : Trigger.New) {
        for (Marketing_KPI_Target__c kpiTarget : kpiTargetList) {
            if (kpiTarget.Type_of_Sale__c == member.Type_of_Sale__c &&
                kpiTarget.ECI_Product__c == member.ECI_Product__c &&
                kpiTarget.CurrencyIsoCode == member.Currency__c &&
               	member.Response_Tracking_date__c != Null &&
                kpiTarget.KPI_Target_Date__c.month() == member.Response_Tracking_Date__c.month() &&
				kpiTarget.KPI_Target_Date__c.year() == member.Response_Tracking_Date__c.year() &&
                member.HasResponded == True)
            {
                member.Marketing_KPI_Target__c = kpiTarget.Id;
                continue;
            }
        }
    }
}



 
trigger CampaignMemberTrigger on CampaignMember (before insert, before update) {
    // Get a list of fields from the sObject Marketing_KPI_Target__c and name the list kpiTargetList
    List<Marketing_KPI_Target__c> kpiTargetList = [SELECT Type_of_Sale__c, ECI_Product__c, CurrencyIsoCode,KPI_Target_Date__c FROM Marketing_KPI_Target__c];
    
    for (CampaignMember member : Trigger.New) {
        for (Marketing_KPI_Target__c kpiTarget : kpiTargetList) {
            if (kpiTarget.Type_of_Sale__c == member.Type_of_Sale__c &&
                kpiTarget.ECI_Product__c == member.ECI_Product__c &&
                kpiTarget.CurrencyIsoCode == member.Currency__c &&
               	member.Response_Tracking_date__c != Null &&
                kpiTarget.KPI_Target_Date__c.month() == member.Response_Tracking_Date__c.month() &&
				kpiTarget.KPI_Target_Date__c.year() == member.Response_Tracking_Date__c.year() &&
                member.HasResponded == True)
            {
                member.Marketing_KPI_Target__c = kpiTarget.Id;
                continue;
            }
        }
    }
}

 
Best Answer chosen by NecroGiggles
Amit Chaudhary 8Amit Chaudhary 8
Hi NecroGiggles,

Read only error is coming because of After event  in CampaignMemberTrigger  trigger.
Try to remove After insert event and check

Thanks

All Answers

Amit Chaudhary 8Amit Chaudhary 8
Hi NecroGiggles,

Read only error is coming because of After event  in CampaignMemberTrigger  trigger.
Try to remove After insert event and check

Thanks
This was selected as the best answer
NecroGigglesNecroGiggles
I remove it and the error is gone but I still have the timming problem. 

When you add a Lead or Contact as a Campain Memebr and you set the  Response_Tracking_date__c from Null to a date the trigger does not fire off. It will fire if you edit the same recored and save it again no problem