Build an Aura Component to Override a Standard Action

Topics to learn-
1. How to populate picklist values in a field.
2. How to use modal to show popup
3. Use of slds-backdrop class
4. How to use LDS (lightning data service) to create/edit a record.

Please refer the below code to learn the above topics-

PropertyDialog.cmp




<force:recordData aura:id="forceRecord"
                      recordId=”{!v.recordId}”
                      targetFields=”{!v.propertyRecord}”
                      fields=”Id,Name,Beds__c,Baths__c,Price__c,Status__c”
                      mode=”EDIT” />


PropertyDialogController.js
({
doInit : function(component, event, helper) {
        var recId = component.get(“v.recordId”);
if (recId) {
    component.set(“v.modalContext”, “Edit”);
}
if (!recId) {
component.find(“forceRecord”).getNewRecord(
        “Property__c”,
        null,
        false,
        $A.getCallback(function() {
            var rec = component.get(“v.propertyRecord”);
            var error = component.get(“v.recordError”);
            if (error || (rec === null)) {
                console.log(“Error initializing record template: ” + error);
                return;
            }
        })
    );
}
},
    
    saveRecord : function(component, event, helper) {
        var propBeds = parseInt(component.find(‘propBeds’).get(“v.value”), 10);
var propBaths = parseInt(component.find(‘propBaths’).get(“v.value”), 10);
var propPrice = parseInt(component.find(‘propPrice’).get(“v.value”), 10);
component.set(“v.propertyRecord.Name”, component.find(‘propName’).get(“v.value”));    
component.set(“v.propertyRecord.Beds__c”, propBeds);
component.set(“v.propertyRecord.Baths__c”, propBaths);
component.set(“v.propertyRecord.Price__c”, propPrice);
component.set(“v.propertyRecord.Status__c”, component.find(‘propStatus’).get(“v.value”));
var tempRec = component.find(“forceRecord”);
tempRec.saveRecord($A.getCallback(function(result) {
    console.log(result.state);
    var resultsToast = $A.get(“e.force:showToast”);
    if (result.state === “SUCCESS”) {
        resultsToast.setParams({
            “title”: “Saved”,
            “message”: “The record was saved.”
        });
        resultsToast.fire();
        var recId = result.recordId;
helper.navigateTo(component, recId);
    } else if (result.state === “ERROR”) {
        console.log(‘Error: ‘ + JSON.stringify(result.error));
        resultsToast.setParams({
            “title”: “Error”,
            “message”: “There was an error saving the record: ” + JSON.stringify(result.error)
        });
        resultsToast.fire();
    } else {
        console.log(‘Unknown problem, state: ‘ + result.state + ‘, error: ‘ + JSON.stringify(result.error));
    }
}));
},
    cancelDialog: function(component, event, helper) {
    var recId = component.get(“v.recordId”);
    if (!recId) {
        var homeEvt = $A.get(“e.force:navigateToObjectHome”);
        homeEvt.setParams({
            “scope”: “Property__c”
        });
        homeEvt.fire();
    } else {
        helper.navigateTo(component, recId);
    }
}
})
PropertyDialogHelper.js
({
    navigateTo: function(component, recId) {
        var navEvt = $A.get(“e.force:navigateToSObject”);
        navEvt.setParams({
            “recordId”: recId
        });
        navEvt.fire();
    }
})
PicklistController.apxc
public class PickListController {
@AuraEnabled        
public static List getPickListValuesIntoList(String objectType, String selectedField){
    List pickListValuesList = new List();
    Schema.SObjectType convertToObj = Schema.getGlobalDescribe().get(objectType);
    Schema.DescribeSObjectResult res = convertToObj.getDescribe();
    Schema.DescribeFieldResult fieldResult = res.fields.getMap().get(selectedField).getDescribe();
    List ple = fieldResult.getPicklistValues();
    for( Schema.PicklistEntry pickListVal : ple){
        pickListValuesList.add(pickListVal.getLabel());
    }     
    return pickListValuesList;
}
}
PicklistValues.cmp
PicklistValuesController
({
    doInit : function(component) {
        var action = component.get(“c.getPickListValuesIntoList”);
        action.setParams({
            objectType: component.get(“v.sObjectName”),
            selectedField: component.get(“v.fieldName”)
        });
        action.setCallback(this, function(response) {
            var list = response.getReturnValue();
            component.set(“v.picklistValues”, list);
        })
        $A.enqueueAction(action);
    }
})

For more information, please comment in the commentbox or try the below trailhead-
https://trailhead.salesforce.com/content/learn/projects/workshop-override-standard-action

Published by Sandeep Kumar

He is a Salesforce Certified Application Architect having 11+ years of experience in Salesforce.

Leave a Reply