Memos About Salesforce

Salesforceにハマってたこと!

salesforce レコードタイプ id 取得 apex

こんにちは、管理人の@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バージョン以上にしてください。

f:id:jude2016:20190528201443p:plain

エラーとしては「Schema getRecordTypeInfosByDeveloperName() method does not exists.」になります。

リファレンス

DescribeSObjectResult クラス