Implementing lightning:hasPageReference interface, we can access the recordTypeId in lightning JS controller. lightning:hasPageReference provides access to the pageReference attribute.
The pageReference attribute can be populated only for the following page types:
<aura:component implements="force:hasRecordId,lightning:actionOverride,lightning:hasPageReference">
<!--Declare Attributes-->
<aura:attribute name="selectedRecordId" type="Id" />
<!--Declare Handler-->
<aura:handler name="init" value="{!this}" action="{!c.doInit}"/>
<!--Component Start-->
<div class="slds-m-around--xx-large">
Selected Record Type Id : {!v.selectedRecordId}
</div>
<!--Component End-->
</aura:component>
Lightning JS Controller:
({
doInit: function(component, event, helper) {
//get record type Id
var recordTypeId = component.get("v.pageReference").state.recordTypeId;
component.set("v.selectedRecordId", recordTypeId);
//get action name edit/new
var actionName = component.get("v.pageReference").attributes.actionName;
console.log('actionName-' + actionName);
//get object API name
var objectApiName = component.get("v.pageReference").attributes.objectApiName;
console.log('objectApiName-' + objectApiName);
},
})
public class SampleAuraController {
@AuraEnabled
public string defaultRecordTypeId {get; set;}
@AuraEnabled
public Map<Id, String> contactRecordTypes {get; set;}
@AuraEnabled
public static SampleAuraController getRecordTypeValues(){
SampleAuraController obj = new SampleAuraController();
Map<Id, String> recordtypeMap = new Map<Id, String>();
//Get all record types of Contact object
List<Schema.RecordTypeInfo> recordTypeInfoList = Contact.SObjectType.getDescribe().getRecordTypeInfos();
for(RecordTypeInfo info: recordTypeInfoList) {
//Check record type is available for current user profile
if(info.isAvailable()) {
//Check master record type
if(info.getName() != 'Master' && info.getName().trim() != ''){
recordtypeMap.put(info.getRecordTypeId(), info.getName());
}
//Get the default record type for current user profile
if(info.isDefaultRecordTypeMapping()){
obj.defaultRecordTypeId = info.getRecordTypeId();
}
}
}
obj.contactRecordTypes = recordtypeMap;
return obj;
}
}
The below code will add only the record type of “Contact” object accessible to the user.
List <SelectOption> rtList = new List <SelectOption>();
for (RecordTypeInfo rtInfo: Contact.SObjectType.getDescribe().getRecordTypeInfos() ) {
if(rtInfo.isAvailable()) {
rtList.add(new SelectOption(rtInfo.getRecordTypeId(), rtInfo.getName()));
}
}