Code Monkey home page Code Monkey logo

record-types's Introduction

Record Types

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.

Dependabot Known Vulnerabilities codecov On Push Scratch Org Tests Salesforce API Version Release GitHub License

Twitter GitHub

The Code

The class and test class are found in this folder. Feel free to copy/paste directly into your org.

Features

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

Documentation (generated with ApexDox)

Package Installation

Deploy to Salesforce Deploy to Salesforce Sandbox

Installation (with VCS)

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

Code Header

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).

Library Methods

(Full documentation at https://dschach.github.io/record-types)

Most Common Methods

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

Helper Methods

These methods check record types available to the current/running user.

Parameters / Output Boolean (yes/no)
objectName, recordTypeDevName isRecordTypeAvailable
objectName, recordTypeDevName isRecordTypeDefault

Less Common Methods

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

record-types's People

Contributors

dependabot[bot] avatar dschach avatar github-actions[bot] avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar

record-types's Issues

[FR] Map<Id, Name> and Map<Id, DeveloperName>

Is your feature request related to a problem? Please describe.
I want an easy map of ID to Name for a given SObject

Describe alternatives you've considered
I could do a separate call in my class, but I have technical debt

Additional context
Existing maps go the other way. I want a simple Id - Name map.
Would it be easier just to do a query?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.