I want to convert my below trigger to use Dynamic Apex, so that I can avoid code repetition for other objects. This is what my trigger does :-
- I have a object called Incident__c and a custom field called Notes__c (Long Text Area).
- Whenever a Note get created(In the Incident__c object record), Notes__c field should be updated with Note body.
- When there are many Notes created, Notes__c field should append with all Note bodies.
- Also, when an existing 'Note' is edited, edited value should be updated in the Notes__c field.
- When a 'Note' is deleted, Notes__c field should also be updated according to deletion.
My trigger currently does this all. But I got another 4 objects I should support the same scenario. And all those objects have that 'Notes__c' field created. So I want to use Dynamic apex so there won't be repeated code, how to use Dynamic apex to get the APINames of objects I want and use SObject types ?
-----Helper class--------------
public with sharing class NoteTriggerHelper {
public static void insertNotesBodyToTextField(List<Note> notes){
Set<Id> incid = new Set<Id>();
for(Note n : notes){
incid.add(n.ParentId);
}
List<grc__Incident__c> incidents = [Select Id,Notes__c, (SELECT Id,Title, Body FROM Notes) from grc__Incident__c where Id IN :incid];
for(grc__Incident__c incident : incidents){
incident.Notes__c = getNotesString(incident.Notes);
}
update incidents;
}
private static String getNotesString(List<Note> notes){
String notesString = '';
for(Note nt : notes){
notesString = ' seperator ' + nt.Body + '\n' +notesString;
}
return notesString;
}
}
----------trigger----------------------
trigger NoteTrigger on Note (after insert, after update, after delete) {
if(Trigger.isAfter){
if(Trigger.isInsert){
NoteTriggerHelper.insertNotesBodyToTextField(Trigger.new);
}
if(Trigger.isUpdate){
NoteTriggerHelper.insertNotesBodyToTextField(Trigger.new);
}
if(Trigger.isDelete){
NoteTriggerHelper.insertNotesBodyToTextField(Trigger.old);
}
}
}