SObjectd의 ID로 sObject type 반환하기 - Schema 사용 익히기 1
List<ID> 타입의 파라미터를 전달받아, 동일한 크기의 배열에 각각의 ID 가 어떤 SObject Type 인지를 String 으로 담아 반환하는 메서드를 작성해주세요
입출력 예시) ['001abcdefgefkdekdy', '003abzzzfyyfkdekdy'] => ['Account','Contact'] 반환
세일즈포스 ID 는 앞 세자리 001,,002,,003등 KeyPrefix로 구분한다!!!
public static String [] returnSobjectTypeFromListID(List<Id>inputRecordId) {
// Object Type 담을 변수 (최종 반환 값)
String [] objectName = new List<String>();
//파라미터로 받은세자리 코드 배열
String [] myIdPrefix = new List<String>();
for (Integer i = 0; i < inputRecordId.size(); i++) {
myIdPrefix.add(String.valueOf(inputRecordId[i]).substring(0, 3));
}
//getGlobalDescribe() - Map sObject 토큰(값)에 대한 모든 sObject 이름(키)의 맵을 반환
Map <String, Schema.SObjectType> gd = Schema.getGlobalDescribe();
//스키마가 반환한 모든 sObject 유형을 반복
for (Schema.SObjectType stype : gd.values()) {
Schema.DescribeSObjectResult dsr = stype.getDescribe();
//getKeyPrefix() - 개체 앞에 접두사코드 반환하는 함수
String KeyPrefix = dsr.getKeyPrefix();
//stype : TenantSecurityTransactionPolicyTrend ....TenantSecurityTenantInfo...RelatedListColumnDefinition...FlowTestView
//dsr : Schema.DescribeSObjectResult[getAssociateEntityType=null;getAssociateParentEntity=null;getDataTranslationEnabled=null;getDefaultImplementation=null;getHasSubtypes=false;getImplementedBy=null;getImplementsInterfaces=null;getIsInterface=false;getIsSubtype=false;getKeyPrefix=2nd;getLabel=Security Center Transaction Policy Trend;getLabelPlural=Security Center Transaction Policy Trends;getName=TenantSecurityTransactionPolicyTrend;getRecordTypeInfosByDeveloperName={Master=Schema.RecordTypeInfo[getDeveloperName=Master;getName=Master;getRecordTypeId=012000000000000AAA;isActive=true;isAvailable=true;isDefaultRecordTypeMapping=true;isMaster=true;]};getSObjectDescribeOption=DEFERRED;isAccessible=false;isCreateable=false;isCustom=false;isCustomSetting=false;isDeletable=false;isDeprecatedAndHidden=false;isFeedEnabled=false;isMergeable=false;isMruEnabled=false;isQueryable=true;isSearchable=false;isUndeletable=false;isUpdateable=false;]
// KeyPrefix : 2nd ....2Y8....4YB...
//KeyPrefix 3자리 코드가 내가 입력한 ID의 3자리 코드와 일치하다면?
for (Integer i = 0; i < myIdPrefix.size(); i++) {
if (KeyPrefix != null && KeyPrefix.equals(myIdPrefix[i])) {
objectName.add(dsr.getName());
// System.debug(inputRecordId + '의 Object 타입은? : ' + objectName);
}
}
}
System.debug(objectName);
return objectName;
}
테스트클래스
@istest
public static void ListID() {
List<Id> IDList = new List<String>();
IDList.add('0012w00001Kvjs1AAB');
IDList.add('0032w00000yeEfKAAU');
SchemaUtilClass.returnSobjectTypeFromListID(IDList);
}
Schema.DescribeSObjectResult - sObject 설명 결과의 유형
//describeSObjects(sObjectTypes) - sObject 설명 결과의 유형
//Schema.DescribeSObjectResult dsr = Account.sObjectType.getDescribe();
//Schema.DescribeSObjectResult dsr = Schema.SObjectType.Account;
Schema.DescribeSObjectResult dsr = stype.getDescribe();
Schema.DescribeSObjectResult[getAssociateEntityType=null;
getAssociateParentEntity=null;getDataTranslationEnabled=null;
getDefaultImplementation=null;
getHasSubtypes=false;
getImplementedBy=null;
getImplementsInterfaces=null;
getIsInterface=false;
getIsSubtype=false;
getKeyPrefix=2nd;
getLabel=Security Center Transaction Policy Trend;
getLabelPlural=Security Center Transaction PolicyTrends;
getName=TenantSecurityTransactionPolicyTrend;
getRecordTypeInfosByDeveloperName{Master=Schema.RecordTypeInfo[getDeveloperName=Master;
getName=Master;
getRecordTypeId=012000000000000AAA;
isActive=true;
isAvailable=true;
isDefaultRecordTypeMapping=true;
등등 정보가 나온다
getGlobalDescribe() - Map sObject 토큰(값)에 대한 모든 sObject 이름(키)의 맵을 반환
Map <String, Schema.SObjectType> gd = Schema.getGlobalDescribe();
System.debug(Account.sObjectType.getDescribe());
Schema.DescribeSObjectResult
[getAssociateEntityType=null;getAssociateParentEntity=null;getDataTranslationEnabled=null;getDefaultImplementation=null;getHasSubtypes=false;getImplementedBy=null;getImplementsInterfaces=null;getIsInterface=false;getIsSubtype=false;getKeyPrefix=001;getLabel=Account;getLabelPlural=Accounts;getName=Account;getRecordTypeInfosByDeveloperName {Master=Schema.RecordTypeInfo[getDeveloperName=Master;getName=Master;getRecordTypeId=012000000000000AAA;isActive=true;isAvailable=true;isDefaultRecordTypeMapping=true;isMaster=true;]};getSObjectDescribeOption=DEFERRED;isAccessible=true;isCreateable=true;isCustom=false;isCustomSetting=false;isDeletable=true;isDeprecatedAndHidden=false;isFeedEnabled=true;isMergeable=true;isMruEnabled=true;isQueryable=true;isSearchable=true;isUndeletable=true;isUpdateable=true;]
describeSObjects(sObjectTypes) - sObject 설명 결과의 유형
//getGlobalDescribe() - Map sObject 토큰(값)에 대한 모든 sObject 이름(키)의 맵을 반환
Map <String, Schema.SObjectType> gd = Schema.getGlobalDescribe();
//스키마가 반환한 모든 sObject 유형을 반복
for (Schema.SObjectType stype : gd.values()) {
,,,
}
해당 sObject가 어떤 기능을 하는지 보여준다.
예) TenantSecurityTransactionPolicyTrend
TenantSecurityTenantInfo
RelatedListColumnDefinition
FlowTestView 등... 이런 정보들을 보여줌
getKeyPrefix() - 개체 앞에 접두사코드 반환하는 함수
String KeyPrefix = dsr.getKeyPrefix();
System.debug(KeyPrefix);
2nd
2Y8
4YB
예 ) KeyPrefix : 2nd ....2Y8....4YB..로 찍힘