You need to sign in to do that
Don't have an account?

Apex trigger to reset Event owner
I am trying to develop an Apex triger to cover the following scenario:
When changing Campaign owner any related Open Events change owner as well (default Salesforce behaviour). I want the trigger to reset the Event owner to previous value but only on Events related to a specific Campaign recordtype.
I have written the following trigger that works perfectly but I cannot figure out how to add the Campaign recordtype criteria:
trigger CampaignEventOwner on Campaign (after update) {
Map<Id,Campaign> changedOwnerCampaigns = new Map<Id,Campaign>();
for (Integer idx = 0; idx < trigger.new.size(); idx++) {
if (Trigger.new[idx].OwnerId <> Trigger.old[idx].OwnerId) {
changedOwnerCampaigns.put(Trigger.new[idx].id, Trigger.new[idx]);
}
}
List<Event> restoreEventOwner = new List<Event>();
System.debug('changedOwnerCampaigns:' + changedOwnerCampaigns);
// Find all open events for these campaigns and revert them
for(Event e : [SELECT Id, WhatId, OwnerId, Last_Assigned_Owner__c
FROM Event
Where WhatId in : changedOwnerCampaigns.keySet() AND EndDateTime >= :System.now() AND Last_Assigned_Owner__c <> null]) {
system.debug('e.OwnerId:' + e.OwnerId);
system.debug('e.Last_Assigned_Owner__c:' + e.Last_Assigned_Owner__c);
if (e.OwnerId <> e.Last_Assigned_Owner__c) {
e.OwnerId = e.Last_Assigned_Owner__c;
restoreEventOwner.add(e);
}
}
System.debug('restoreEventOwner:' + restoreEventOwner);
if (!restoreEventOwner.isEmpty()) {
update restoreEventOwner;
}
}
Any help would be highly appreciated :-)
When changing Campaign owner any related Open Events change owner as well (default Salesforce behaviour). I want the trigger to reset the Event owner to previous value but only on Events related to a specific Campaign recordtype.
I have written the following trigger that works perfectly but I cannot figure out how to add the Campaign recordtype criteria:
trigger CampaignEventOwner on Campaign (after update) {
Map<Id,Campaign> changedOwnerCampaigns = new Map<Id,Campaign>();
for (Integer idx = 0; idx < trigger.new.size(); idx++) {
if (Trigger.new[idx].OwnerId <> Trigger.old[idx].OwnerId) {
changedOwnerCampaigns.put(Trigger.new[idx].id, Trigger.new[idx]);
}
}
List<Event> restoreEventOwner = new List<Event>();
System.debug('changedOwnerCampaigns:' + changedOwnerCampaigns);
// Find all open events for these campaigns and revert them
for(Event e : [SELECT Id, WhatId, OwnerId, Last_Assigned_Owner__c
FROM Event
Where WhatId in : changedOwnerCampaigns.keySet() AND EndDateTime >= :System.now() AND Last_Assigned_Owner__c <> null]) {
system.debug('e.OwnerId:' + e.OwnerId);
system.debug('e.Last_Assigned_Owner__c:' + e.Last_Assigned_Owner__c);
if (e.OwnerId <> e.Last_Assigned_Owner__c) {
e.OwnerId = e.Last_Assigned_Owner__c;
restoreEventOwner.add(e);
}
}
System.debug('restoreEventOwner:' + restoreEventOwner);
if (!restoreEventOwner.isEmpty()) {
update restoreEventOwner;
}
}
Any help would be highly appreciated :-)
First get the record type id by name of the record type.
Id recId= Schema.SObjectType.Campaign.getRecordTypeInfosByName().get('Enter your Record Type Name').getRecordTypeId();
and in this line add this condition
if (Trigger.new[idx].OwnerId <> Trigger.old[idx].OwnerId && Trigger.new[idx].recordTypeId==recId) // recId is the Id which we got above.
If your problems get solved please mark it as best answer :)
Thanks
Saket Sharma
All Answers
First get the record type id by name of the record type.
Id recId= Schema.SObjectType.Campaign.getRecordTypeInfosByName().get('Enter your Record Type Name').getRecordTypeId();
and in this line add this condition
if (Trigger.new[idx].OwnerId <> Trigger.old[idx].OwnerId && Trigger.new[idx].recordTypeId==recId) // recId is the Id which we got above.
If your problems get solved please mark it as best answer :)
Thanks
Saket Sharma