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
Charlotte Hellested BroebeckCharlotte Hellested Broebeck 

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 :-)
Best Answer chosen by Charlotte Hellested Broebeck
Saket Sharma 37Saket Sharma 37
Hi,
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

Saket Sharma 37Saket Sharma 37
Hi,
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
 
This was selected as the best answer
Charlotte Hellested BroebeckCharlotte Hellested Broebeck
It worked like a charm! Thank you :-)
Saket Sharma 37Saket Sharma 37
Welcome :)