In the following piece of code, i am trying to do a dynamic parent - child query
public static void fetchRelatedRecords(SObject primaryRecord){
String recordId = (String)primaryRecord.get('Id');
Map<String, Schema.SobjectType> keys = new Map<String, Schema.SobjectType>();
Map<String, Schema.SobjectType> describe = Schema.getGlobalDescribe();
for(String s : describe.keyset()){
keys.put(describe.get(s).getDescribe().getKeyPrefix(),describe.get(s));
}
Schema.SObjectType sobjectTypeObj = keys.get(recordId.substring(0,3));
Schema.DescribeSObjectResult obj = sobjectTypeObj.getDescribe();
String query = 'select Id, ';
for (Schema.ChildRelationship cr: obj.getChildRelationships()){
system.debug('Child Object Relationship Name:'+cr.getChildSObject());
query = query + '(select Id from ' + String.valueOf(cr.getChildSObject()) + '), ';
}
query = query.removeEnd(', ');
query = query + ' from ' + String.valueOf(sobjectTypeObj) + ' where Id = ' + '\'' + recordId + '\'';
List<SObject> relatedRecordList = Database.query(query);
}
My problem here is that, the line
system.debug('Child Object Relationship Name:'+cr.getChildSObject());
gives the child object Name, but what I want is the Relationship Name.
e.g. If Account is the parent of Custom object Author, i want the Name Author__r and not Author__c.
Is there any way to achieve that?
I tried using cr.getRelationshipName() as well, but that did not work either.