こんにちは、管理人の@Salesforce.Zです。
コントローラクラスやテストクラスの中で
オブジェクトのレコードタイプIDを取得する処理を作ることがたまにあるよね?
必要となる度に調べるのがめんどくさくなってきたのでメモ。。。
僕が知っているレコードタイプIDの取得方法は3つ。
読んだら得ること
★ レコードタイプIDの取得方法
目次
レコードタイプIDの取得方法
SOQLを使用して取得(一番おすすめしません)
/** * getRecordTypeIdByQuery * SOQLを使用してレコードタイプIDを取得 * @param : オブジェクト名(DeveloperName) * @param : レコードタイプ名(DeveloperName) * @return : レコードタイプID */ private ID getRecordTypeIdByQuery( String objectName, String recordTypeName ){ List<RecordType> recordTypeList = [ SELECT Id FROM RecordType WHERE SobjectType = :objectName AND DeveloperName = :recordTypeName ]; return ( recordTypeList != null && !recordTypeList.isEmpty() ) ? recordTypeList[0].Id : null ; }
使用例
ID recordTypeId = getRecordTypeIdByQuery('Account','AccountRecordType');
Schemaクラスを利用して取得
/** * getRecordTypeIdByGlobalDescribe * GlobalDescribeを使用してレコードタイプIDを取得 * @param : オブジェクト名(DeveloperName) * @param : レコードタイプ名(表示名) * @return : レコードタイプID */ private ID getRecordTypeIdByGlobalDescribe( String objectName, String recordTypeName ){ //組織のオブジェクトマップを取得 Map<String, Schema.SObjectType> objetInfoMap = Schema.getGlobalDescribe(); ID recordTypeId; try{ //レコードタイプIDを取得 recordTypeId = objetInfoMap.get(objectName).getDescribe().getRecordTypeInfosByName().get(recordTypeName).getRecordTypeId(); } catch (NullPointerException ex) { recordTypeId = null; } return recordTypeId; }
使用例
ID recordTypeId = getRecordTypeIdByQuery('Account','企業レコードタイプ');
DescribeSObjectResult クラスを使用して取得(一番おすすめ)
// 取引先のレコードタイプの場合:例(ラベルは個人、開発名はprivate_account)とする String recordtype_developerName = 'private_account'; String privateAccRecTypeId = Schema.SObjectType.Account.getRecordTypeInfosByDeveloperName().get(recordtype_developerName).getRecordTypeId();
※注意点としては、APEXクラスのバージョンは低いと使えない場合がある「 apex class version to 43 above」43バージョン以上にしてください。
エラーとしては「Schema getRecordTypeInfosByDeveloperName() method does not exists.」になります。