Developer

Schema.でレコードタイプ のIdを取得する【セールスフォース】

Developer
この記事は約4分で読めます。

こんにちは、アンダーソンです。
今回はたまーに使うけど意外に忘れてしまってる、レコードタイプ のIdをApexで取得したいと思います。

スポンサーリンク

SOQLを使う

まずはベーシックにSOQLを使って取得します。

RecordType rt = [SELECT Id,Name FROM RecordType WHERE sObjectType = 'Branch__c' LIMIT 1];
system.debug(rt);

こんな感じで簡単に取れますね。
ただこれだとクエリを一回発行してしまいますね。
大規模なプログラムになってくるとたった1回でもパフォーマンスのためにできるだけ減らしたいところです。

Schema名前空間を使う

ではSOQLを使わなくてもレコードタイプのIdを取得する方法をご紹介します。

Schema.SObjectType.Branch__c.getRecordTypeInfosByName().get('America').getRecordTypeId();

これでOKです。返却される値はStringもしくはId型で受け取ればOKですね。
では一つづつ見ていきましょう。まず

Schema.SObjectType.Branch__c

戻り値の型はSchema.DescribeSObjectResult型です。以下のような内容が含まれます(途中で切れちゃってますが)

Schema.DescribeSObjectResult[getDataTranslationEnabled=null;getDefaultImplementation=null;getHasSubtypes=false;getImplementedBy=null;getImplementsInterfaces=null;getIsInterface=false;getIsSubtype=false;getKeyPrefix=a02;getLabel=支社;getLabelPlural=支社;getName=Branch__c;getRecordTypeInfosByDeveloperName={America=Schema.RecordTypeInfo[getDeveloperName=America;getName=America;getRecordTypeId=0126F000001vGGtQAM;isActive=true;isAvailable=true;isDefaultRecordTypeMapping=true;isMaster=false;], マスタ=Schema.Re

アンダーラインを引いたところにご注目です。レコードタイプ の情報が入ってますね〜。
DescribeSObjectResultはsObjectの説明が含まれていると覚えておきましょう。

次に下記のメソッドでその情報を取得します。

getRecordTypeInfosByName()

戻り値の型はMap<String,Schema.RecordTypeInfo>型になります。ちなみにgetRecordTypeInfosByIdだとキーがStringではなくIdになります。そして先ほど切れてた部分をご覧いただけます。

{America=Schema.RecordTypeInfo[getDeveloperName=America;getName=America;getRecordTypeId=0126F000001vGGtQAM;isActive=true;isAvailable=true;isDefaultRecordTypeMapping=true;isMaster=false;], マスタ=Schema.RecordTypeInfo[getDeveloperName=マスタ;getName=マスタ;getRecordTypeId=012000000000000AAA;isActive=true;isAvailable=true;isDefaultRecordTypeMapping=false;isMaster=true;]}

次のメソッドでName(String)を指定してSchema.RecordTypeInfoを出してきます。

get('America')

今回ですと上の赤でマーカーを引いたところが取得できます。
そして最後の

getRecordTypeId()

Schema.RecordTypeInfo[getDeveloperName=America;getName=America;getRecordTypeId=0126F000001vGGtQAM;isActive=true;isAvailable=true;isDefaultRecordTypeMapping=true;isMaster=false;]

この部分をとってくるって感じですね〜。
こうやって一つずつ分解していくとわかりやすいですね。

まとめ

SOQLで複数取得した上でいろいろと処理をするってこともあるかと思いますのでどっちがいいというわけでないですが、
あらかじめ用意しておくとか今回は絶対に指定されたレコードタイプしか使わないとかであればSchemaの取得の仕方も覚えたおくといいと思います。

その他の開発に関する記事はこちらです。

Developerも含めた試験問題にチャレンジしてみましょう。

コメント