You need to sign in to do that
Don't have an account?
Gallery Integration
Bulk trigger to prevent "Too many SOQL queries:101" error message on Campaign member not working
Hi All,
Previously I am using a process builder to update a field called "Reminder Date" in campaign member while the field "Reminder Date" in the campaign was changed/edited.
However, I hit too many soql queries error while uploading 100++ members at once.
So I deactivate the process builder and change it to Apex Trigger instead.
However, this bulk trigger seems not working to me, I use this same logic to update other field from contact at it works fine.
Are there anything that I am missing from this code?
trigger CampaignMemberUpdateReminderDate on CampaignMember (before insert, before update){
Set<id> CampaignMemberIds = new Set<id>();
for (CampaignMember a : Trigger.new)
CampaignMemberIds.add(a.CampaignId);
Map<id, Campaign> campaigns = new Map<id, Campaign>([Select Reminder_Date__c from Campaign Where Id in :CampaignMemberIds]);
// iterate over the list of records being processed in the trigger and
for (CampaignMember a : Trigger.new)
{ a.Reminder_Date__c = campaigns.get(a.CampaignId).Reminder_Date__c;
}
}
Previously I am using a process builder to update a field called "Reminder Date" in campaign member while the field "Reminder Date" in the campaign was changed/edited.
However, I hit too many soql queries error while uploading 100++ members at once.
So I deactivate the process builder and change it to Apex Trigger instead.
However, this bulk trigger seems not working to me, I use this same logic to update other field from contact at it works fine.
Are there anything that I am missing from this code?
trigger CampaignMemberUpdateReminderDate on CampaignMember (before insert, before update){
Set<id> CampaignMemberIds = new Set<id>();
for (CampaignMember a : Trigger.new)
CampaignMemberIds.add(a.CampaignId);
Map<id, Campaign> campaigns = new Map<id, Campaign>([Select Reminder_Date__c from Campaign Where Id in :CampaignMemberIds]);
// iterate over the list of records being processed in the trigger and
for (CampaignMember a : Trigger.new)
{ a.Reminder_Date__c = campaigns.get(a.CampaignId).Reminder_Date__c;
}
}
Try this code:
Let me know if it helps.
Thanks
All Answers
Try this code:
Let me know if it helps.
Thanks
It takes the value from Campaigns to Campaign Members only when it is created, not when it gets updated for some reasons.
trigger CampaignMemberUpdateReminderDate on CampaignMember (before insert, before update){
Set<id> CampaignMemberIds = new Set<id>();
for (CampaignMember a : Trigger.new)
CampaignMemberIds.add(a.CampaignId);
Map<id, Campaign> campaigns = new Map<id, Campaign>([Select Id,Reminder_Date__c from Campaign Where Id in :CampaignMemberIds]);
// iterate over the list of records being processed in the trigger and
for (CampaignMember a : Trigger.new)
{ a.Reminder_Date__c = campaigns.get(a.CampaignId).Reminder_Date__c;
}
}