Sample Code:
//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; }