trigger EventTrigger on Event (after insert,after update) {
if(Trigger.isInsert){
if(Trigger.isAfter){
EventTriggerHelper.callFutureChildEventCreation(Trigger.New);
}
}
if(Trigger.isUpdate){
if(Trigger.isAfter){
EventTriggerHelper.callFutureChildEventUpdation(Trigger.New);
}
}
}
public class EventTriggerHelper {
public static void callFutureChildEventCreation (List<Event> newList){
List<String> eligibleList = new List<String>();
String devRecordTypeId = Schema.SObjectType.Event.getRecordTypeInfosByName().get('Campus Visit Meeting').getRecordTypeId();
for(Event evt: newList){
if(evt.recordTypeId == devRecordTypeId)
{
eligibleList.add(evt.Id);
}
}
if(eligibleList.size() > 0)
createChildEvents(eligibleList);
}
public static void callFutureChildEventUpdation (List<Event> newList){
List<String> eligibleList = new List<String>();
String devRecordTypeId = Schema.SObjectType.Event.getRecordTypeInfosByName().get('Campus Visit Meeting').getRecordTypeId();
for(Event evt: newList)
{
if(evt.recordTypeId == devRecordTypeId
&& evt.Parent_Event__c == NULL)
{
eligibleList.add(evt.Id);
}
}
if(eligibleList.size() > 0)
updateChildEvents(eligibleList);
}
@future
public static void createChildEvents(List<String> idsList){
system.debug('EventTriggerHelper.createChildEvents');
List<Event> eligibleList = new List<Event>();
List<Event> newEvents = new List<Event>();
String devRecordTypeId = Schema.SObjectType.Event.getRecordTypeInfosByName().get('Child Campus Visit Meetings').getRecordTypeId();
String Query = getEventQuery();
Query += ' WHERE Id IN : idsList';
List<Event> newList = (List<Event>) Database.query(Query);
for(Event evt: newList){
if(evt.EventWhoIds != NULL
&& evt.EventWhoIds.size() > 0)
{
eligibleList.add(evt);
}
}
if(eligibleList.size() == 0){
system.debug('No Match');
return;
}
system.debug(JSON.serializePretty(eligibleList));
for(Event evt: eligibleList){
for(String contactId: evt.EventWhoIds){
if(contactId != evt.WhoId){
Event newEvt = evt.clone(false, //preserveId,
true, //isDeepClone,
true, //preserveReadonlyTimestamps,
false); //preserveAutonumber);
newEvt.whoId = contactId;
newEvt.Parent_Event__c = evt.Id;
newEvt.RecordTypeId = devRecordTypeId;
newEvents.add(newEvt);
}
}
}
insert newEvents;
system.debug(JSON.serializePretty(newEvents));
}
@future
public static void updateChildEvents(List<String> idsList){
system.debug('EventTriggerHelper.updateChildEvents');
List<Event> eligibleList = new List<Event>();
List<Event> newEvents = new List<Event>();
Set<String> fieldNames = new Set<String>();
Map<String, Schema.SObjectField> m = Schema.SObjectType.Event.fields.getMap();
for(String fieldName: m.keySet()){
Schema.SObjectField sfd = m.get(fieldName);
schema.DescribeFieldResult dfr = sfd.getDescribe();
// if(!dfr.isCalculated())
if(!dfr.isCalculated()
&& dfr.isUpdateable()){
fieldNames.add(fieldName);
}
}
String devRecordTypeId = Schema.SObjectType.Event.getRecordTypeInfosByName().get('Child Campus Visit Meetings').getRecordTypeId();
String Query = getEventQuery();
Query += ' WHERE Id IN : idsList';
List<Event> newList = (List<Event>) Database.query(Query);
Query = getEventQuery();
Query += ' WHERE Parent_Event__c IN : idsList';
List<Event> newChildList = (List<Event>) Database.query(Query);
Map<Id,List<Event>> childEventsMap = new Map<Id,List<Event>>();
for(Event evt: newChildList){
if(!childEventsMap.containsKey(evt.Parent_Event__c))
childEventsMap.put(evt.Parent_Event__c,new List<Event> ());
childEventsMap.get(evt.Parent_Event__c).add(evt);
}
System.debug('childEventsMap: '+childEventsMap);
for(Event evt: newList){
if(evt.EventWhoIds != NULL
&& evt.EventWhoIds.size() > 0
&& childEventsMap.get(evt.Id) != NULL)
{
eligibleList.add(evt);
}
}
System.debug('eligibleList: '+eligibleList);
if(eligibleList.size()>0)
System.debug('childEventsMap.get(evt.Parent_Event__c): '+childEventsMap.get(eligibleList[0].Parent_Event__c));
if(eligibleList.size() == 0){
system.debug('No Match');
return;
}
//system.debug(JSON.serializePretty(eligibleList));
for(Event evt: eligibleList)
{
// for(Event cEvt: childEventsMap.get(evt.Parent_Event__c))
for(Event cEvt: childEventsMap.get(evt.Id))
{
for(String fieldName: fieldNames)
{
if(evt.get(fieldName) != NULL)
{
cEvt.put(fieldName,evt.get(fieldName));
}
}
newEvents.add(cEvt);
}
}
update newEvents;
}
public static String getEventQuery(){
String fields = '';
for(String fieldName: Schema.SObjectType.Event.fields.getMap().keySet()){
fields += fieldName;
fields += ', ';
}
fields += 'EventWhoIds ' ;
String Query = 'SELECT ';
Query += fields;
Query += ' FROM Event';
return Query;
}
}
This comment has been removed by the author.
ReplyDelete