728x90
Apex에서 종속 선택 목록 값 가져오기 위한 Apex Method 입니다.
// Apex에서 종속 선택 목록 값 가져오기
public static Map<String, List<String>> getDependentPicklistValues(Schema.sObjectField dependToken) {
Schema.DescribeFieldResult depend = dependToken.getDescribe();
Schema.sObjectField controlToken = depend.getController();
if (controlToken == null) {
return new Map<String, List<String>>();
}
Schema.DescribeFieldResult control = controlToken.getDescribe();
List<Schema.PicklistEntry> controlEntries;
if(control.getType() != Schema.DisplayType.Boolean) {
controlEntries = control.getPicklistValues();
}
String base64map = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
Map<String,List<String>> dependentPicklistValues = new Map<String,List<String>>();
for (Schema.PicklistEntry entry : depend.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 index = 0; index < (controlEntries != null ? controlEntries.size() : 2); index++) {
Object controlValue =
(controlEntries == null
? (Object) (index == 1)
: (Object) (controlEntries[index].isActive() ? controlEntries[index].getLabel() : null)
);
Integer bitIndex = index / 6;
if (bitIndex > base64chars.size() - 1) {
break;
}
Integer bitShift = 5 - Math.mod(index, 6);
if (controlValue == null || (base64map.indexOf( base64chars[ bitIndex ] ) & (1 << bitShift)) == 0)
continue;
if (!dependentPicklistValues.containsKey((String) controlValue)) {
dependentPicklistValues.put((String) controlValue, new List<String>());
}
dependentPicklistValues.get((String) controlValue).add(entry.getLabel());
}
}
}
return dependentPicklistValues;
}
사용 방법은 아래와 같습니다.
Map<String, List<String>> category_LM = getDependentPicklistValues(Account.MiddleCategory__c);
System.debug(category_LM);
Debug 결과입니다.
{대분류1=(중분류11, 중분류12, 중분류13), 대분류2=(중분류21, 중분류22, 중분류23), 대분류3=(중분류31, 중분류32, 중분류33)}
테스트를 위한 필드 2개 생성
728x90
'Salesforce > Development' 카테고리의 다른 글
현재 사용자 ID 정보 가져 오기(Aura, lwc, apex, vf) (0) | 2022.04.21 |
---|---|
SOQL 쿼리에서 여러 값 like 사용 (0) | 2022.04.20 |
Safe Navigation Operator 안전 탐색 연산자(?.) (0) | 2022.04.19 |
String.isEmpty() & String.isBlank() & String.isNotEmpty() & String.isNotBlank() 차이점 (0) | 2022.04.18 |
세일즈포스 사용자 정의 알림 (Salesforce Custom Notification) 설정 및 구현 (0) | 2021.04.13 |