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