こんにちは、にいるです。
今日はオブジェクト「RecordType」の取得方法について、見ていきたいと思います。
・【ヘルプ】RecordType
・【ヘルプ】RecordTypeInfoクラス
1.SOQLを使用したRecordTypeでの取得方法
レコードタイプをApexでもSOQLを使用することで取得することができます。
その取得方法は取引先も取引先責任者の標準オブジェクトもカスタムオブジェクトも各オブジェクトのAPI名を使うのではなく、「RecordType」をFrom句で指定するだけです。
こんな感じですね。
1 |
SELECT SobjectType, Name, DeveloperName, Description, BusinessProcessId, IsActive from RecordType |
これを開発者コンソールで叩いてみます。
このようにオブジェクト毎に全て取得できます。
各項目を説明すると下記になります。
項目名 | 説明 |
SobjectType | オブジェクト |
Name | レコードタイプのラベル名 |
DeveloperName | レコードタイプのAPI名 |
Description | レコードタイプの説明 |
BusinessProcessId | 関連しているビジネスプロセスのID |
IsActive | Trueなら有効 Falseなら無効 |
2.RecordTypeInfoクラスでの取得
次にSOQLではなく、RecordTypeInfoクラスを使用した取得についてみたいと思います。
RecordTypeInfoのメソッドである「getRecordTypeInfos」を使用すれば簡単に取得できます。
サンプルが下記になります。
やっていることは、SOQLで取得したものをインスタンス化した「Schema.DescribeSObjectResult」から探しているイメージですね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// 【1】取引先のレコードタイプのレコードを1件だけ取得する。 RecordType rt = [SELECT Id,Name FROM RecordType WHERE SobjectType='Account' LIMIT 1]; // 【2】取引先オブジェクトの情報を取得する。 Schema.DescribeSObjectResult d = Schema.SObjectType.Account; // 2のレコードタイプ情報のマップを作成し、レコードタイプのIDを取得する。 Map<Id,Schema.RecordTypeInfo> rtMapById = d.getRecordTypeInfosById(); // 2から1のIDがあれば変数に代入する。 Schema.RecordTypeInfo rtById = rtMapById.get(rt.id); // 2に存在するレコードタイプのラベル名を変数に代入する。 Map<String,Schema.RecordTypeInfo> rtMapByName = d.getRecordTypeInfosByName(); // 2から1のラベル名があれば変数に代入する。 Schema.RecordTypeInfo rtByName = rtMapByName.get(rt.name); System.debug(rtById); System.debug(rtByName); |
最後にデバッグで見てみると同じものが返ってきている結果がわかります。
3.まとめ
いかがでしたでしょうか。
レコードタイプによる分岐って結構、書くことが多いですよね。
僕自身、プロファイル判定や、DMLでInsertやUpdateするときに指定する場面で使ってます。
1年前の僕なら、何を書いてあるかわからなかったですね笑
日々、勉強しているおかげで少しずつ理解できるようになってきました。
知識つけて勘所を鍛えて、もっと早くアウトプットできるようになりたいですね!
ぜひ、みなさんも書いてみてください!
他にも色々と標準機能やSalesforce機能について紹介しています。
そのまとめ一覧ページはこちらになりますので、よければ見てみてください。
ではでは!