Dynamic Getting sObject Picklist Values on Lightning Component

In this example we will fetch Picklist field “Industry” values from “Account” object and set in ui:inputSelect on Lightning Component.

Apex Class:

public class GetPicklistValuesController {
    public static List <String> getPicklistValues(sObject obj, String fld) {
        List <String> pList = new list <String>();
        //Get the object type of the SObject.
        Schema.sObjectType objType = obj.getSObjectType();

        //Describe the SObject using its object type.
        Schema.DescribeSObjectResult objDescribe = objType.getDescribe();

        //Get a map of fields for the SObject
        Map<String, Schema.SObjectField> fieldMap = objDescribe.fields.getMap();

        //Get the list of picklist values for this field.
        List<Schema.PicklistEntry > values = fieldMap.get(fld).getDescribe().getPickListValues();

        //Add these values to the selectoption list.
        for (Schema.PicklistEntry a: values) {
        return pList;


<aura:component controller="GetPicklistValuesController" access="global" implements="force:appHostable">
    <aura:attribute name="objInfo" type="account" default="{sobjectType : 'Account'}" />
    <aura:handler name="init" value="{!this}" action="{!c.doInit}"/>    
    <div class="slds-form-element">
        <label class="slds-form-element__label" for="select-01">Select Industry</label>
        <div class="slds-select_container">
            <ui:inputSelect  aura:id="accIndustry" class="slds-select"  change="{!c.onPicklistChange}"/>

Component Helper:

    fetchPickListVal: function(component, fieldName, elementId) {
        var action = component.get("c.getPicklistValues");
            "obj": component.get("v.objInfo"),
            "fld": fieldName
        var opts = [];
        action.setCallback(this, function(response) {
            var state = response.getState();
            if (state == "SUCCESS") {
                var allValues = response.getReturnValue();
                    class: "optionClass",
                    label: "--- None ---",
                    value: ""
                for (var i = 0; i < allValues.length; i++) {
                        class: "optionClass",
                        label: allValues[i],
                        value: allValues[i]
                component.find(elementId).set("v.options", opts);

Component Controller:

    doInit: function(component, event, helper) {
        helper.fetchPickListVal(component, 'Industry', 'accIndustry');
    onPicklistChange: function(component, event, helper) {
        //get the value of select option

Lightning App:

<aura:application extends="ltng:outApp" access="global">
    <c:TestComponent />


How to open a new Tab using PageReference in apex class?

We can use apex:commandLink to redirect a visualforce page in a new Tab URL using PageReference in apex class.

Sample Code:

VF Page:

<apex:page controller="SampleleRedirect">
	<apex:form >
		<apex:pageblock >
			<apex:commandlink action="{!redirect}" target="_blank">
				<apex:commandButton value="Open in New Tab"/>

Apex Controller:

public class SampleleRedirect {   

	public SampleleRedirect() {

	public pageReference redirect() {
		PageReference pageRef = new PageReference('http://www.biswajeetsamal.com');
		return pageRef;

Synchronous and Asynchronous call in Salesforce

In Synchronous process the thread waits for the task to be completed and then moves to the next task Sequentially. All the tasks are completed in a single thread.

Controller Extension
Custom Controller

In Asynchronous call, the thread will not wait until it completes its tasks before proceeding to next. In a Asynchronous call, the tasks are run in different threads all together.

@future Annotation