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
bathybathy 

Apex trigger to update an unrelated custom object record

Hi All,

Since standard salesforce workflow doesn't allow to create eail alerts on events, I have created a custom object named task1__c and created task1 with an Apex trigger to send email alert when an event is created.

Now a new requirement has come up to send an email 2 days after the event is updated.

I am trying to modify the trigger to update the custom object and then use time based workflow on the custom object for email alert. here is my trigger to create new reords. I need help in modifying this trigger to update the custom object records

trigger createtask on Event (after insert) {    
List<Task1__c> t1 = new List<Task1__c>();
    for (Event newEvent: Trigger.New)
         {
                 t1.add (new Task1__c(
                     Name = 'New PD',
                   (text field on task1) Record_Id__c = newEvent.Id,
                    (text field ontask1)Record_Type__c = NewEvent.RecordTypeId,
                    Start__c = newEvent.StartDateTime,
                    Assigned_to__c = newEvent.OwnerId,
                   
                    Appointment_successful__c = newEvent.Appointment_Successful__c,//a custom tik box on events
                    Location__c = newEvent.Location,
                    End__c = newEvent.EndDateTime,
                    Description__c = newEvent.Description,
                 
                    Subject__c = newEvent.Subject,
                    Detail_link__c = 'https://mydomian.my.salesforce.com/' + newEvent.Id )); // to inlcude this detail link in the email alert 
         }
   insert t1;
}

when the user ticks the box Appointment successful an email alert must be generated.
since this is after insert trigger updates on events will not be mapped into custo ibject task1.
please help me to create an update trigger. I am not too sure how to create an update trigger for an unrelated custom object.

your prompt response is greatly appreciated.

thanks in advance.
Best Answer chosen by bathy
rohitsfdcrohitsfdc
No problem.
Try the code below. and dont shy to let me know in case of any issues.

Thanks

trigger updatetask on Event (after update){
list<task1__c> updatedtask = new list<task1__c>();

set<string> eventsids = new set<string>();
for(Event e : trigger.new){
eventsids.add(e.id);
}

list<Task1__c> tasklist = [select id, record_id__c from task1__c where record_id__c in : eventsids];


Map<String,event> eventmap = new map<String,event>();
for(Event e : trigger.new){
eventmap.put(e.id,e);
}

for(Task1__c customtask : tasklist){
if(eventmap.get(customtask.record_id__c)!=null){

Event UpdatedEvent = eventmap.get(task.record_id__c);

customtask.field1 = UpdatedEvent.field1;
//and so on.
updatedtask.add(customtask);


}
}

if(updatedtask.size()>0)
update updatedtask;

}


All Answers

Subramani_SFDCSubramani_SFDC
try here
http://writeforce.blogspot.com/2012/10/sending-email-notification-when.html
rohitsfdcrohitsfdc
Bathy,
for update trigger, try a code like this :

trigger updatetask on Event (after update){
list<task1__c> updatedtask = new list<task1__c>();

list<Task1__c> tasklist = [select id, record_id__c from task1__c where record_id__c in : trigger.new];


Map<id,event> eventmap = new map<id,event>();
for(Event e : trigger.new){
eventmap.put(e.id,e);
}

for(Task1__c customtask : tasklist){
if(eventmap.get(customtask.record_id__c)!=null){

Event UpdatedEvent = eventmap.get(task.record_id__c);

customtask.field1 = UpdatedEvent.field1;
updatedtask.add(customtask);
//and so on.

}
}

if(updatedtask.size()>0)
update updatedtask;

}
Please bear with me for any syntax errors, i just wrote this code on fly.

Thanks
R G

bathybathy
Hi Thanks RG,

I am posting the error here can you please correct?
User-added image
rohitsfdcrohitsfdc
My bad. 

replace that line with lines below

set<string> eventsids = new set<string>();
for(Event e : trigger.new){
eventsids.add(e.id);
}

list<Task1__c> tasklist = [select id, record_id__c from task1__c where record_id__c in : eventsids];

Let me know in case of any issues.
bathybathy
Hi RG,

Sorry if I am annoying you. I am completely new to Triggers. Another syntax error has been generated. Please helpUser-added image
rohitsfdcrohitsfdc
No problem.
Try the code below. and dont shy to let me know in case of any issues.

Thanks

trigger updatetask on Event (after update){
list<task1__c> updatedtask = new list<task1__c>();

set<string> eventsids = new set<string>();
for(Event e : trigger.new){
eventsids.add(e.id);
}

list<Task1__c> tasklist = [select id, record_id__c from task1__c where record_id__c in : eventsids];


Map<String,event> eventmap = new map<String,event>();
for(Event e : trigger.new){
eventmap.put(e.id,e);
}

for(Task1__c customtask : tasklist){
if(eventmap.get(customtask.record_id__c)!=null){

Event UpdatedEvent = eventmap.get(task.record_id__c);

customtask.field1 = UpdatedEvent.field1;
//and so on.
updatedtask.add(customtask);


}
}

if(updatedtask.size()>0)
update updatedtask;

}


This was selected as the best answer
bathybathy
hi Rohit,

Your code worked very well. thank you so much. Can you provide the test class for this Please?

Thanks,
bathybathy
Hi Rohit,

Thanks for your help. I was able to figure out the test class.

thanks for your help