This is a project based on work by Evan Callahan (formerly of Groundwire, and now at Salesforce) who wrote this class (repo has been deleted - Sadface) a long time ago to reduce the number of describe calls required to work with Record Types.
I've updated the project (by pulling test code out of the main class - that's how old it was!) and have added some additional methods. The included test class has 100% coverage, so pull this into your org and get cracking!
Of note: The test code assumes that you have no record types for the Solution object. If you do, you may need to remove that test method.
The class and test class are found in this folder. Feel free to copy/paste directly into your org.
Given combinations of an sObject name, Record Type name, Record Type developer name, and Record Type Id, this class will let you return the other possible parameters. Give it an sObject name and a Record Type developer name, and get the Record Type Id.
The main purpose is to minimize describe calls, which will speed up your code.
Documentation (generated with ApexDox)
Clone this repository and run bash scripts/orginit.sh
to set up a scratch org with the classes installed and a single Account Record Type.
To set up a scratch org without creating a Record Type, run bash scripts/orginit-norecordtypes.sh
-
2024-03
- All methods are now case-insensitive
- Dynamic describe methods remove need for global describe (faster code!)
- Move Solution tests - does not increase coverage - to unpackaged test class
-
2024-02
- Enhance SelectList methods
- Update to API 60.0
- Increase code coverage and test cases
-
2023-09
- Overload getRecordTypeFromId so it doesn't require a SobjectType string
- Release unlocked package
-
2023-08
- Add methods to get default RecordTypeId, handling situation where no RT is on the Profile but at least one is avaialble via Permission Set.
- Add test methods against Account and Solution objects, as we assume Solution has no defined record types. (Change for your org if you have them.)
- Include table of all methods on documentation site
-
2022-03
- BREAKING CHANGE: Replaced "DeveloperName" with "DevName" in all method names. Update your code to refer to the new methods.
-
2022-03
- Add maps Id => Name and Id => DeveloperName for ease of use when wanting to refer to a record type by Id without including the object, since Id is globally unique
-
2022-01
- Initial Release
Written by Evan Callahan, copyright © 2010 Groundwire
- This program is released under the GNU General Public License. http://www.gnu.org/licenses/
- This class is meant to allow for access to Record Type information from within other classes.
- It is called statically, and therefore will supply the same information to all calls made from within one transaction, or set of trigger calls. This is beneficial because this info should be the same for all calls in a transaction, and by calling it statically we reduce the calls that are made, making the total transaction more efficient.
Updated by David Schach, copyright © X-Squared on Demand
- Usage recommendation: Always use DeveloperName instead of Name, as this is more likely to be hard-coded in places, while the Name is actually a label and may change (especially due to user language).
(Full documentation at https://dschach.github.io/record-types)
These are the most common methods to be used. They are the fastest ways to get a Record Type Id from an object name and the developer name, for example.
There are some overloaded methods included for historical purposes (the ones that accept a Record Type Id and an object name and return the developer name). While the object name is, technically, optional, that method is faster because it does not require memoizing a SOQL query.
Parameters / Output | Id | Name | DeveloperName |
---|---|---|---|
objectName, recordTypeName | getRecordTypeIdFromName | ||
objectName, recordTypeName | getRecordTypeDevNameFromName | ||
objectName, recordTypeDevName | getRecordTypeIdFromDevName | ||
objectName, recordTypeDevName | getRecordTypeNameFromDevName | ||
objectName, recordTypeId | getRecordTypeNameFromId | ||
objectName, recordTypeId | getRecordTypeDevNameFromId | ||
recordTypeId | getRecordTypeNameFromId | ||
recordTypeId | getRecordTypeDevNameFromId |
These methods check record types available to the current/running user.
Parameters / Output | Boolean (yes/no) |
---|---|
objectName, recordTypeDevName | isRecordTypeAvailable |
objectName, recordTypeDevName | isRecordTypeDefault |
The most useful of these may be the SelectList generators for Visualforce. However, if you are using LWC, you may prefer to use some of the other methods and to parse the returned list of RecordTypeInfo items yourself.
Parameters / Output | Schema.RecordTypeInfo | Set<Id> | Map<String, Id> | SelectList |
---|---|---|---|---|
recordTypeId | getRecordTypeFromId | |||
objectName, recordTypeId | getRecordTypeFromId | |||
objectName, recordTypeDevName | getRecordTypeFromDevName | |||
objectName, Set<recordTypeDevName> | getAvailableRecordTypesIdSet | |||
objectName, Set<recordTypeDevName> | getRecordTypeIdSetFromDevNames | |||
objectName | getRecordTypeDevNameIdMap | |||
objectName | getRecordTypeNameIdMap | |||
objectName | getAvailableRecordTypeDevNameIdMap | |||
objectName | getAvailableRecordTypeNameIdMap | |||
objectName | getAllRecordTypesForSelectList | |||
objectName | getAvailableRecordTypesForSelectList | |||
objectName | getStringRecordTypesForSelectList |