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
venkateshyadav1243venkateshyadav1243 

trigger automatically creating the events records and updating the records

hi i write trigger  on my custom object when it will update first time i have to create event ,if i update next time its only update

i write trigger it will not updating its only creating can any one tel me where am doing mistak.

 

my trigger scenario is i have a filed called sales ready date in my custom object if i change tht date my event details will be updated .

below is my trigger

 

trigger TGR_EventDateOppName on Factory__c (after insert,before update) {

try{
Factory__c dgital=[select id,Sales_Ready_Date__c from Factory__c where id=:trigger.new ];
list<Event> newevent=new list<Event>();
Opportunity opp=[select id,name from Opportunity where id in (select Opportunity__c from factory__c where id=:trigger.new)];
system.debug('&&&'+opp);
for(factory__c df:trigger.new)
{


if(df.Sales_Ready_Date__c !=null)
{
Event e = new Event();
    e.StartDateTime =df.Sales_Ready_Date__c;
    e.EndDateTime =df.Sales_Ready_Date__c.addDays(1);
    e.Subject =opp.name;
    e.WhatId=df.id;
    newevent.add(e);
}

}
insert newevent;
Event e=[select id,StartDateTime,EndDateTime  from event where WhatId in(select Opportunity__c from factory__c where id=:trigger.new)];
system.debug('&&&'+e);
for(factory__c dfc:trigger.new)
{
    e.StartDateTime =dfc.Sales_Ready_Date__c;
    e.EndDateTime =dfc.Sales_Ready_Date__c.addDays(1);
 
}

update newevent;
system.debug('^^^^^^^^^^^^'+newevent);
}catch(Exception e){system.debug('&*&*'+e);}
}

Best Answer chosen by Admin (Salesforce Developers) 
Naidu PothiniNaidu Pothini
trigger TGR_EventDateOppName on Factory__c (after insert,before update) 
{
	if(trigger.isInsert)
	{
		List<Event> eventList = new List<Event>();

		for(Factory__c fac : Trigger.new)
		{
			if(fac.Sales_Ready_Date__c != null)
			{
				Event e = new Event();
			    e.StartDateTime = fac.Sales_Ready_Date__c;
			    e.EndDateTime = fac.Sales_Ready_Date__c.addDays(1);
			    e.Subject = fac.Opportunity__r.Name;
			    e.WhatId = fac.Id;

		    	eventList.add(e);
			}
		}

		insert eventList;
	}

	if(trigger.isUpdate)
	{
		List<Id> facIds = new List<Id>();

		Map<Id, Event> eventMap = new Map<Id, Event>();

		List<Event> eventList = new List<Event>();

		for(Integer i = 0; i < Trigger.new.size(); i++)
		{
			if(Trigger.new[i].Sales_Ready_Date__c <> Trigger.Old[i].Sales_Ready_Date__c)
			{
				facIds.add(Trigger.new[i].Id);
			}
		}
		
		for(Event ev : [SELECT Id, WhatId, StartDateTime, EndDateTime FROM Event WHERE WhatId IN :facIds])
		{
			eventMap.put(ev.WhatId, ev);
		}
		
		for(Factory__c dfc : Trigger.new)
		{
		    Event evnt = eventMap.get(dfc.Id);
		    if(evnt <> null)
		    {
		    	evnt.StartDateTime = dfc.Sales_Ready_Date__c;
		    	evnt.EndDateTime =dfc.Sales_Ready_Date__c.addDays(1);

		    	eventList.add(evnt);
		    }
		}

		update eventList;
	}
}

 try this.

All Answers

Naidu PothiniNaidu Pothini
trigger TGR_EventDateOppName on Factory__c (after insert,before update) 
{
	if(trigger.isInsert)
	{
		List<Event> eventList = new List<Event>();

		for(Factory__c fac : Trigger.new)
		{
			if(fac.Sales_Ready_Date__c != null)
			{
				Event e = new Event();
			    e.StartDateTime = fac.Sales_Ready_Date__c;
			    e.EndDateTime = fac.Sales_Ready_Date__c.addDays(1);
			    e.Subject = fac.Opportunity__r.Name;
			    e.WhatId = fac.Id;

		    	eventList.add(e);
			}
		}

		insert eventList;
	}

	if(trigger.isUpdate)
	{
		List<Id> facIds = new List<Id>();

		Map<Id, Event> eventMap = new Map<Id, Event>();

		List<Event> eventList = new List<Event>();

		for(Integer i = 0; i < Trigger.new.size(); i++)
		{
			if(Trigger.new[i].Sales_Ready_Date__c <> Trigger.Old[i].Sales_Ready_Date__c)
			{
				facIds.add(Trigger.new[i].Id);
			}
		}
		
		for(Event ev : [SELECT Id, WhatId, StartDateTime, EndDateTime FROM Event WHERE WhatId IN :facIds])
		{
			eventMap.put(ev.WhatId, ev);
		}
		
		for(Factory__c dfc : Trigger.new)
		{
		    Event evnt = eventMap.get(dfc.Id);
		    if(evnt <> null)
		    {
		    	evnt.StartDateTime = dfc.Sales_Ready_Date__c;
		    	evnt.EndDateTime =dfc.Sales_Ready_Date__c.addDays(1);

		    	eventList.add(evnt);
		    }
		}

		update eventList;
	}
}

 try this.

This was selected as the best answer
venkateshyadav1243venkateshyadav1243
Thanks naidu.
marella1800marella1800
TGR_EventDateOppName on digitalfactory__c (after insert,before update) { if(trigger.isInsert) { List eventList = new List(); for(digitalfactory__c fac : Trigger.new) { system.debug('3333333'+fac); if(fac.Sales_Ready_Date__c!= null) { system.debug('233333333'+fac.Sales_Ready_Date__c); Event e = new Event(); e.StartDateTime = fac.Sales_Ready_Date__c; e.EndDateTime = fac.Sales_Ready_Date__c.addDays(1); e.Subject = fac.Opportunity__r.Name; e.WhatId = fac.Id; eventList.add(e); system.debug('233333333'+eventList); } } insert eventList; } if(trigger.isUpdate) { System.debug('BBBBBBBBBB'); List facIds = new List(); Map eventMap = new Map(); List eventList = new List(); for(digitalfactory__c fac : Trigger.new) { System.debug('AAABBBBBBBBBB'); if(fac.Sales_Ready_Date__c != null) { System.debug('bAAABBBBBBBBBB'); Event e = new Event(); e.StartDateTime = fac.Sales_Ready_Date__c; e.EndDateTime = fac.Sales_Ready_Date__c.addDays(1); e.Subject = fac.Opportunity__r.Name; system.debug('venkiii'+fac.Opportunity__r.Name); e.WhatId = fac.Id; eventList.add(e); system.debug('11110000000000000'+eventList);} } if(eventlist.size()>0) { insert eventList; System.debug('@@@@@@@@@@@@@'+eventList);} else{ System.debug('@@@@@@@@@@@@@'); for(Integer i = 0; i < Trigger.new.size(); i++) { if(Trigger.Old[i].Sales_Ready_Date__c!=Trigger.new[i].Sales_Ready_Date__c) { facIds.add(Trigger.new[i].Id); } } for(Event ev : [SELECT Id, WhatId, StartDateTime, EndDateTime FROM Event WHERE WhatId IN :facIds]) { eventMap.put(ev.WhatId, ev); } for(digitalfactory__c dfc : Trigger.new) { Event evnt = eventMap.get(dfc.Id); system.debug('@@@@@@@@@@@@@@@'+evnt); if(evnt!=null) { evnt.StartDateTime = dfc.Sales_Ready_Date__c; evnt.EndDateTime =dfc.Sales_Ready_Date__c.addDays(1); eventList.add(evnt); } } update eventList; system.debug('@@@@list@@@@@@@@@@@'+eventList); } } }
The FinnsterThe Finnster
@naidu pothini, could you please provide the test class for this trigger? Thanks