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
ethanoneethanone 

Dynamic fieldname with trigger.new and trigger.old

I need to look for changes in a list of fields in a record using a trigger. How can I reference the list of fields and append it to the trigger.new and the trigger.old references?

Below is code I've tried to use, but my variable "s" is not recognized. Thanks for any help you can provide.
Map<Id, lda_Opportunity__c> MPPMap = new Map<Id, lda_Opportunity__c>();

list<Schema.SObjectField> FieldList = new list<Schema.SObjectField>();
FieldList.add(lda_Opportunity__c.Location__c); // Many more fields to add
        
for (integer i=0; i < trigger.new.size(); i++){
   for (Schema.SObjectField s : FieldList){
      if (trigger.new[i].s != trigger.old[i].s){
         MPPMap.put(trigger.new[i].Id, trigger.new[i]);
      }
   }
}

 
Pankaj_GanwaniPankaj_Ganwani
Hi,

You can use get method of sobject to accomplish this, Please try below mentioned code I made some correction in it:
Map<Id, lda_Opportunity__c> MPPMap = new Map<Id, lda_Opportunity__c>();
list<Schema.SObjectField> FieldList = new list<Schema.SObjectField>();
FieldList.add(lda_Opportunity__c.Location__c); // Many more fields to add
for (integer i=0; i < trigger.new.size(); i++){

 

   for (Schema.SObjectField s : FieldList){

 
		Schema.Describefieldresult objFieldResult = s.getDescribe();
      if (trigger.new[i].get(objFieldResult.getName()) != trigger.old[i].get(objFieldResult.getName())){

 

         MPPMap.put(trigger.new[i].get('Id'), trigger.new[i]);

 

      }

 

   }

 

}

 
Rajiv Bhatt 16Rajiv Bhatt 16
You need to use the get(Schema.sObjectField) (https://www.salesforce.com/us/developer/docs/apexcode/Content/apex_methods_system_sobject.htm#apex_System_SObject_get_2)method.  The line number 08 in your code should look like this: 
if (trigger.new[i].get(s) != trigger.old[i].get(s)){