Take the 2-minute tour ×
Salesforce Stack Exchange is a question and answer site for Salesforce administrators, implementation experts, developers and anybody in-between. It's 100% free, no registration required.

I have 30+ fields in a field set, and in the update part of my trigger, I want to see if any of those fields have been changed. Can I access them using field sets? Anyway to do it, short of writing out every field in my trigger?

I'm doing something similar to this: http://techman97.wordpress.com/2011/10/22/comparing-new-values-vs-old-values-in-apex-trigger/

share|improve this question

2 Answers 2

up vote 5 down vote accepted

I am not sure if you could use the field set directly to compare but you can use the sObject's get method to do the job

set<String> fieldSet = new Set<String>();
//dynamically get the fields from the field set and then use the same for comparison in the trigger. 
for(Schema.FieldSetMember fields :Schema.SObjectType.Account.fieldSets.getMap().get('yourFieldSetName').getFields()){
for(account a: trigger.new){
    set<String> changedFieldSet  = new Set<String>();
    for(string s: fieldSet){
        if(a.get(s) != trigger.oldMap.get(a.Id).get(s)){
        //do something
share|improve this answer
updated my answer. Hope it helps! –  theGreatDanton Jun 10 '14 at 15:57

SObjects have map-like methods available including get that takes a String or SObjectField argument.

So you can write a trigger of this form:

trigger MyTrigger on MyObject__c (before update) {
    String[] fieldNames = new String[] {'Field__c', 'Field2__c', ...};
    for (MyObject__c mo : Trigger.new) {
        MyObject__c old = Trigger.oldMap.get(mo.Id);
        for (String f : fieldNames) {
            if (mo.get(f) != old.get(f)) {
                // Do whatever you want here
share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.