//Pass dependent field parameter e.g.: Account.YourDependentField__c
public static Map<Object,List<String>> getDependentPicklistValues(Schema.sObjectField dependentField){
Map<Object,List<String>> dependentPicklistValues = new Map<Object,List<String>>();
//Get dependent field result
Schema.DescribeFieldResult dependentFieldResult = dependentField.getDescribe();
//Get dependent field controlling field
Schema.sObjectField controllerField = dependentFieldResult.getController();
//Check controlling field is not null
if(controllerField == null){
return null;
}
//Get controlling field result
Schema.DescribeFieldResult controllerFieldResult = controllerField.getDescribe();
//Get controlling field picklist values if controlling field is not a checkbox
List<Schema.PicklistEntry> controllerValues = (controllerFieldResult.getType() == Schema.DisplayType.Boolean ? null : controllerFieldResult.getPicklistValues());
//It is used to decode the characters of the validFor fields.
String base64map = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
for (Schema.PicklistEntry entry : dependentFieldResult.getPicklistValues()){
if (entry.isActive()){
//The PicklistEntry is serialized and deserialized using the Apex JSON class and it will check to have a 'validFor' field
List<String> base64chars = String.valueOf(((Map<String,Object>)JSON.deserializeUntyped(JSON.serialize(entry))).get('validFor')).split('');
for (Integer i = 0; i < controllerValues.size(); i++){
Object controllerValue = (controllerValues == null ? (Object) (i == 1) : (Object) (controllerValues[i].isActive() ? controllerValues[i].getLabel() : null));
Integer bitIndex = i / 6;
Integer bitShift = 5 - Math.mod(i, 6 );
if(controllerValue == null || (base64map.indexOf(base64chars[bitIndex]) & (1 << bitShift)) == 0){
continue;
}
if (!dependentPicklistValues.containsKey(controllerValue)){
dependentPicklistValues.put(controllerValue, new List<String>());
}
dependentPicklistValues.get(controllerValue).add(entry.getLabel());
}
}
}
return dependentPicklistValues;
}