Generate dynamic SOQL query with “__r” fields.
Code :
public static string generateDynamicSOQLwithReferenceField(String objectName, String strRefField) {
String selects = ”;
Map<String, Schema.SObjectField> fMap = Schema.getGlobalDescribe().get(objectName.toLowerCase()).getDescribe().Fields.getMap();
list<string> selectFields = new list<string>();
if (fMap != null){
for (Schema.SObjectField ft : fMap.values()){
Schema.DescribeFieldResult fd = ft.getDescribe();
selectFields.add(fd.getName());
}
}
if (!selectFields.isEmpty()){
for (string s:selectFields){
selects += s + ‘,’;
}
if (selects.endsWith(‘,’)){selects = selects.substring(0,selects.lastIndexOf(‘,’));}
}
selects = selects + ‘,’ + strRefField;
return ‘SELECT ‘ + selects + ‘ FROM ‘ + objectName + ‘ ‘;
}
Example :
getCreatableFieldsSOQLwithReferenceField(‘Contact‘, ‘Account.Name, Account.Website‘);