Salesforce Stack Exchange is a question and answer site for Salesforce administrators, implementation experts, developers and anybody in-between. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Are GetInstance and GetValues methods of custom setting same? According to the documentation here both seem to be same. What you guys think?

share|improve this question
here's some good commentary from Rich Unger, former PMTS @ - Rich's Rule of Thumb When Working With Custom Settings: Use getValues() when you’re writing custom settings, and use getInstance() when reading them. – bigassforce Feb 24 '13 at 20:56
up vote 1 down vote accepted

You are right both return same Object. I personally prefer the getInstance() method as it makes more sense to me. You access a record by using the value in the Name column (you cannot use the ID or other columns).

 Foundation_Countries__c myCS1 = Foundation_Countries__c.getValues('United States');
 String myCCVal = myCS1.Country_code__c;
 Foundation_Countries__c myCS2 = Foundation_Countries__c.getInstance('United States');
 String myCCInst = myCS2.Country_code__c;
 system.assertEquals(myCCinst, myCCVal);

The above confirms that both return same .

share|improve this answer
They return the same for list custom settings, but not always for hierarchy (see Rich Unger's commentary). – Avrom Roy-Faderman Jun 2 '15 at 6:09

As the first comment on the question points out, getInstance() and getValues() do not always return the same object for hierarchical custom settings (although they do for list custom settings). The Rich Unger article linked there explains the difference well, but in brief:

  • getInstance() gets you the merged values for all hierarchy levels above and including its argument (so if the user with id myUserId has a null value for a field, getInstance(myUserId) can inherit a value from the user's profile or the org-wide defaults)
  • getValues() gets you the record as specified for its argument (so if the user with id myUserId has a null value for a field, getValues(userId) will always have a null value for the field)
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.