System.SObjectException: You cannot call addFields when the data is being passed into the controller by the caller

In your  StandardController extension, we were using the StandardController.getRecord() method to fetch the record supplied by the Standard Controller

Consider in the following apex class we were used to overcome the following issue:

the error “SObject row was retrieved via SOQL without querying the requested field” can be thrown

so in this class to overcome above error we can add the fields (addFields) in the standard controller extension

public ContactExt(ApexPages.StandardController sc) {
        sc.addFields(new List<String> {'Account.BillingCity'});
        record = (Contact)sc.getRecord();
}

but while executing the Apex Test Method, its throwing the error like:
System.SObjectException: You cannot call addFields when the data is being passed into the 
controller by the caller.

so the solution, simply add the if condition isRunningTest like
public ContactExt(ApexPages.StandardController sc) {
        if (!Test.isRunningTest()) { 
            sc.addFields(new List<String> {'Account.BillingCity'});
        }           
        record = (Contact)sc.getRecord();
}

Written by 

I am Sakthivel Madesh, a certified Salesforce Advanced Developer & Administrator working on Salesforce Technology since 2011. I am currently working in Techforce Services as Sr. Salesforce Developer. I have worked on multiple technologies Like PHP, Java, Salesforce, I am very passionate about Salesforce and to earn 15x Salesforce Certification. I love Trailhead for learning Salesforce Skill and Become a Trailhead 5x Ranger too. I Love to Learn & Share my Salesforce knowledge to Salesforce Learners/Beginner using My Blog and Salesforce Community.

Leave a Reply

Your email address will not be published. Required fields are marked *

*