Retrieve dependent picklists values
Mon Feb 10 2025 13:05:55 GMT+0000 (Coordinated Universal Time)
Saved by @macie3k #apex #salesforce
public with sharing class DependentPicklistController {
public static Map<String, DependentPicklistWrapper> getDependentPicklistValuesFiltered(String dependentField, List<String> keys) {
Map<String, DependentPicklistWrapper> dependentPicklistValues = getDependentPicklistValues(dependentField);
for (String currentKey : dependentPicklistValues.keySet()) {
if (!keys.contains(currentKey)) {
dependentPicklistValues.remove(currentKey);
}
}
return dependentPicklistValues;
}
public static Map<String, DependentPicklistWrapper> getDependentPicklistValues(String dependentPickListField) {
List<String> splitString = dependentPickListField.split('\\.');
Schema.SobjectField dependentField = Schema.getGlobalDescribe().get(splitString[0]).getDescribe().fields.getMap().get(splitString[1]);
Map<String, DependentPicklistWrapper> dependentPicklistValues = new Map<String, DependentPicklistWrapper>();
Schema.DescribeFieldResult dependentFieldResult = dependentField.getDescribe();
Schema.sObjectField controllerField = dependentFieldResult.getController();
Schema.DescribeFieldResult controllerFieldResult = controllerField.getDescribe();
List<Schema.PicklistEntry> controllerValues = (controllerFieldResult.getType() == Schema.DisplayType.Boolean ? null : controllerFieldResult.getPicklistValues());
String base64map = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
for (Schema.PicklistEntry entry : dependentFieldResult.getPicklistValues()) {
if (entry.isActive() && String.isNotEmpty(String.valueOf(((Map<String, Object>) JSON.deserializeUntyped(JSON.serialize(entry))).get('validFor')))) {
List<String> base64chars = String.valueOf(((Map<String, Object>) JSON.deserializeUntyped(JSON.serialize(entry))).get('validFor')).split('');
for (Integer i = 0; i < (controllerValues != null ? controllerValues.size() : 2); i++) {
Schema.PicklistEntry controllerValue = (Schema.PicklistEntry) (controllerValues == null
? (Object) (i == 1)
: (Object) (controllerValues[i].isActive() ? controllerValues[i] : null));
Integer bitIndex = i / 6;
if (bitIndex > base64chars.size() - 1) {
break;
}
Integer bitShift = 5 - Math.mod(i, 6);
if (controllerValue == null || (base64map.indexOf(base64chars[bitIndex]) & (1 << bitShift)) == 0) {
continue;
}
String apiName = controllerValue.getValue();
if (!dependentPicklistValues.containsKey(apiName)) {
dependentPicklistValues.put(apiName, new DependentPicklistWrapper(new LabelValueWrapper(controllerValue.getLabel(), apiName)));
}
dependentPicklistValues.get(apiName).addPicklistEntry(new LabelValueWrapper(entry.getLabel(), entry.getValue()));
}
}
}
return dependentPicklistValues;
}
public class LabelValueWrapper {
@AuraEnabled
public String label { get; set; }
@AuraEnabled
public String value { get; set; }
public LabelValueWrapper(String label, String value) {
this.label = label;
this.value = value;
}
}
public class DependentPicklistWrapper {
@AuraEnabled
public List<LabelValueWrapper> dependentPicklist;
@AuraEnabled
public LabelValueWrapper entry;
public DependentPicklistWrapper(LabelValueWrapper entry) {
this.dependentPicklist = new List<LabelValueWrapper>();
this.entry = entry;
}
public void addPicklistEntry(LabelValueWrapper picklistEntry) {
this.dependentPicklist.add(picklistEntry);
}
}
}



Comments