Get Record Type Id by Developer Name
Salesforce has finally provided us with a way to easily get Record Type Id by Developer Name, without using a SOQL query. This new feature comes with Summer ‘18 Release and it should help us write more efficient and reliable code.
The old approach
Let’s imagine that we have a Record Type on Account object called “Wholesale Partner”. We would like to obtain the Id of this Record Type in order to assign it to the RecordTypeId
field on the Account record during the insert operation.
Previously, there were a couple of options to obtain a Record Type Id in order to assign it to a record, but none of them were really optimal. One approach was to use the Record Type Name in order to obtain a Record Type Id in the following way by using the getRecordTypeInfosByName()
method of the DescribeSObjectResult
class:
The issue here is that the Record Type Name is nothing but a label, which can be easily changed by an administrator in Production, thus breaking your code without any warning. The second issue with this approach is that the logic might break in multi-language environments in case somebody translates the label. However, as far as I know, this was the only approach to obtain a Record Type Id without issuing a SOQL query.
This brings us to the second approach that uses the RecordType object. You can execute a SOQL query against this object to get the Record Type Id by Developer Name, which is much more stable than the label, it isn’t affected by translations, and cannot be changed that easily.
Although this approach is more reliable than the first, my issue with it is that it requires a SOQL query. In an environment that limits you to 100 SOQL queries per transaction, every one of them counts.
The new approach
With Summer ‘18 Release we now finally have a way to use the Developer Name to obtain a Record Type Id without issuing a SOQL query. This is achieved by using the new getRecordTypeInfosByDeveloperName()
method of the DescribeSObjectResult
class:
In my opinion, this should be a new standard for this kind of tasks, it’s both reliable and cheap on the resources. If you are really concerned with resources that your logic requires to get Ids of different Record Types during execution, you should consider caching the Map<String, Schema.RecordTypeInfo>
returned by the getRecordTypeInfosByDeveloperName()
method. If you are interested you can check out this answer on StackExchange with analysis on the resource consumption by different Apex Describe calls.
In case you want to use the above sample in your code, you should replace the Account
with the object that has your Record Type, and the Wholesale_Partner
with the actual Developer Name of the Record Type that you need.
Appendix: How to assign a Record Type Id to a Record
So now that you have a Record Type Id, you can assign it to a specific record by using the RecordTypeId
field. Here’s an example for Account:
or through a property like this: